<?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>29952</bug_id>
          
          <creation_ts>2009-09-30 22:44:57 -0700</creation_ts>
          <short_desc>Move RedirectScheduler to its own file</short_desc>
          <delta_ts>2009-10-02 00:57:58 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>29947</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>151456</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-30 22:44:57 -0700</bug_when>
    <thetext>forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151458</commentid>
    <comment_count>1</comment_count>
      <attachid>40424</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-30 22:46:31 -0700</bug_when>
    <thetext>Created attachment 40424
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151461</commentid>
    <comment_count>2</comment_count>
      <attachid>40425</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-30 22:52:57 -0700</bug_when>
    <thetext>Created attachment 40425
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151615</commentid>
    <comment_count>3</comment_count>
      <attachid>40425</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-01 10:47:55 -0700</bug_when>
    <thetext>Comment on attachment 40425
Patch v1

Normally in cases like this I start the new file with an svn copy of the large file I am extracting it from.

I am disappointed we had to make so many FrameLoader internals public in order to break this out! (But that was a comment on the earlier patch really, not this one.)

&gt; +        void schedule(PassOwnPtr&lt;ScheduledRedirection&gt; redirection);

Should leave our argument here.

I think the RedirectScheduler is not well factored with respect to the frame loader. It contains more of the logic than I would like that has nothing to do with scheduling per se, which is why we end up exporting so many new functions from FrameLoader.

But this is a noble effort, lets keep going and see where it leads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151677</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-01 13:05:37 -0700</bug_when>
    <thetext>&gt; I am disappointed we had to make so many FrameLoader internals public in order
&gt; to break this out! (But that was a comment on the earlier patch really, not
&gt; this one.)

Yeah, me too.  I&apos;m hoping this will be a somewhat temporary situation.  Once I get a better understanding of FrameLoader, I hope to move some of this back (in particular, the parts that care about isComplete).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151785</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-02 00:57:58 -0700</bug_when>
    <thetext>Committed r49012: &lt;http://trac.webkit.org/changeset/49012&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40424</attachid>
            <date>2009-09-30 22:46:31 -0700</date>
            <delta_ts>2009-09-30 22:52:52 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-29952-20090930224629.patch</filename>
            <type>text/plain</type>
            <size>41520</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWZhODk0MS4uZTcwZDBiYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw0NSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIE1vdmUgUmVkaXJlY3RTY2hlZHVsZXIgdG8gaXRzIG93
biBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
OTk1MgorCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb2RlIG1vdGlvbi4KKworICAg
ICAgICBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAg
ICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRl
ci5oOgorICAgICAgICAqIGxvYWRlci9SZWRpcmVjdFNjaGVkdWxlci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkUmVkaXJlY3Rpb246Oik6CisgICAgICAgIChXZWJDb3Jl
OjpTY2hlZHVsZWRSZWRpcmVjdGlvbjo6U2NoZWR1bGVkUmVkaXJlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVkaXJlY3RTY2hlZHVsZXI6OlJlZGlyZWN0U2NoZWR1bGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlZGlyZWN0U2NoZWR1bGVyOjp+UmVkaXJlY3RTY2hlZHVsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVkaXJlY3RTY2hlZHVsZXI6OnJlZGlyZWN0U2NoZWR1bGVkRHVyaW5nTG9h
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZWRpcmVjdFNjaGVkdWxlcjo6Y2xlYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVkaXJlY3RTY2hlZHVsZXI6OnNjaGVkdWxlUmVkaXJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVkaXJlY3RTY2hlZHVsZXI6Om11c3RMb2NrQmFja0ZvcndhcmRMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlZGlyZWN0U2NoZWR1bGVyOjpzY2hlZHVsZUxvY2F0aW9uQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZGlyZWN0U2NoZWR1bGVyOjpzY2hlZHVsZUZvcm1T
dWJtaXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZGlyZWN0U2NoZWR1bGVyOjpzY2hlZHVs
ZVJlZnJlc2gpOgorICAgICAgICAoV2ViQ29yZTo6UmVkaXJlY3RTY2hlZHVsZXI6OmxvY2F0aW9u
Q2hhbmdlUGVuZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZWRpcmVjdFNjaGVkdWxlcjo6c2No
ZWR1bGVIaXN0b3J5TmF2aWdhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWRpcmVjdFNjaGVk
dWxlcjo6dGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZWRpcmVjdFNjaGVkdWxlcjo6
c2NoZWR1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVkaXJlY3RTY2hlZHVsZXI6OnN0YXJ0VGlt
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVkaXJlY3RTY2hlZHVsZXI6OmNhbmNlbCk6CisgICAg
ICAgICogbG9hZGVyL1JlZGlyZWN0U2NoZWR1bGVyLmg6IEFkZGVkLgorCisyMDA5LTA5LTMwICBB
ZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKICAgICAgICAgUmVtb3ZlIEZyYW1lTG9hZGVyOjpzY2hlZHVsZSogQVBJ
cwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk5NTAK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KaW5kZXggOTM5MjhhZS4uZWQxNTE1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMjQ0LDYgKzEyNDQsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50Lmgg
XAogCVdlYkNvcmUvbG9hZGVyL1Byb2dyZXNzVHJhY2tlci5jcHAgXAogCVdlYkNvcmUvbG9hZGVy
L1Byb2dyZXNzVHJhY2tlci5oIFwKKwlXZWJDb3JlL2xvYWRlci9SZWRpcmVjdFNjaGVkdWxlci5j
cHAgXAorCVdlYkNvcmUvbG9hZGVyL1JlZGlyZWN0U2NoZWR1bGVyLmggXAogCVdlYkNvcmUvbG9h
ZGVyL1JlcXVlc3QuY3BwIFwKIAlXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmggXAogCVdlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDFmOTNmMDEuLmY1MjFjNDkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0xNjI5LDYgKzE2MjksOCBAQAogICAgICAgICAgICAgJ2xvYWRlci9QbHVnaW5Eb2N1bWVudC5o
JywKICAgICAgICAgICAgICdsb2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmNwcCcsCiAgICAgICAgICAg
ICAnbG9hZGVyL1Byb2dyZXNzVHJhY2tlci5oJywKKyAgICAgICAgICAgICdsb2FkZXIvUmVkaXJl
Y3RTY2hlZHVsZXIuY3BwJywKKyAgICAgICAgICAgICdsb2FkZXIvUmVkaXJlY3RTY2hlZHVsZXIu
aCcsCiAgICAgICAgICAgICAnbG9hZGVyL1JlcXVlc3QuY3BwJywKICAgICAgICAgICAgICdsb2Fk
ZXIvUmVxdWVzdC5oJywKICAgICAgICAgICAgICdsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwJywK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmlu
ZGV4IGJjMjI3NzYuLjZiYWM3ZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMTEwNyw2ICsxMTA3LDcgQEAgU09VUkNFUyArPSBc
CiAgICAgbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuY3BwIFwKICAgICBsb2FkZXIvUGx1Z2lu
RG9jdW1lbnQuY3BwIFwKICAgICBsb2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmNwcCBcCisgICAgbG9h
ZGVyL1JlZGlyZWN0U2NoZWR1bGVyLmNwcCBcCiAgICAgbG9hZGVyL1JlcXVlc3QuY3BwIFwKICAg
ICBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwIFwKICAgICBsb2FkZXIvU3VicmVzb3VyY2VMb2Fk
ZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDRiZjY2ODku
LjBiODBlYjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMTc0NDks
NiArMTc0NDksMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cbG9hZGVyXFJlZGlyZWN0U2NoZWR1bGVyLmNwcCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxSZWRpcmVjdFNj
aGVkdWxlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5cbG9hZGVyXFJlcXVlc3QuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDc0NmNlYy4uNTA5ZDVk
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIzNDMs
NiArMjM0Myw4IEBACiAJCTkzRjlCN0EwMEJBNjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y5
Qjc5RTBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNlY3Rpb24uY3BwICovOyB9OwogCQk5M0Y5
QjdBMTBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNlY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjlCNzlGMEJBNjAzMjYwMDg1NDA2NCAv
KiBKU0NEQVRBU2VjdGlvbi5oICovOyB9OwogCQk5M0ZEQUZDQTBCMTEzMDc0MDBFMjc0NkYgLyog
RWRpdG9ySW5zZXJ0QWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0ZEQUZDOTBCMTEzMDc0MDBFMjc0NkYgLyogRWRpdG9ySW5zZXJ0QWN0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTc5
RjQyQzcxMDc0NzE4NjAwMDBGODNCIC8qIFJlZGlyZWN0U2NoZWR1bGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3OUY0MkM1MTA3NDcxODYwMDAw
RjgzQiAvKiBSZWRpcmVjdFNjaGVkdWxlci5jcHAgKi87IH07CisJCTk3OUY0MkM4MTA3NDcxODYw
MDAwRjgzQiAvKiBSZWRpcmVjdFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTc5RjQyQzYxMDc0NzE4NjAwMDBGODNCIC8qIFJlZGlyZWN0
U2NoZWR1bGVyLmggKi87IH07CiAJCTk3REQ0RDg2MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRp
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
REQ0RDg0MEZERjRENkQwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCAqLzsgfTsKIAkJOTdERDRE
ODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3REQ0RDg1MEZERjRENkUwMEVDRjlBNCAvKiBYU1NB
dWRpdG9yLmggKi87IH07CiAJCUExN0M4MTIyMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVu
dEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTE3QzgxMjAwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgKi87
IH07CkBAIC03NTIwLDYgKzc1MjIsOCBAQAogCQk5M0Y5Qjc5RTBCQTYwMzI2MDA4NTQwNjQgLyog
SlNDREFUQVNlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDREFUQVNlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y5Qjc5
RjBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNDREFUQVNlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTNGREFGQzkwQjExMzA3NDAwRTI3NDZGIC8qIEVkaXRvckluc2VydEFjdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdG9ySW5zZXJ0QWN0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3OUY0MkM1MTA3NDcxODYwMDAwRjgzQiAvKiBS
ZWRpcmVjdFNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZWRpcmVjdFNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3
OUY0MkM2MTA3NDcxODYwMDAwRjgzQiAvKiBSZWRpcmVjdFNjaGVkdWxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZWRpcmVjdFNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5N0RENEQ4NDBGREY0RDZEMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYU1NBdWRpdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdERDREODUwRkRGNEQ2RTAwRUNGOUE0IC8q
IFhTU0F1ZGl0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFNTQXVkaXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTdDODEyMDBGMkE1Q0Y3MDA1REFB
RUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNDU1OCw2ICsxNDU2Miw4IEBACiAJCQkJMUFDNjk0QzYwQTNCMTY3NjAwM0Y1MDQ5
IC8qIFBsdWdpbkRvY3VtZW50LmggKi8sCiAJCQkJMUEyQTY4MjEwQjVCRURFNzAwMDJBNDgwIC8q
IFByb2dyZXNzVHJhY2tlci5jcHAgKi8sCiAJCQkJMUEyQTY4MjIwQjVCRURFNzAwMDJBNDgwIC8q
IFByb2dyZXNzVHJhY2tlci5oICovLAorCQkJCTk3OUY0MkM1MTA3NDcxODYwMDAwRjgzQiAvKiBS
ZWRpcmVjdFNjaGVkdWxlci5jcHAgKi8sCisJCQkJOTc5RjQyQzYxMDc0NzE4NjAwMDBGODNCIC8q
IFJlZGlyZWN0U2NoZWR1bGVyLmggKi8sCiAJCQkJQkNCMTZDMTUwOTc5QzNCRDAwNDY3NzQxIC8q
IFJlcXVlc3QuY3BwICovLAogCQkJCUJDQjE2QzE2MDk3OUMzQkQwMDQ2Nzc0MSAvKiBSZXF1ZXN0
LmggKi8sCiAJCQkJOTNFMjI3REUwQUY1ODlBRDAwRDQ4MzI0IC8qIFJlc291cmNlTG9hZGVyLmNw
cCAqLywKQEAgLTE3OTIxLDYgKzE3OTI3LDcgQEAKIAkJCQk3NjkzQkFENTEwNkMyRENBMDA3QjA4
MjMgLyogUGx1Z2luSGFsdGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0FDRjNCRDEw
NzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1REIxQkM2QTEwNzE1QTY0MDBFRkFBNDkgLyogVHJhbnNmb3JtU291cmNlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5NzlGNDJDODEwNzQ3MTg2MDAwMEY4M0IgLyogUmVkaXJlY3RTY2hlZHVs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjAwMzcsNiArMjAwNDQsNyBAQAogCQkJCTc2OTNCQUQz
MTA2QzJEQ0EwMDdCMDgyMyAvKiBQbHVnaW5IYWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNBQ0YzQkMxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1REIxQkM2QjEwNzE1QTY0MDBFRkFBNDkgLyogVHJhbnNmb3JtU291
cmNlTGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzlGNDJDNzEwNzQ3MTg2MDAwMEY4
M0IgLyogUmVkaXJlY3RTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbCBiL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCmlu
ZGV4IGY0NDc3NDUuLjAxM2I0ZDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMu
YmtsCisrKyBiL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCkBAIC03MjgsNiArNzI4LDcgQEAg
VGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJD
b3JlLgogICAgICAgICBsb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAKICAgICAgICAgbG9h
ZGVyL1BsdWdpbkRvY3VtZW50LmNwcAogICAgICAgICBsb2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmNw
cAorICAgICAgICBsb2FkZXIvUmVkaXJlY3RTY2hlZHVsZXIuY3BwCiAgICAgICAgIGxvYWRlci9S
ZXF1ZXN0LmNwcAogICAgICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCiAgICAgICAgIGxv
YWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA1YmZj
YzYxLi43YWRkYWNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
KysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0xMjMsMTEwICsxMjMsNiBA
QCB1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CiAjZW5kaWYKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKLXN0cnVjdCBTY2hlZHVsZWRSZWRpcmVjdGlvbiB7Ci0gICAgZW51bSBUeXBlIHsg
cmVkaXJlY3Rpb24sIGxvY2F0aW9uQ2hhbmdlLCBoaXN0b3J5TmF2aWdhdGlvbiwgZm9ybVN1Ym1p
c3Npb24gfTsKLQotICAgIGNvbnN0IFR5cGUgdHlwZTsKLSAgICBjb25zdCBkb3VibGUgZGVsYXk7
Ci0gICAgY29uc3QgU3RyaW5nIHVybDsKLSAgICBjb25zdCBTdHJpbmcgcmVmZXJyZXI7Ci0gICAg
Y29uc3QgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3Q7Ci0gICAgY29uc3QgUmVmUHRyPEV2
ZW50PiBldmVudDsKLSAgICBjb25zdCBSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGU7Ci0gICAg
Y29uc3QgaW50IGhpc3RvcnlTdGVwczsKLSAgICBjb25zdCBib29sIGxvY2tIaXN0b3J5OwotICAg
IGNvbnN0IGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdDsKLSAgICBjb25zdCBib29sIHdhc1VzZXJH
ZXN0dXJlOwotICAgIGNvbnN0IGJvb2wgd2FzUmVmcmVzaDsKLSAgICBjb25zdCBib29sIHdhc0R1
cmluZ0xvYWQ7Ci0gICAgYm9vbCB0b2xkQ2xpZW50OwotCi0gICAgU2NoZWR1bGVkUmVkaXJlY3Rp
b24oZG91YmxlIGRlbGF5LCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9v
bCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29sIHdhc1VzZXJHZXN0dXJlLCBib29sIHJlZnJlc2gp
Ci0gICAgICAgIDogdHlwZShyZWRpcmVjdGlvbikKLSAgICAgICAgLCBkZWxheShkZWxheSkKLSAg
ICAgICAgLCB1cmwodXJsKQotICAgICAgICAsIGhpc3RvcnlTdGVwcygwKQotICAgICAgICAsIGxv
Y2tIaXN0b3J5KGxvY2tIaXN0b3J5KQotICAgICAgICAsIGxvY2tCYWNrRm9yd2FyZExpc3QobG9j
a0JhY2tGb3J3YXJkTGlzdCkKLSAgICAgICAgLCB3YXNVc2VyR2VzdHVyZSh3YXNVc2VyR2VzdHVy
ZSkKLSAgICAgICAgLCB3YXNSZWZyZXNoKHJlZnJlc2gpCi0gICAgICAgICwgd2FzRHVyaW5nTG9h
ZChmYWxzZSkKLSAgICAgICAgLCB0b2xkQ2xpZW50KGZhbHNlKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKCF1cmwuaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBTY2hlZHVsZWRSZWRpcmVjdGlvbihj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBsb2NrSGlzdG9y
eSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29sIHdhc1VzZXJHZXN0dXJlLCBib29sIHJl
ZnJlc2gsIGJvb2wgZHVyaW5nTG9hZCkKLSAgICAgICAgOiB0eXBlKGxvY2F0aW9uQ2hhbmdlKQot
ICAgICAgICAsIGRlbGF5KDApCi0gICAgICAgICwgdXJsKHVybCkKLSAgICAgICAgLCByZWZlcnJl
cihyZWZlcnJlcikKLSAgICAgICAgLCBoaXN0b3J5U3RlcHMoMCkKLSAgICAgICAgLCBsb2NrSGlz
dG9yeShsb2NrSGlzdG9yeSkKLSAgICAgICAgLCBsb2NrQmFja0ZvcndhcmRMaXN0KGxvY2tCYWNr
Rm9yd2FyZExpc3QpCi0gICAgICAgICwgd2FzVXNlckdlc3R1cmUod2FzVXNlckdlc3R1cmUpCi0g
ICAgICAgICwgd2FzUmVmcmVzaChyZWZyZXNoKQotICAgICAgICAsIHdhc0R1cmluZ0xvYWQoZHVy
aW5nTG9hZCkKLSAgICAgICAgLCB0b2xkQ2xpZW50KGZhbHNlKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKCF1cmwuaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBTY2hlZHVsZWRSZWRp
cmVjdGlvbihpbnQgaGlzdG9yeU5hdmlnYXRpb25TdGVwcykKLSAgICAgICAgOiB0eXBlKGhpc3Rv
cnlOYXZpZ2F0aW9uKQotICAgICAgICAsIGRlbGF5KDApCi0gICAgICAgICwgaGlzdG9yeVN0ZXBz
KGhpc3RvcnlOYXZpZ2F0aW9uU3RlcHMpCi0gICAgICAgICwgbG9ja0hpc3RvcnkoZmFsc2UpCi0g
ICAgICAgICwgbG9ja0JhY2tGb3J3YXJkTGlzdChmYWxzZSkKLSAgICAgICAgLCB3YXNVc2VyR2Vz
dHVyZShmYWxzZSkKLSAgICAgICAgLCB3YXNSZWZyZXNoKGZhbHNlKQotICAgICAgICAsIHdhc0R1
cmluZ0xvYWQoZmFsc2UpCi0gICAgICAgICwgdG9sZENsaWVudChmYWxzZSkKLSAgICB7Ci0gICAg
fQotCi0gICAgU2NoZWR1bGVkUmVkaXJlY3Rpb24oY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJh
bWVSZXF1ZXN0LAotICAgICAgICAgICAgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0Zv
cndhcmRMaXN0LCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+
IGZvcm1TdGF0ZSwKLSAgICAgICAgICAgIGJvb2wgZHVyaW5nTG9hZCkKLSAgICAgICAgOiB0eXBl
KGZvcm1TdWJtaXNzaW9uKQotICAgICAgICAsIGRlbGF5KDApCi0gICAgICAgICwgZnJhbWVSZXF1
ZXN0KGZyYW1lUmVxdWVzdCkKLSAgICAgICAgLCBldmVudChldmVudCkKLSAgICAgICAgLCBmb3Jt
U3RhdGUoZm9ybVN0YXRlKQotICAgICAgICAsIGhpc3RvcnlTdGVwcygwKQotICAgICAgICAsIGxv
Y2tIaXN0b3J5KGxvY2tIaXN0b3J5KQotICAgICAgICAsIGxvY2tCYWNrRm9yd2FyZExpc3QobG9j
a0JhY2tGb3J3YXJkTGlzdCkKLSAgICAgICAgLCB3YXNVc2VyR2VzdHVyZShmYWxzZSkKLSAgICAg
ICAgLCB3YXNSZWZyZXNoKGZhbHNlKQotICAgICAgICAsIHdhc0R1cmluZ0xvYWQoZHVyaW5nTG9h
ZCkKLSAgICAgICAgLCB0b2xkQ2xpZW50KGZhbHNlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFm
cmFtZVJlcXVlc3QuaXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUKHRoaXMtPmZvcm1TdGF0ZSk7
Ci0gICAgfQotfTsKLQotUmVkaXJlY3RTY2hlZHVsZXI6OlJlZGlyZWN0U2NoZWR1bGVyKEZyYW1l
KiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX3RpbWVyKHRoaXMsICZSZWRp
cmVjdFNjaGVkdWxlcjo6dGltZXJGaXJlZCkKLXsKLX0KLQotUmVkaXJlY3RTY2hlZHVsZXI6On5S
ZWRpcmVjdFNjaGVkdWxlcigpCi17Ci19Ci0KLWJvb2wgUmVkaXJlY3RTY2hlZHVsZXI6OnJlZGly
ZWN0U2NoZWR1bGVkRHVyaW5nTG9hZCgpCi17Ci0gICAgcmV0dXJuIG1fc2NoZWR1bGVkUmVkaXJl
Y3Rpb24gJiYgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+d2FzRHVyaW5nTG9hZDsKLX0KLQotdm9p
ZCBSZWRpcmVjdFNjaGVkdWxlcjo6Y2xlYXIoKQotewotICAgIG1fdGltZXIuc3RvcCgpOwotICAg
IG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24uY2xlYXIoKTsKLX0KLQogI2lmIEVOQUJMRShYSFRNTE1Q
KQogc3RhdGljIGNvbnN0IGNoYXIgZGVmYXVsdEFjY2VwdEhlYWRlcltdID0gImFwcGxpY2F0aW9u
L3htbCxhcHBsaWNhdGlvbi92bmQud2FwLnhodG1sK3htbCxhcHBsaWNhdGlvbi94aHRtbCt4bWw7
cHJvZmlsZT0naHR0cDovL3d3dy53YXBmb3J1bS5vcmcveGh0bWwnLHRleHQvaHRtbDtxPTAuOSx0
ZXh0L3BsYWluO3E9MC44LGltYWdlL3BuZywqLyo7cT0wLjUiOwogI2Vsc2UKQEAgLTEzNzQsMTE3
ICsxMjcwLDYgQEAgS1VSTCBGcmFtZUxvYWRlcjo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1
cmwpCiAgICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCk7CiB9
CiAKLXZvaWQgUmVkaXJlY3RTY2hlZHVsZXI6OnNjaGVkdWxlUmVkaXJlY3QoZG91YmxlIGRlbGF5
LCBjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBpZiAoZGVsYXkgPCAwIHx8IGRlbGF5ID4gSU5U
X01BWCAvIDEwMDApCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgaWYgKCFtX2ZyYW1l
LT5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3RvcnkgaXRlbSBpZiB0aGUg
cmVmcmVzaCB0aW1lb3V0IGlzID4gMSBzZWNvbmQuCi0gICAgaWYgKCFtX3NjaGVkdWxlZFJlZGly
ZWN0aW9uIHx8IGRlbGF5IDw9IG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmRlbGF5KQotICAgICAg
ICBzY2hlZHVsZShuZXcgU2NoZWR1bGVkUmVkaXJlY3Rpb24oZGVsYXksIHVybCwgdHJ1ZSwgZGVs
YXkgPD0gMSwgZmFsc2UsIGZhbHNlKSk7Ci19Ci0KLWJvb2wgUmVkaXJlY3RTY2hlZHVsZXI6Om11
c3RMb2NrQmFja0ZvcndhcmRMaXN0KEZyYW1lKiB0YXJnZXRGcmFtZSkKLXsKLSAgICAvLyBOYXZp
Z2F0aW9uIG9mIGEgc3ViZnJhbWUgZHVyaW5nIGxvYWRpbmcgb2YgYW4gYW5jZXN0b3IgZnJhbWUg
ZG9lcyBub3QgY3JlYXRlIGEgbmV3IGJhY2svZm9yd2FyZCBpdGVtLgotICAgIC8vIFRoZSBkZWZp
bml0aW9uIG9mICJkdXJpbmcgbG9hZCIgaXMgYW55IHRpbWUgYmVmb3JlIGFsbCBoYW5kbGVycyBm
b3IgdGhlIGxvYWQgZXZlbnQgaGF2ZSBiZWVuIHJ1bi4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTU3IGZvciB0aGUgb3JpZ2luYWwgbW90aXZh
dGlvbiBmb3IgdGhpcy4KLSAgICAKLSAgICBmb3IgKEZyYW1lKiBhbmNlc3RvciA9IHRhcmdldEZy
YW1lLT50cmVlKCktPnBhcmVudCgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+dHJl
ZSgpLT5wYXJlbnQoKSkgewotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBhbmNlc3Rvci0+
ZG9jdW1lbnQoKTsKLSAgICAgICAgaWYgKCFhbmNlc3Rvci0+bG9hZGVyKCktPmlzQ29tcGxldGUo
KSB8fCBkb2N1bWVudCAmJiBkb2N1bWVudC0+cHJvY2Vzc2luZ0xvYWRFdmVudCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBS
ZWRpcmVjdFNjaGVkdWxlcjo6c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFj
a0ZvcndhcmRMaXN0LCBib29sIHdhc1VzZXJHZXN0dXJlKQotewotICAgIGlmICghbV9mcmFtZS0+
cGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbG9ja0JhY2tGb3J3YXJkTGlzdCA9IGxvY2tCYWNrRm9yd2FyZExp
c3QgfHwgbXVzdExvY2tCYWNrRm9yd2FyZExpc3QobV9mcmFtZSk7Ci0KLSAgICBGcmFtZUxvYWRl
ciogbG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7Ci0gICAgCi0gICAgLy8gSWYgdGhlIFVSTCB3
ZSdyZSBnb2luZyB0byBuYXZpZ2F0ZSB0byBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBvbmUs
IGV4Y2VwdCBmb3IgdGhlCi0gICAgLy8gZnJhZ21lbnQgcGFydCwgd2UgZG9uJ3QgbmVlZCB0byBz
Y2hlZHVsZSB0aGUgbG9jYXRpb24gY2hhbmdlLgotICAgIEtVUkwgcGFyc2VkVVJMKFBhcnNlZFVS
TFN0cmluZywgdXJsKTsKLSAgICBpZiAocGFyc2VkVVJMLmhhc0ZyYWdtZW50SWRlbnRpZmllcigp
ICYmIGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIobG9hZGVyLT51cmwoKSwgcGFyc2Vk
VVJMKSkgewotICAgICAgICBsb2FkZXItPmNoYW5nZUxvY2F0aW9uKGxvYWRlci0+Y29tcGxldGVV
UkwodXJsKSwgcmVmZXJyZXIsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCB3YXNV
c2VyR2VzdHVyZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgYSBs
b2NhdGlvbiBjaGFuZ2Ugb2YgYSBwYWdlIHdpdGggbm8gZG9jdW1lbnQgYXMgYSBzcGVjaWFsIGNh
c2UuCi0gICAgLy8gVGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBmcmFtZSBjaGFuZ2VzIHRoZSBsb2Nh
dGlvbiBvZiBhbm90aGVyIGZyYW1lLgotICAgIGJvb2wgZHVyaW5nTG9hZCA9ICFsb2FkZXItPmNv
bW1pdHRlZEZpcnN0UmVhbERvY3VtZW50TG9hZCgpOwotCi0gICAgc2NoZWR1bGUobmV3IFNjaGVk
dWxlZFJlZGlyZWN0aW9uKHVybCwgcmVmZXJyZXIsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0Zvcndh
cmRMaXN0LCB3YXNVc2VyR2VzdHVyZSwgZmFsc2UsIGR1cmluZ0xvYWQpKTsKLX0KLQotdm9pZCBS
ZWRpcmVjdFNjaGVkdWxlcjo6c2NoZWR1bGVGb3JtU3VibWlzc2lvbihjb25zdCBGcmFtZUxvYWRS
ZXF1ZXN0JiBmcmFtZVJlcXVlc3QsCi0gICAgYm9vbCBsb2NrSGlzdG9yeSwgUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUpCi17Ci0gICAgQVNT
RVJUKG1fZnJhbWUtPnBhZ2UoKSk7Ci0gICAgQVNTRVJUKCFmcmFtZVJlcXVlc3QuaXNFbXB0eSgp
KTsKLQotICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGZvcm0g
c3VibWlzc2lvbnMgd2hlcmUgdGhlIFVSTCBpcyB0aGUgc2FtZQotICAgIC8vIGFzIHRoZSBjdXJy
ZW50IG9uZSBleGNlcHQgZm9yIHRoZSBmcmFnbWVudCBwYXJ0PyBTZWUgc2NoZWR1bGVMb2NhdGlv
bkNoYW5nZSBhYm92ZS4KLQotICAgIC8vIEhhbmRsZSBhIGxvY2F0aW9uIGNoYW5nZSBvZiBhIHBh
Z2Ugd2l0aCBubyBkb2N1bWVudCBhcyBhIHNwZWNpYWwgY2FzZS4KLSAgICAvLyBUaGlzIG1heSBo
YXBwZW4gd2hlbiBhIGZyYW1lIGNoYW5nZXMgdGhlIGxvY2F0aW9uIG9mIGFub3RoZXIgZnJhbWUu
Ci0gICAgYm9vbCBkdXJpbmdMb2FkID0gIW1fZnJhbWUtPmxvYWRlcigpLT5jb21taXR0ZWRGaXJz
dFJlYWxEb2N1bWVudExvYWQoKTsKLQotICAgIHNjaGVkdWxlKG5ldyBTY2hlZHVsZWRSZWRpcmVj
dGlvbihmcmFtZVJlcXVlc3QsIGxvY2tIaXN0b3J5LCBtdXN0TG9ja0JhY2tGb3J3YXJkTGlzdCht
X2ZyYW1lKSwgZXZlbnQsIGZvcm1TdGF0ZSwgZHVyaW5nTG9hZCkpOwotfQotCi12b2lkIFJlZGly
ZWN0U2NoZWR1bGVyOjpzY2hlZHVsZVJlZnJlc2goYm9vbCB3YXNVc2VyR2VzdHVyZSkKLXsKLSAg
ICBpZiAoIW1fZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGNvbnN0
IEtVUkwmIHVybCA9IG1fZnJhbWUtPmxvYWRlcigpLT51cmwoKTsKLQotICAgIGlmICh1cmwuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzY2hlZHVsZShuZXcgU2NoZWR1bGVkUmVk
aXJlY3Rpb24odXJsLnN0cmluZygpLCBtX2ZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJl
cigpLCB0cnVlLCB0cnVlLCB3YXNVc2VyR2VzdHVyZSwgdHJ1ZSwgZmFsc2UpKTsKLX0KLQotYm9v
bCBSZWRpcmVjdFNjaGVkdWxlcjo6bG9jYXRpb25DaGFuZ2VQZW5kaW5nKCkKLXsKLSAgICBpZiAo
IW1fc2NoZWR1bGVkUmVkaXJlY3Rpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3
aXRjaCAobV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dHlwZSkgewotICAgICAgICBjYXNlIFNjaGVk
dWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6aGlzdG9yeU5hdmlnYXRpb246Ci0g
ICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlOgotICAgICAg
ICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpmb3JtU3VibWlzc2lvbjoKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVkaXJlY3RTY2hlZHVsZXI6OnNjaGVkdWxlSGlzdG9yeU5h
dmlnYXRpb24oaW50IHN0ZXBzKQotewotICAgIGlmICghbV9mcmFtZS0+cGFnZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBzY2hlZHVsZShuZXcgU2NoZWR1bGVkUmVkaXJlY3Rpb24oc3RlcHMp
KTsKLX0KLQogdm9pZCBGcmFtZUxvYWRlcjo6Z29CYWNrT3JGb3J3YXJkKGludCBkaXN0YW5jZSkK
IHsKICAgICBpZiAoZGlzdGFuY2UgPT0gMCkKQEAgLTE1MTUsNDggKzEzMDAsNiBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpnb0JhY2tPckZvcndhcmQoaW50IGRpc3RhbmNlKQogICAgICAgICBwYWdlLT5n
b1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlSW5kZXhlZEJhY2tGb3J3YXJkKTsKIH0KIAotdm9p
ZCBSZWRpcmVjdFNjaGVkdWxlcjo6dGltZXJGaXJlZChUaW1lcjxSZWRpcmVjdFNjaGVkdWxlcj4q
KQotewotICAgIEFTU0VSVChtX2ZyYW1lLT5wYWdlKCkpOwotCi0gICAgaWYgKG1fZnJhbWUtPnBh
Z2UoKS0+ZGVmZXJzTG9hZGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBPd25QdHI8U2No
ZWR1bGVkUmVkaXJlY3Rpb24+IHJlZGlyZWN0aW9uKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24ucmVs
ZWFzZSgpKTsKLSAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7Ci0K
LSAgICBzd2l0Y2ggKHJlZGlyZWN0aW9uLT50eXBlKSB7Ci0gICAgICAgIGNhc2UgU2NoZWR1bGVk
UmVkaXJlY3Rpb246OnJlZGlyZWN0aW9uOgotICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0
aW9uOjpsb2NhdGlvbkNoYW5nZToKLSAgICAgICAgICAgIGxvYWRlci0+Y2hhbmdlTG9jYXRpb24o
S1VSTChQYXJzZWRVUkxTdHJpbmcsIHJlZGlyZWN0aW9uLT51cmwpLCByZWRpcmVjdGlvbi0+cmVm
ZXJyZXIsCi0gICAgICAgICAgICAgICAgcmVkaXJlY3Rpb24tPmxvY2tIaXN0b3J5LCByZWRpcmVj
dGlvbi0+bG9ja0JhY2tGb3J3YXJkTGlzdCwgcmVkaXJlY3Rpb24tPndhc1VzZXJHZXN0dXJlLCBy
ZWRpcmVjdGlvbi0+d2FzUmVmcmVzaCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNh
c2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246Omhpc3RvcnlOYXZpZ2F0aW9uOgotICAgICAgICAgICAg
aWYgKHJlZGlyZWN0aW9uLT5oaXN0b3J5U3RlcHMgPT0gMCkgewotICAgICAgICAgICAgICAgIC8v
IFNwZWNpYWwgY2FzZSBmb3IgZ28oMCkgZnJvbSBhIGZyYW1lIC0+IHJlbG9hZCBvbmx5IHRoZSBm
cmFtZQotICAgICAgICAgICAgICAgIGxvYWRlci0+dXJsU2VsZWN0ZWQobG9hZGVyLT51cmwoKSwg
IiIsIDAsIHJlZGlyZWN0aW9uLT5sb2NrSGlzdG9yeSwgcmVkaXJlY3Rpb24tPmxvY2tCYWNrRm9y
d2FyZExpc3QsIHJlZGlyZWN0aW9uLT53YXNVc2VyR2VzdHVyZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gZ28oaSE9MCkgZnJvbSBhIGZy
YW1lIG5hdmlnYXRlcyBpbnRvIHRoZSBoaXN0b3J5IG9mIHRoZSBmcmFtZSBvbmx5LAotICAgICAg
ICAgICAgLy8gaW4gYm90aCBJRSBhbmQgTlMgKGJ1dCBub3QgaW4gTW96aWxsYSkuIFdlIGNhbid0
IGVhc2lseSBkbyB0aGF0LgotICAgICAgICAgICAgaWYgKGxvYWRlci0+Y2FuR29CYWNrT3JGb3J3
YXJkKHJlZGlyZWN0aW9uLT5oaXN0b3J5U3RlcHMpKQotICAgICAgICAgICAgICAgIGxvYWRlci0+
Z29CYWNrT3JGb3J3YXJkKHJlZGlyZWN0aW9uLT5oaXN0b3J5U3RlcHMpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpmb3JtU3VibWlzc2lv
bjoKLSAgICAgICAgICAgIC8vIFRoZSBzdWJtaXRGb3JtIGZ1bmN0aW9uIHdpbGwgZmluZCBhIHRh
cmdldCBmcmFtZSBiZWZvcmUgdXNpbmcgdGhlIHJlZGlyZWN0aW9uIHRpbWVyLgotICAgICAgICAg
ICAgLy8gTm93IHRoYXQgdGhlIHRpbWVyIGhhcyBmaXJlZCwgd2UgbmVlZCB0byByZXBlYXQgdGhl
IHNlY3VyaXR5IGNoZWNrIHdoaWNoIG5vcm1hbGx5IGlzIGRvbmUgd2hlbgotICAgICAgICAgICAg
Ly8gc2VsZWN0aW5nIGEgdGFyZ2V0LCBpbiBjYXNlIGNvbmRpdGlvbnMgaGF2ZSBjaGFuZ2VkLiBP
dGhlciBjb2RlIHBhdGhzIGF2b2lkIHRoaXMgYnkgdGFyZ2V0aW5nCi0gICAgICAgICAgICAvLyB3
aXRob3V0IGxlYXZpbmcgYSB0aW1lIHdpbmRvdy4gSWYgd2UgZmFpbCB0aGUgY2hlY2sganVzdCBz
aWxlbnRseSBkcm9wIHRoZSBmb3JtIHN1Ym1pc3Npb24uCi0gICAgICAgICAgICBpZiAoIXJlZGly
ZWN0aW9uLT5mb3JtU3RhdGUtPnNvdXJjZUZyYW1lKCktPmxvYWRlcigpLT5zaG91bGRBbGxvd05h
dmlnYXRpb24obV9mcmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
bG9hZGVyLT5sb2FkRnJhbWVSZXF1ZXN0KHJlZGlyZWN0aW9uLT5mcmFtZVJlcXVlc3QsIHJlZGly
ZWN0aW9uLT5sb2NrSGlzdG9yeSwgcmVkaXJlY3Rpb24tPmxvY2tCYWNrRm9yd2FyZExpc3QsCi0g
ICAgICAgICAgICAgICAgcmVkaXJlY3Rpb24tPmV2ZW50LCByZWRpcmVjdGlvbi0+Zm9ybVN0YXRl
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQogdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFVSTEludG9DaGlsZEZyYW1lKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcmVyLCBGcmFtZSogY2hpbGRGcmFtZSkKIHsKICAg
ICBBU1NFUlQoY2hpbGRGcmFtZSk7CkBAIC0yMTU4LDc2ICsxOTAxLDYgQEAgYm9vbCBGcmFtZUxv
YWRlcjo6aXNDb21wbGV0ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faXNDb21wbGV0ZTsKIH0KIAot
dm9pZCBSZWRpcmVjdFNjaGVkdWxlcjo6c2NoZWR1bGUoUGFzc093blB0cjxTY2hlZHVsZWRSZWRp
cmVjdGlvbj4gcmVkaXJlY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fZnJhbWUtPnBhZ2UoKSk7Ci0g
ICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpOwotCi0gICAgLy8gSWYg
YSByZWRpcmVjdCB3YXMgc2NoZWR1bGVkIGR1cmluZyBhIGxvYWQsIHRoZW4gc3RvcCB0aGUgY3Vy
cmVudCBsb2FkLgotICAgIC8vIE90aGVyd2lzZSB3aGVuIHRoZSBjdXJyZW50IGxvYWQgdHJhbnNp
dGlvbnMgZnJvbSBhIHByb3Zpc2lvbmFsIHRvIGEgCi0gICAgLy8gY29tbWl0dGVkIHN0YXRlLCBw
ZW5kaW5nIHJlZGlyZWN0cyBtYXkgYmUgY2FuY2VsbGVkLiAKLSAgICBpZiAocmVkaXJlY3Rpb24t
Pndhc0R1cmluZ0xvYWQpIHsKLSAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBwcm92aXNpb25h
bERvY3VtZW50TG9hZGVyID0gbG9hZGVyLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkpCi0g
ICAgICAgICAgICBwcm92aXNpb25hbERvY3VtZW50TG9hZGVyLT5zdG9wTG9hZGluZygpOwotICAg
ICAgICBsb2FkZXItPnN0b3BMb2FkaW5nKFVubG9hZEV2ZW50UG9saWN5VW5sb2FkQW5kUGFnZUhp
ZGUpOyAgIAotICAgIH0KLQotICAgIGNhbmNlbCgpOwotICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rp
b24gPSByZWRpcmVjdGlvbjsKLSAgICBpZiAoIWxvYWRlci0+aXNDb21wbGV0ZSgpICYmIG1fc2No
ZWR1bGVkUmVkaXJlY3Rpb24tPnR5cGUgIT0gU2NoZWR1bGVkUmVkaXJlY3Rpb246OnJlZGlyZWN0
aW9uKQotICAgICAgICBsb2FkZXItPmNvbXBsZXRlZCgpOwotICAgIHN0YXJ0VGltZXIoKTsKLX0K
LQotdm9pZCBSZWRpcmVjdFNjaGVkdWxlcjo6c3RhcnRUaW1lcigpCi17Ci0gICAgaWYgKCFtX3Nj
aGVkdWxlZFJlZGlyZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9mcmFt
ZS0+cGFnZSgpKTsKLSAgICAKLSAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gbV9mcmFtZS0+bG9h
ZGVyKCk7Ci0KLSAgICBpZiAobV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dHlwZSA9PSBTY2hlZHVsZWRSZWRpcmVj
dGlvbjo6cmVkaXJlY3Rpb24gJiYgIWxvYWRlci0+YWxsQW5jZXN0b3JzQXJlQ29tcGxldGUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV90aW1lci5zdGFydE9uZVNob3QobV9zY2hlZHVsZWRS
ZWRpcmVjdGlvbi0+ZGVsYXkpOwotCi0gICAgc3dpdGNoIChtX3NjaGVkdWxlZFJlZGlyZWN0aW9u
LT50eXBlKSB7Ci0gICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hh
bmdlOgotICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKLSAg
ICAgICAgICAgIGlmIChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT50b2xkQ2xpZW50KQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPnRv
bGRDbGllbnQgPSB0cnVlOwotICAgICAgICAgICAgbG9hZGVyLT5jbGllbnRSZWRpcmVjdGVkKEtV
UkwoUGFyc2VkVVJMU3RyaW5nLCBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT51cmwpLAotICAgICAg
ICAgICAgICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmRlbGF5LAotICAgICAgICAgICAgICAg
IGN1cnJlbnRUaW1lKCkgKyBtX3RpbWVyLm5leHRGaXJlSW50ZXJ2YWwoKSwKLSAgICAgICAgICAg
ICAgICBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT5sb2NrQmFja0ZvcndhcmRMaXN0KTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6Zm9ybVN1
Ym1pc3Npb246Ci0gICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgbWFrZSBzZW5zZSB0byBy
ZXBvcnQgZm9ybSBzdWJtaXNzaW9ucyBhcyBjbGllbnQgcmVkaXJlY3RzIHRvby4KLSAgICAgICAg
ICAgIC8vIEJ1dCB3ZSBkaWRuJ3QgZG8gdGhhdCBpbiB0aGUgcGFzdCB3aGVuIGZvcm0gc3VibWlz
c2lvbiB1c2VkIGEgc2VwYXJhdGUgZGVsYXkKLSAgICAgICAgICAgIC8vIG1lY2hhbmlzbSwgc28g
ZG9pbmcgaXQgd2lsbCBiZSBhIGJlaGF2aW9yIGNoYW5nZS4KLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6aGlzdG9yeU5hdmlnYXRpb246Ci0g
ICAgICAgICAgICAvLyBEb24ndCByZXBvcnQgaGlzdG9yeSBuYXZpZ2F0aW9ucy4KLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQg
UmVkaXJlY3RTY2hlZHVsZXI6OmNhbmNlbChib29sIG5ld0xvYWRJblByb2dyZXNzKQotewotICAg
IG1fdGltZXIuc3RvcCgpOwotCi0gICAgT3duUHRyPFNjaGVkdWxlZFJlZGlyZWN0aW9uPiByZWRp
cmVjdGlvbihtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLnJlbGVhc2UoKSk7Ci0gICAgaWYgKHJlZGly
ZWN0aW9uICYmIHJlZGlyZWN0aW9uLT50b2xkQ2xpZW50KQotICAgICAgICBtX2ZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50UmVkaXJlY3RDYW5jZWxsZWRPckZpbmlzaGVkKG5ld0xvYWRJblByb2dyZXNz
KTsKLX0KLQogdm9pZCBGcmFtZUxvYWRlcjo6Y29tcGxldGVkKCkKIHsKICAgICBSZWZQdHI8RnJh
bWU+IHByb3RlY3QobV9mcmFtZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5oIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAppbmRleCAyMjllZGZiLi42ZmI2
MzlmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCisrKyBiL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkNh
Y2hlUG9saWN5LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgorI2luY2x1ZGUgIlJl
ZGlyZWN0U2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC03Miw3ICs3Myw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBXaWRnZXQ7CiAKICAgICBzdHJ1Y3Qg
RnJhbWVMb2FkUmVxdWVzdDsKLSAgICBzdHJ1Y3QgU2NoZWR1bGVkUmVkaXJlY3Rpb247CiAgICAg
c3RydWN0IFdpbmRvd0ZlYXR1cmVzOwogCiAgICAgYm9vbCBpc0JhY2tGb3J3YXJkTG9hZFR5cGUo
RnJhbWVMb2FkVHlwZSk7CkBAIC0xMTIsMzYgKzExMiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdm9pZCogbV9hcmd1bWVudDsKICAgICB9OwogCi0gICAgY2xhc3MgUmVkaXJlY3RT
Y2hlZHVsZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUmVk
aXJlY3RTY2hlZHVsZXIoRnJhbWUqKTsKLSAgICAgICAgflJlZGlyZWN0U2NoZWR1bGVyKCk7Ci0K
LSAgICAgICAgYm9vbCByZWRpcmVjdFNjaGVkdWxlZER1cmluZ0xvYWQoKTsKLSAgICAgICAgYm9v
bCBsb2NhdGlvbkNoYW5nZVBlbmRpbmcoKTsKLQotICAgICAgICB2b2lkIHNjaGVkdWxlUmVkaXJl
Y3QoZG91YmxlIGRlbGF5LCBjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgICAgIHZvaWQgc2NoZWR1
bGVMb2NhdGlvbkNoYW5nZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJl
ciwgYm9vbCBsb2NrSGlzdG9yeSA9IHRydWUsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCA9IHRy
dWUsIGJvb2wgdXNlckdlc3R1cmUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgc2NoZWR1bGVGb3Jt
U3VibWlzc2lvbihjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBsb2NrSGlzdG9yeSwgUGFz
c1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7Ci0gICAgICAgIHZvaWQgc2No
ZWR1bGVSZWZyZXNoKGJvb2wgdXNlckdlc3R1cmUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgc2No
ZWR1bGVIaXN0b3J5TmF2aWdhdGlvbihpbnQgc3RlcHMpOwotCi0gICAgICAgIHZvaWQgc3RhcnRU
aW1lcigpOwotCi0gICAgICAgIHZvaWQgY2FuY2VsKGJvb2wgbmV3TG9hZEluUHJvZ3Jlc3MgPSBm
YWxzZSk7Ci0gICAgICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZv
aWQgdGltZXJGaXJlZChUaW1lcjxSZWRpcmVjdFNjaGVkdWxlcj4qKTsKLSAgICAgICAgdm9pZCBz
Y2hlZHVsZShQYXNzT3duUHRyPFNjaGVkdWxlZFJlZGlyZWN0aW9uPiByZWRpcmVjdGlvbik7Ci0K
LSAgICAgICAgc3RhdGljIGJvb2wgbXVzdExvY2tCYWNrRm9yd2FyZExpc3QoRnJhbWUqIHRhcmdl
dEZyYW1lKTsKLQotICAgICAgICBGcmFtZSogbV9mcmFtZTsKLSAgICAgICAgVGltZXI8UmVkaXJl
Y3RTY2hlZHVsZXI+IG1fdGltZXI7Ci0gICAgICAgIE93blB0cjxTY2hlZHVsZWRSZWRpcmVjdGlv
bj4gbV9zY2hlZHVsZWRSZWRpcmVjdGlvbjsKLSAgICB9OwotCiAgICAgY2xhc3MgRnJhbWVMb2Fk
ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRnJhbWVMb2Fk
ZXIoRnJhbWUqLCBGcmFtZUxvYWRlckNsaWVudCopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2Fk
ZXIvUmVkaXJlY3RTY2hlZHVsZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvUmVkaXJlY3RTY2hlZHVs
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OTY5MTYKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2xvYWRlci9SZWRpcmVjdFNjaGVkdWxlci5jcHAKQEAgLTAs
MCArMSwzNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICho
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWRhbSBC
YXJ0aC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVkaXJlY3RTY2hlZHVsZXIuaCIKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAi
Rm9ybVN0YXRlLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFNjaGVkdWxlZFJl
ZGlyZWN0aW9uIHsKKyAgICBlbnVtIFR5cGUgeyByZWRpcmVjdGlvbiwgbG9jYXRpb25DaGFuZ2Us
IGhpc3RvcnlOYXZpZ2F0aW9uLCBmb3JtU3VibWlzc2lvbiB9OworCisgICAgY29uc3QgVHlwZSB0
eXBlOworICAgIGNvbnN0IGRvdWJsZSBkZWxheTsKKyAgICBjb25zdCBTdHJpbmcgdXJsOworICAg
IGNvbnN0IFN0cmluZyByZWZlcnJlcjsKKyAgICBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1l
UmVxdWVzdDsKKyAgICBjb25zdCBSZWZQdHI8RXZlbnQ+IGV2ZW50OworICAgIGNvbnN0IFJlZlB0
cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZTsKKyAgICBjb25zdCBpbnQgaGlzdG9yeVN0ZXBzOworICAg
IGNvbnN0IGJvb2wgbG9ja0hpc3Rvcnk7CisgICAgY29uc3QgYm9vbCBsb2NrQmFja0ZvcndhcmRM
aXN0OworICAgIGNvbnN0IGJvb2wgd2FzVXNlckdlc3R1cmU7CisgICAgY29uc3QgYm9vbCB3YXNS
ZWZyZXNoOworICAgIGNvbnN0IGJvb2wgd2FzRHVyaW5nTG9hZDsKKyAgICBib29sIHRvbGRDbGll
bnQ7CisKKyAgICBTY2hlZHVsZWRSZWRpcmVjdGlvbihkb3VibGUgZGVsYXksIGNvbnN0IFN0cmlu
ZyYgdXJsLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wg
d2FzVXNlckdlc3R1cmUsIGJvb2wgcmVmcmVzaCkKKyAgICAgICAgOiB0eXBlKHJlZGlyZWN0aW9u
KQorICAgICAgICAsIGRlbGF5KGRlbGF5KQorICAgICAgICAsIHVybCh1cmwpCisgICAgICAgICwg
aGlzdG9yeVN0ZXBzKDApCisgICAgICAgICwgbG9ja0hpc3RvcnkobG9ja0hpc3RvcnkpCisgICAg
ICAgICwgbG9ja0JhY2tGb3J3YXJkTGlzdChsb2NrQmFja0ZvcndhcmRMaXN0KQorICAgICAgICAs
IHdhc1VzZXJHZXN0dXJlKHdhc1VzZXJHZXN0dXJlKQorICAgICAgICAsIHdhc1JlZnJlc2gocmVm
cmVzaCkKKyAgICAgICAgLCB3YXNEdXJpbmdMb2FkKGZhbHNlKQorICAgICAgICAsIHRvbGRDbGll
bnQoZmFsc2UpCisgICAgeworICAgICAgICBBU1NFUlQoIXVybC5pc0VtcHR5KCkpOworICAgIH0K
KworICAgIFNjaGVkdWxlZFJlZGlyZWN0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIHJlZmVycmVyLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3Qs
IGJvb2wgd2FzVXNlckdlc3R1cmUsIGJvb2wgcmVmcmVzaCwgYm9vbCBkdXJpbmdMb2FkKQorICAg
ICAgICA6IHR5cGUobG9jYXRpb25DaGFuZ2UpCisgICAgICAgICwgZGVsYXkoMCkKKyAgICAgICAg
LCB1cmwodXJsKQorICAgICAgICAsIHJlZmVycmVyKHJlZmVycmVyKQorICAgICAgICAsIGhpc3Rv
cnlTdGVwcygwKQorICAgICAgICAsIGxvY2tIaXN0b3J5KGxvY2tIaXN0b3J5KQorICAgICAgICAs
IGxvY2tCYWNrRm9yd2FyZExpc3QobG9ja0JhY2tGb3J3YXJkTGlzdCkKKyAgICAgICAgLCB3YXNV
c2VyR2VzdHVyZSh3YXNVc2VyR2VzdHVyZSkKKyAgICAgICAgLCB3YXNSZWZyZXNoKHJlZnJlc2gp
CisgICAgICAgICwgd2FzRHVyaW5nTG9hZChkdXJpbmdMb2FkKQorICAgICAgICAsIHRvbGRDbGll
bnQoZmFsc2UpCisgICAgeworICAgICAgICBBU1NFUlQoIXVybC5pc0VtcHR5KCkpOworICAgIH0K
KworICAgIGV4cGxpY2l0IFNjaGVkdWxlZFJlZGlyZWN0aW9uKGludCBoaXN0b3J5TmF2aWdhdGlv
blN0ZXBzKQorICAgICAgICA6IHR5cGUoaGlzdG9yeU5hdmlnYXRpb24pCisgICAgICAgICwgZGVs
YXkoMCkKKyAgICAgICAgLCBoaXN0b3J5U3RlcHMoaGlzdG9yeU5hdmlnYXRpb25TdGVwcykKKyAg
ICAgICAgLCBsb2NrSGlzdG9yeShmYWxzZSkKKyAgICAgICAgLCBsb2NrQmFja0ZvcndhcmRMaXN0
KGZhbHNlKQorICAgICAgICAsIHdhc1VzZXJHZXN0dXJlKGZhbHNlKQorICAgICAgICAsIHdhc1Jl
ZnJlc2goZmFsc2UpCisgICAgICAgICwgd2FzRHVyaW5nTG9hZChmYWxzZSkKKyAgICAgICAgLCB0
b2xkQ2xpZW50KGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBTY2hlZHVsZWRSZWRpcmVjdGlv
bihjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZVJlcXVlc3QsCisgICAgICAgICAgICBib29s
IGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIFBhc3NSZWZQdHI8RXZlbnQ+
IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlLAorICAgICAgICAgICAgYm9v
bCBkdXJpbmdMb2FkKQorICAgICAgICA6IHR5cGUoZm9ybVN1Ym1pc3Npb24pCisgICAgICAgICwg
ZGVsYXkoMCkKKyAgICAgICAgLCBmcmFtZVJlcXVlc3QoZnJhbWVSZXF1ZXN0KQorICAgICAgICAs
IGV2ZW50KGV2ZW50KQorICAgICAgICAsIGZvcm1TdGF0ZShmb3JtU3RhdGUpCisgICAgICAgICwg
aGlzdG9yeVN0ZXBzKDApCisgICAgICAgICwgbG9ja0hpc3RvcnkobG9ja0hpc3RvcnkpCisgICAg
ICAgICwgbG9ja0JhY2tGb3J3YXJkTGlzdChsb2NrQmFja0ZvcndhcmRMaXN0KQorICAgICAgICAs
IHdhc1VzZXJHZXN0dXJlKGZhbHNlKQorICAgICAgICAsIHdhc1JlZnJlc2goZmFsc2UpCisgICAg
ICAgICwgd2FzRHVyaW5nTG9hZChkdXJpbmdMb2FkKQorICAgICAgICAsIHRvbGRDbGllbnQoZmFs
c2UpCisgICAgeworICAgICAgICBBU1NFUlQoIWZyYW1lUmVxdWVzdC5pc0VtcHR5KCkpOworICAg
ICAgICBBU1NFUlQodGhpcy0+Zm9ybVN0YXRlKTsKKyAgICB9Cit9OworCitSZWRpcmVjdFNjaGVk
dWxlcjo6UmVkaXJlY3RTY2hlZHVsZXIoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFt
ZSkKKyAgICAsIG1fdGltZXIodGhpcywgJlJlZGlyZWN0U2NoZWR1bGVyOjp0aW1lckZpcmVkKQor
eworfQorCitSZWRpcmVjdFNjaGVkdWxlcjo6flJlZGlyZWN0U2NoZWR1bGVyKCkKK3sKK30KKwor
Ym9vbCBSZWRpcmVjdFNjaGVkdWxlcjo6cmVkaXJlY3RTY2hlZHVsZWREdXJpbmdMb2FkKCkKK3sK
KyAgICByZXR1cm4gbV9zY2hlZHVsZWRSZWRpcmVjdGlvbiAmJiBtX3NjaGVkdWxlZFJlZGlyZWN0
aW9uLT53YXNEdXJpbmdMb2FkOworfQorCit2b2lkIFJlZGlyZWN0U2NoZWR1bGVyOjpjbGVhcigp
Cit7CisgICAgbV90aW1lci5zdG9wKCk7CisgICAgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi5jbGVh
cigpOworfQorCit2b2lkIFJlZGlyZWN0U2NoZWR1bGVyOjpzY2hlZHVsZVJlZGlyZWN0KGRvdWJs
ZSBkZWxheSwgY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgaWYgKGRlbGF5IDwgMCB8fCBkZWxh
eSA+IElOVF9NQVggLyAxMDAwKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGlmICgh
bV9mcmFtZS0+cGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodXJsLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ugd2FudCBhIG5ldyBoaXN0b3J5IGl0ZW0g
aWYgdGhlIHJlZnJlc2ggdGltZW91dCBpcyA+IDEgc2Vjb25kLgorICAgIGlmICghbV9zY2hlZHVs
ZWRSZWRpcmVjdGlvbiB8fCBkZWxheSA8PSBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT5kZWxheSkK
KyAgICAgICAgc2NoZWR1bGUobmV3IFNjaGVkdWxlZFJlZGlyZWN0aW9uKGRlbGF5LCB1cmwsIHRy
dWUsIGRlbGF5IDw9IDEsIGZhbHNlLCBmYWxzZSkpOworfQorCitib29sIFJlZGlyZWN0U2NoZWR1
bGVyOjptdXN0TG9ja0JhY2tGb3J3YXJkTGlzdChGcmFtZSogdGFyZ2V0RnJhbWUpCit7CisgICAg
Ly8gTmF2aWdhdGlvbiBvZiBhIHN1YmZyYW1lIGR1cmluZyBsb2FkaW5nIG9mIGFuIGFuY2VzdG9y
IGZyYW1lIGRvZXMgbm90IGNyZWF0ZSBhIG5ldyBiYWNrL2ZvcndhcmQgaXRlbS4KKyAgICAvLyBU
aGUgZGVmaW5pdGlvbiBvZiAiZHVyaW5nIGxvYWQiIGlzIGFueSB0aW1lIGJlZm9yZSBhbGwgaGFu
ZGxlcnMgZm9yIHRoZSBsb2FkIGV2ZW50IGhhdmUgYmVlbiBydW4uCisgICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk1NyBmb3IgdGhlIG9yaWdpbmFs
IG1vdGl2YXRpb24gZm9yIHRoaXMuCisgICAgCisgICAgZm9yIChGcmFtZSogYW5jZXN0b3IgPSB0
YXJnZXRGcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0
b3ItPnRyZWUoKS0+cGFyZW50KCkpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gYW5j
ZXN0b3ItPmRvY3VtZW50KCk7CisgICAgICAgIGlmICghYW5jZXN0b3ItPmxvYWRlcigpLT5pc0Nv
bXBsZXRlKCkgfHwgZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnByb2Nlc3NpbmdMb2FkRXZlbnQoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgUmVkaXJlY3RTY2hlZHVsZXI6OnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wg
bG9ja0JhY2tGb3J3YXJkTGlzdCwgYm9vbCB3YXNVc2VyR2VzdHVyZSkKK3sKKyAgICBpZiAoIW1f
ZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHVybC5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGxvY2tCYWNrRm9yd2FyZExpc3QgPSBsb2NrQmFja0Zv
cndhcmRMaXN0IHx8IG11c3RMb2NrQmFja0ZvcndhcmRMaXN0KG1fZnJhbWUpOworCisgICAgRnJh
bWVMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpOworICAgIAorICAgIC8vIElmIHRo
ZSBVUkwgd2UncmUgZ29pbmcgdG8gbmF2aWdhdGUgdG8gaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJl
bnQgb25lLCBleGNlcHQgZm9yIHRoZQorICAgIC8vIGZyYWdtZW50IHBhcnQsIHdlIGRvbid0IG5l
ZWQgdG8gc2NoZWR1bGUgdGhlIGxvY2F0aW9uIGNoYW5nZS4KKyAgICBLVVJMIHBhcnNlZFVSTChQ
YXJzZWRVUkxTdHJpbmcsIHVybCk7CisgICAgaWYgKHBhcnNlZFVSTC5oYXNGcmFnbWVudElkZW50
aWZpZXIoKSAmJiBlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKGxvYWRlci0+dXJsKCks
IHBhcnNlZFVSTCkpIHsKKyAgICAgICAgbG9hZGVyLT5jaGFuZ2VMb2NhdGlvbihsb2FkZXItPmNv
bXBsZXRlVVJMKHVybCksIHJlZmVycmVyLCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlz
dCwgd2FzVXNlckdlc3R1cmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSGFu
ZGxlIGEgbG9jYXRpb24gY2hhbmdlIG9mIGEgcGFnZSB3aXRoIG5vIGRvY3VtZW50IGFzIGEgc3Bl
Y2lhbCBjYXNlLgorICAgIC8vIFRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgZnJhbWUgY2hhbmdlcyB0
aGUgbG9jYXRpb24gb2YgYW5vdGhlciBmcmFtZS4KKyAgICBib29sIGR1cmluZ0xvYWQgPSAhbG9h
ZGVyLT5jb21taXR0ZWRGaXJzdFJlYWxEb2N1bWVudExvYWQoKTsKKworICAgIHNjaGVkdWxlKG5l
dyBTY2hlZHVsZWRSZWRpcmVjdGlvbih1cmwsIHJlZmVycmVyLCBsb2NrSGlzdG9yeSwgbG9ja0Jh
Y2tGb3J3YXJkTGlzdCwgd2FzVXNlckdlc3R1cmUsIGZhbHNlLCBkdXJpbmdMb2FkKSk7Cit9CisK
K3ZvaWQgUmVkaXJlY3RTY2hlZHVsZXI6OnNjaGVkdWxlRm9ybVN1Ym1pc3Npb24oY29uc3QgRnJh
bWVMb2FkUmVxdWVzdCYgZnJhbWVSZXF1ZXN0LAorICAgIGJvb2wgbG9ja0hpc3RvcnksIFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlKQorewor
ICAgIEFTU0VSVChtX2ZyYW1lLT5wYWdlKCkpOworICAgIEFTU0VSVCghZnJhbWVSZXF1ZXN0Lmlz
RW1wdHkoKSk7CisKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBzcGVjaWFsIGhhbmRsaW5nIGZv
ciBmb3JtIHN1Ym1pc3Npb25zIHdoZXJlIHRoZSBVUkwgaXMgdGhlIHNhbWUKKyAgICAvLyBhcyB0
aGUgY3VycmVudCBvbmUgZXhjZXB0IGZvciB0aGUgZnJhZ21lbnQgcGFydD8gU2VlIHNjaGVkdWxl
TG9jYXRpb25DaGFuZ2UgYWJvdmUuCisKKyAgICAvLyBIYW5kbGUgYSBsb2NhdGlvbiBjaGFuZ2Ug
b2YgYSBwYWdlIHdpdGggbm8gZG9jdW1lbnQgYXMgYSBzcGVjaWFsIGNhc2UuCisgICAgLy8gVGhp
cyBtYXkgaGFwcGVuIHdoZW4gYSBmcmFtZSBjaGFuZ2VzIHRoZSBsb2NhdGlvbiBvZiBhbm90aGVy
IGZyYW1lLgorICAgIGJvb2wgZHVyaW5nTG9hZCA9ICFtX2ZyYW1lLT5sb2FkZXIoKS0+Y29tbWl0
dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkKCk7CisKKyAgICBzY2hlZHVsZShuZXcgU2NoZWR1bGVk
UmVkaXJlY3Rpb24oZnJhbWVSZXF1ZXN0LCBsb2NrSGlzdG9yeSwgbXVzdExvY2tCYWNrRm9yd2Fy
ZExpc3QobV9mcmFtZSksIGV2ZW50LCBmb3JtU3RhdGUsIGR1cmluZ0xvYWQpKTsKK30KKwordm9p
ZCBSZWRpcmVjdFNjaGVkdWxlcjo6c2NoZWR1bGVSZWZyZXNoKGJvb2wgd2FzVXNlckdlc3R1cmUp
Cit7CisgICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBjb25zdCBLVVJMJiB1cmwgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7CisKKyAgICBpZiAo
dXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2NoZWR1bGUobmV3IFNjaGVk
dWxlZFJlZGlyZWN0aW9uKHVybC5zdHJpbmcoKSwgbV9mcmFtZS0+bG9hZGVyKCktPm91dGdvaW5n
UmVmZXJyZXIoKSwgdHJ1ZSwgdHJ1ZSwgd2FzVXNlckdlc3R1cmUsIHRydWUsIGZhbHNlKSk7Cit9
CisKK2Jvb2wgUmVkaXJlY3RTY2hlZHVsZXI6OmxvY2F0aW9uQ2hhbmdlUGVuZGluZygpCit7Cisg
ICAgaWYgKCFtX3NjaGVkdWxlZFJlZGlyZWN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBzd2l0Y2ggKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPnR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6cmVkaXJlY3Rpb246CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246Omhpc3RvcnlOYXZpZ2F0
aW9uOgorICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZToK
KyAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6Zm9ybVN1Ym1pc3Npb246CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlZGlyZWN0U2NoZWR1bGVyOjpzY2hlZHVsZUhp
c3RvcnlOYXZpZ2F0aW9uKGludCBzdGVwcykKK3sKKyAgICBpZiAoIW1fZnJhbWUtPnBhZ2UoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgc2NoZWR1bGUobmV3IFNjaGVkdWxlZFJlZGlyZWN0aW9u
KHN0ZXBzKSk7Cit9CisKK3ZvaWQgUmVkaXJlY3RTY2hlZHVsZXI6OnRpbWVyRmlyZWQoVGltZXI8
UmVkaXJlY3RTY2hlZHVsZXI+KikKK3sKKyAgICBBU1NFUlQobV9mcmFtZS0+cGFnZSgpKTsKKwor
ICAgIGlmIChtX2ZyYW1lLT5wYWdlKCktPmRlZmVyc0xvYWRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgT3duUHRyPFNjaGVkdWxlZFJlZGlyZWN0aW9uPiByZWRpcmVjdGlvbihtX3NjaGVk
dWxlZFJlZGlyZWN0aW9uLnJlbGVhc2UoKSk7CisgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IG1f
ZnJhbWUtPmxvYWRlcigpOworCisgICAgc3dpdGNoIChyZWRpcmVjdGlvbi0+dHlwZSkgeworICAg
ICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKKyAgICAgICAgY2Fz
ZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6CisgICAgICAgICAgICBsb2Fk
ZXItPmNoYW5nZUxvY2F0aW9uKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCByZWRpcmVjdGlvbi0+dXJs
KSwgcmVkaXJlY3Rpb24tPnJlZmVycmVyLAorICAgICAgICAgICAgICAgIHJlZGlyZWN0aW9uLT5s
b2NrSGlzdG9yeSwgcmVkaXJlY3Rpb24tPmxvY2tCYWNrRm9yd2FyZExpc3QsIHJlZGlyZWN0aW9u
LT53YXNVc2VyR2VzdHVyZSwgcmVkaXJlY3Rpb24tPndhc1JlZnJlc2gpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpoaXN0b3J5TmF2aWdh
dGlvbjoKKyAgICAgICAgICAgIGlmIChyZWRpcmVjdGlvbi0+aGlzdG9yeVN0ZXBzID09IDApIHsK
KyAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGdvKDApIGZyb20gYSBmcmFtZSAt
PiByZWxvYWQgb25seSB0aGUgZnJhbWUKKyAgICAgICAgICAgICAgICBsb2FkZXItPnVybFNlbGVj
dGVkKGxvYWRlci0+dXJsKCksICIiLCAwLCByZWRpcmVjdGlvbi0+bG9ja0hpc3RvcnksIHJlZGly
ZWN0aW9uLT5sb2NrQmFja0ZvcndhcmRMaXN0LCByZWRpcmVjdGlvbi0+d2FzVXNlckdlc3R1cmUp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8v
IGdvKGkhPTApIGZyb20gYSBmcmFtZSBuYXZpZ2F0ZXMgaW50byB0aGUgaGlzdG9yeSBvZiB0aGUg
ZnJhbWUgb25seSwKKyAgICAgICAgICAgIC8vIGluIGJvdGggSUUgYW5kIE5TIChidXQgbm90IGlu
IE1vemlsbGEpLiBXZSBjYW4ndCBlYXNpbHkgZG8gdGhhdC4KKyAgICAgICAgICAgIGlmIChsb2Fk
ZXItPmNhbkdvQmFja09yRm9yd2FyZChyZWRpcmVjdGlvbi0+aGlzdG9yeVN0ZXBzKSkKKyAgICAg
ICAgICAgICAgICBsb2FkZXItPmdvQmFja09yRm9yd2FyZChyZWRpcmVjdGlvbi0+aGlzdG9yeVN0
ZXBzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVj
dGlvbjo6Zm9ybVN1Ym1pc3Npb246CisgICAgICAgICAgICAvLyBUaGUgc3VibWl0Rm9ybSBmdW5j
dGlvbiB3aWxsIGZpbmQgYSB0YXJnZXQgZnJhbWUgYmVmb3JlIHVzaW5nIHRoZSByZWRpcmVjdGlv
biB0aW1lci4KKyAgICAgICAgICAgIC8vIE5vdyB0aGF0IHRoZSB0aW1lciBoYXMgZmlyZWQsIHdl
IG5lZWQgdG8gcmVwZWF0IHRoZSBzZWN1cml0eSBjaGVjayB3aGljaCBub3JtYWxseSBpcyBkb25l
IHdoZW4KKyAgICAgICAgICAgIC8vIHNlbGVjdGluZyBhIHRhcmdldCwgaW4gY2FzZSBjb25kaXRp
b25zIGhhdmUgY2hhbmdlZC4gT3RoZXIgY29kZSBwYXRocyBhdm9pZCB0aGlzIGJ5IHRhcmdldGlu
ZworICAgICAgICAgICAgLy8gd2l0aG91dCBsZWF2aW5nIGEgdGltZSB3aW5kb3cuIElmIHdlIGZh
aWwgdGhlIGNoZWNrIGp1c3Qgc2lsZW50bHkgZHJvcCB0aGUgZm9ybSBzdWJtaXNzaW9uLgorICAg
ICAgICAgICAgaWYgKCFyZWRpcmVjdGlvbi0+Zm9ybVN0YXRlLT5zb3VyY2VGcmFtZSgpLT5sb2Fk
ZXIoKS0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKG1fZnJhbWUpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGxvYWRlci0+bG9hZEZyYW1lUmVxdWVzdChyZWRpcmVjdGlvbi0+
ZnJhbWVSZXF1ZXN0LCByZWRpcmVjdGlvbi0+bG9ja0hpc3RvcnksIHJlZGlyZWN0aW9uLT5sb2Nr
QmFja0ZvcndhcmRMaXN0LAorICAgICAgICAgICAgICAgIHJlZGlyZWN0aW9uLT5ldmVudCwgcmVk
aXJlY3Rpb24tPmZvcm1TdGF0ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUmVkaXJlY3RTY2hlZHVsZXI6OnNjaGVk
dWxlKFBhc3NPd25QdHI8U2NoZWR1bGVkUmVkaXJlY3Rpb24+IHJlZGlyZWN0aW9uKQoreworICAg
IEFTU0VSVChtX2ZyYW1lLT5wYWdlKCkpOworICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBtX2Zy
YW1lLT5sb2FkZXIoKTsKKworICAgIC8vIElmIGEgcmVkaXJlY3Qgd2FzIHNjaGVkdWxlZCBkdXJp
bmcgYSBsb2FkLCB0aGVuIHN0b3AgdGhlIGN1cnJlbnQgbG9hZC4KKyAgICAvLyBPdGhlcndpc2Ug
d2hlbiB0aGUgY3VycmVudCBsb2FkIHRyYW5zaXRpb25zIGZyb20gYSBwcm92aXNpb25hbCB0byBh
IAorICAgIC8vIGNvbW1pdHRlZCBzdGF0ZSwgcGVuZGluZyByZWRpcmVjdHMgbWF5IGJlIGNhbmNl
bGxlZC4gCisgICAgaWYgKHJlZGlyZWN0aW9uLT53YXNEdXJpbmdMb2FkKSB7CisgICAgICAgIGlm
IChEb2N1bWVudExvYWRlciogcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlciA9IGxvYWRlci0+cHJv
dmlzaW9uYWxEb2N1bWVudExvYWRlcigpKQorICAgICAgICAgICAgcHJvdmlzaW9uYWxEb2N1bWVu
dExvYWRlci0+c3RvcExvYWRpbmcoKTsKKyAgICAgICAgbG9hZGVyLT5zdG9wTG9hZGluZyhVbmxv
YWRFdmVudFBvbGljeVVubG9hZEFuZFBhZ2VIaWRlKTsgICAKKyAgICB9CisKKyAgICBjYW5jZWwo
KTsKKyAgICBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uID0gcmVkaXJlY3Rpb247CisgICAgaWYgKCFs
b2FkZXItPmlzQ29tcGxldGUoKSAmJiBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT50eXBlICE9IFNj
aGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbikKKyAgICAgICAgbG9hZGVyLT5jb21wbGV0
ZWQoKTsKKyAgICBzdGFydFRpbWVyKCk7Cit9CisKK3ZvaWQgUmVkaXJlY3RTY2hlZHVsZXI6OnN0
YXJ0VGltZXIoKQoreworICAgIGlmICghbV9zY2hlZHVsZWRSZWRpcmVjdGlvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKG1fZnJhbWUtPnBhZ2UoKSk7CisgICAgCisgICAgRnJhbWVM
b2FkZXIqIGxvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpOworCisgICAgaWYgKG1fdGltZXIuaXNB
Y3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2NoZWR1bGVkUmVkaXJlY3Rp
b24tPnR5cGUgPT0gU2NoZWR1bGVkUmVkaXJlY3Rpb246OnJlZGlyZWN0aW9uICYmICFsb2FkZXIt
PmFsbEFuY2VzdG9yc0FyZUNvbXBsZXRlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdGlt
ZXIuc3RhcnRPbmVTaG90KG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmRlbGF5KTsKKworICAgIHN3
aXRjaCAobV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dHlwZSkgeworICAgICAgICBjYXNlIFNjaGVk
dWxlZFJlZGlyZWN0aW9uOjpsb2NhdGlvbkNoYW5nZToKKyAgICAgICAgY2FzZSBTY2hlZHVsZWRS
ZWRpcmVjdGlvbjo6cmVkaXJlY3Rpb246CisgICAgICAgICAgICBpZiAobV9zY2hlZHVsZWRSZWRp
cmVjdGlvbi0+dG9sZENsaWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT50b2xkQ2xpZW50ID0gdHJ1ZTsKKyAgICAgICAgICAg
IGxvYWRlci0+Y2xpZW50UmVkaXJlY3RlZChLVVJMKFBhcnNlZFVSTFN0cmluZywgbV9zY2hlZHVs
ZWRSZWRpcmVjdGlvbi0+dXJsKSwKKyAgICAgICAgICAgICAgICBtX3NjaGVkdWxlZFJlZGlyZWN0
aW9uLT5kZWxheSwKKyAgICAgICAgICAgICAgICBjdXJyZW50VGltZSgpICsgbV90aW1lci5uZXh0
RmlyZUludGVydmFsKCksCisgICAgICAgICAgICAgICAgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+
bG9ja0JhY2tGb3J3YXJkTGlzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2Ug
U2NoZWR1bGVkUmVkaXJlY3Rpb246OmZvcm1TdWJtaXNzaW9uOgorICAgICAgICAgICAgLy8gRklY
TUU6IEl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gcmVwb3J0IGZvcm0gc3VibWlzc2lvbnMgYXMgY2xp
ZW50IHJlZGlyZWN0cyB0b28uCisgICAgICAgICAgICAvLyBCdXQgd2UgZGlkbid0IGRvIHRoYXQg
aW4gdGhlIHBhc3Qgd2hlbiBmb3JtIHN1Ym1pc3Npb24gdXNlZCBhIHNlcGFyYXRlIGRlbGF5Cisg
ICAgICAgICAgICAvLyBtZWNoYW5pc20sIHNvIGRvaW5nIGl0IHdpbGwgYmUgYSBiZWhhdmlvciBj
aGFuZ2UuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJl
Y3Rpb246Omhpc3RvcnlOYXZpZ2F0aW9uOgorICAgICAgICAgICAgLy8gRG9uJ3QgcmVwb3J0IGhp
c3RvcnkgbmF2aWdhdGlvbnMuCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFJlZGlyZWN0U2NoZWR1bGVyOjpjYW5jZWwoYm9v
bCBuZXdMb2FkSW5Qcm9ncmVzcykKK3sKKyAgICBtX3RpbWVyLnN0b3AoKTsKKworICAgIE93blB0
cjxTY2hlZHVsZWRSZWRpcmVjdGlvbj4gcmVkaXJlY3Rpb24obV9zY2hlZHVsZWRSZWRpcmVjdGlv
bi5yZWxlYXNlKCkpOworICAgIGlmIChyZWRpcmVjdGlvbiAmJiByZWRpcmVjdGlvbi0+dG9sZENs
aWVudCkKKyAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudFJlZGlyZWN0Q2FuY2VsbGVk
T3JGaW5pc2hlZChuZXdMb2FkSW5Qcm9ncmVzcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvUmVkaXJlY3RTY2hlZHVsZXIuaCBiL1dl
YkNvcmUvbG9hZGVyL1JlZGlyZWN0U2NoZWR1bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uN2ZjODk1NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvbG9hZGVyL1Jl
ZGlyZWN0U2NoZWR1bGVyLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBZGFtIEJhcnRoLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4g
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVkaXJlY3RT
Y2hlZHVsZXJfaAorI2RlZmluZSBSZWRpcmVjdFNjaGVkdWxlcl9oCisKKyNpbmNsdWRlICJFdmVu
dC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRm9ybVN0YXRlOworICAgIGNsYXNzIEZyYW1l
OworICAgIGNsYXNzIEZyYW1lTG9hZFJlcXVlc3Q7CisgICAgY2xhc3MgU3RyaW5nOworCisgICAg
c3RydWN0IFNjaGVkdWxlZFJlZGlyZWN0aW9uOworCisgICAgY2xhc3MgUmVkaXJlY3RTY2hlZHVs
ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgUmVkaXJlY3RT
Y2hlZHVsZXIoRnJhbWUqKTsKKyAgICAgICAgflJlZGlyZWN0U2NoZWR1bGVyKCk7CisKKyAgICAg
ICAgYm9vbCByZWRpcmVjdFNjaGVkdWxlZER1cmluZ0xvYWQoKTsKKyAgICAgICAgYm9vbCBsb2Nh
dGlvbkNoYW5nZVBlbmRpbmcoKTsKKworICAgICAgICB2b2lkIHNjaGVkdWxlUmVkaXJlY3QoZG91
YmxlIGRlbGF5LCBjb25zdCBTdHJpbmcmIHVybCk7CisgICAgICAgIHZvaWQgc2NoZWR1bGVMb2Nh
dGlvbkNoYW5nZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9v
bCBsb2NrSGlzdG9yeSA9IHRydWUsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCA9IHRydWUsIGJv
b2wgdXNlckdlc3R1cmUgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgc2NoZWR1bGVGb3JtU3VibWlz
c2lvbihjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBsb2NrSGlzdG9yeSwgUGFzc1JlZlB0
cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7CisgICAgICAgIHZvaWQgc2NoZWR1bGVS
ZWZyZXNoKGJvb2wgdXNlckdlc3R1cmUgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgc2NoZWR1bGVI
aXN0b3J5TmF2aWdhdGlvbihpbnQgc3RlcHMpOworCisgICAgICAgIHZvaWQgc3RhcnRUaW1lcigp
OworCisgICAgICAgIHZvaWQgY2FuY2VsKGJvb2wgbmV3TG9hZEluUHJvZ3Jlc3MgPSBmYWxzZSk7
CisgICAgICAgIHZvaWQgY2xlYXIoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgdGlt
ZXJGaXJlZChUaW1lcjxSZWRpcmVjdFNjaGVkdWxlcj4qKTsKKyAgICAgICAgdm9pZCBzY2hlZHVs
ZShQYXNzT3duUHRyPFNjaGVkdWxlZFJlZGlyZWN0aW9uPiByZWRpcmVjdGlvbik7CisKKyAgICAg
ICAgc3RhdGljIGJvb2wgbXVzdExvY2tCYWNrRm9yd2FyZExpc3QoRnJhbWUqIHRhcmdldEZyYW1l
KTsKKworICAgICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICAgICAgVGltZXI8UmVkaXJlY3RTY2hl
ZHVsZXI+IG1fdGltZXI7CisgICAgICAgIE93blB0cjxTY2hlZHVsZWRSZWRpcmVjdGlvbj4gbV9z
Y2hlZHVsZWRSZWRpcmVjdGlvbjsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBGcmFtZUxvYWRlcl9o
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40425</attachid>
            <date>2009-09-30 22:52:57 -0700</date>
            <delta_ts>2009-10-01 10:47:55 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-29952-20090930225255.patch</filename>
            <type>text/plain</type>
            <size>41629</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWZhODk0MS4uZTcwZDBiYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw0NSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIE1vdmUgUmVkaXJlY3RTY2hlZHVsZXIgdG8gaXRzIG93
biBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
OTk1MgorCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb2RlIG1vdGlvbi4KKworICAg
ICAgICBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAg
ICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRl
ci5oOgorICAgICAgICAqIGxvYWRlci9SZWRpcmVjdFNjaGVkdWxlci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkUmVkaXJlY3Rpb246Oik6CisgICAgICAgIChXZWJDb3Jl
OjpTY2hlZHVsZWRSZWRpcmVjdGlvbjo6U2NoZWR1bGVkUmVkaXJlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVkaXJlY3RTY2hlZHVsZXI6OlJlZGlyZWN0U2NoZWR1bGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlZGlyZWN0U2NoZWR1bGVyOjp+UmVkaXJlY3RTY2hlZHVsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVkaXJlY3RTY2hlZHVsZXI6OnJlZGlyZWN0U2NoZWR1bGVkRHVyaW5nTG9h
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZWRpcmVjdFNjaGVkdWxlcjo6Y2xlYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVkaXJlY3RTY2hlZHVsZXI6OnNjaGVkdWxlUmVkaXJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVkaXJlY3RTY2hlZHVsZXI6Om11c3RMb2NrQmFja0ZvcndhcmRMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlZGlyZWN0U2NoZWR1bGVyOjpzY2hlZHVsZUxvY2F0aW9uQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZGlyZWN0U2NoZWR1bGVyOjpzY2hlZHVsZUZvcm1T
dWJtaXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZGlyZWN0U2NoZWR1bGVyOjpzY2hlZHVs
ZVJlZnJlc2gpOgorICAgICAgICAoV2ViQ29yZTo6UmVkaXJlY3RTY2hlZHVsZXI6OmxvY2F0aW9u
Q2hhbmdlUGVuZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZWRpcmVjdFNjaGVkdWxlcjo6c2No
ZWR1bGVIaXN0b3J5TmF2aWdhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWRpcmVjdFNjaGVk
dWxlcjo6dGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZWRpcmVjdFNjaGVkdWxlcjo6
c2NoZWR1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVkaXJlY3RTY2hlZHVsZXI6OnN0YXJ0VGlt
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVkaXJlY3RTY2hlZHVsZXI6OmNhbmNlbCk6CisgICAg
ICAgICogbG9hZGVyL1JlZGlyZWN0U2NoZWR1bGVyLmg6IEFkZGVkLgorCisyMDA5LTA5LTMwICBB
ZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKICAgICAgICAgUmVtb3ZlIEZyYW1lTG9hZGVyOjpzY2hlZHVsZSogQVBJ
cwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk5NTAK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KaW5kZXggOTM5MjhhZS4uZWQxNTE1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMjQ0LDYgKzEyNDQsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50Lmgg
XAogCVdlYkNvcmUvbG9hZGVyL1Byb2dyZXNzVHJhY2tlci5jcHAgXAogCVdlYkNvcmUvbG9hZGVy
L1Byb2dyZXNzVHJhY2tlci5oIFwKKwlXZWJDb3JlL2xvYWRlci9SZWRpcmVjdFNjaGVkdWxlci5j
cHAgXAorCVdlYkNvcmUvbG9hZGVyL1JlZGlyZWN0U2NoZWR1bGVyLmggXAogCVdlYkNvcmUvbG9h
ZGVyL1JlcXVlc3QuY3BwIFwKIAlXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmggXAogCVdlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDFmOTNmMDEuLmY1MjFjNDkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0xNjI5LDYgKzE2MjksOCBAQAogICAgICAgICAgICAgJ2xvYWRlci9QbHVnaW5Eb2N1bWVudC5o
JywKICAgICAgICAgICAgICdsb2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmNwcCcsCiAgICAgICAgICAg
ICAnbG9hZGVyL1Byb2dyZXNzVHJhY2tlci5oJywKKyAgICAgICAgICAgICdsb2FkZXIvUmVkaXJl
Y3RTY2hlZHVsZXIuY3BwJywKKyAgICAgICAgICAgICdsb2FkZXIvUmVkaXJlY3RTY2hlZHVsZXIu
aCcsCiAgICAgICAgICAgICAnbG9hZGVyL1JlcXVlc3QuY3BwJywKICAgICAgICAgICAgICdsb2Fk
ZXIvUmVxdWVzdC5oJywKICAgICAgICAgICAgICdsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwJywK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmlu
ZGV4IGJjMjI3NzYuLjZiYWM3ZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMTEwNyw2ICsxMTA3LDcgQEAgU09VUkNFUyArPSBc
CiAgICAgbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuY3BwIFwKICAgICBsb2FkZXIvUGx1Z2lu
RG9jdW1lbnQuY3BwIFwKICAgICBsb2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmNwcCBcCisgICAgbG9h
ZGVyL1JlZGlyZWN0U2NoZWR1bGVyLmNwcCBcCiAgICAgbG9hZGVyL1JlcXVlc3QuY3BwIFwKICAg
ICBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwIFwKICAgICBsb2FkZXIvU3VicmVzb3VyY2VMb2Fk
ZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDRiZjY2ODku
LjBiODBlYjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMTc0NDks
NiArMTc0NDksMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cbG9hZGVyXFJlZGlyZWN0U2NoZWR1bGVyLmNwcCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxSZWRpcmVjdFNj
aGVkdWxlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5cbG9hZGVyXFJlcXVlc3QuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDc0NmNlYy4uNTA5ZDVk
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIzNDMs
NiArMjM0Myw4IEBACiAJCTkzRjlCN0EwMEJBNjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y5
Qjc5RTBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNlY3Rpb24uY3BwICovOyB9OwogCQk5M0Y5
QjdBMTBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNlY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjlCNzlGMEJBNjAzMjYwMDg1NDA2NCAv
KiBKU0NEQVRBU2VjdGlvbi5oICovOyB9OwogCQk5M0ZEQUZDQTBCMTEzMDc0MDBFMjc0NkYgLyog
RWRpdG9ySW5zZXJ0QWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0ZEQUZDOTBCMTEzMDc0MDBFMjc0NkYgLyogRWRpdG9ySW5zZXJ0QWN0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTc5
RjQyQzcxMDc0NzE4NjAwMDBGODNCIC8qIFJlZGlyZWN0U2NoZWR1bGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3OUY0MkM1MTA3NDcxODYwMDAw
RjgzQiAvKiBSZWRpcmVjdFNjaGVkdWxlci5jcHAgKi87IH07CisJCTk3OUY0MkM4MTA3NDcxODYw
MDAwRjgzQiAvKiBSZWRpcmVjdFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTc5RjQyQzYxMDc0NzE4NjAwMDBGODNCIC8qIFJlZGlyZWN0
U2NoZWR1bGVyLmggKi87IH07CiAJCTk3REQ0RDg2MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRp
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
REQ0RDg0MEZERjRENkQwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCAqLzsgfTsKIAkJOTdERDRE
ODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3REQ0RDg1MEZERjRENkUwMEVDRjlBNCAvKiBYU1NB
dWRpdG9yLmggKi87IH07CiAJCUExN0M4MTIyMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVu
dEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTE3QzgxMjAwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgKi87
IH07CkBAIC03NTIwLDYgKzc1MjIsOCBAQAogCQk5M0Y5Qjc5RTBCQTYwMzI2MDA4NTQwNjQgLyog
SlNDREFUQVNlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDREFUQVNlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y5Qjc5
RjBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNDREFUQVNlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTNGREFGQzkwQjExMzA3NDAwRTI3NDZGIC8qIEVkaXRvckluc2VydEFjdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdG9ySW5zZXJ0QWN0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3OUY0MkM1MTA3NDcxODYwMDAwRjgzQiAvKiBS
ZWRpcmVjdFNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZWRpcmVjdFNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3
OUY0MkM2MTA3NDcxODYwMDAwRjgzQiAvKiBSZWRpcmVjdFNjaGVkdWxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZWRpcmVjdFNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5N0RENEQ4NDBGREY0RDZEMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYU1NBdWRpdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdERDREODUwRkRGNEQ2RTAwRUNGOUE0IC8q
IFhTU0F1ZGl0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFNTQXVkaXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTdDODEyMDBGMkE1Q0Y3MDA1REFB
RUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNDU1OCw2ICsxNDU2Miw4IEBACiAJCQkJMUFDNjk0QzYwQTNCMTY3NjAwM0Y1MDQ5
IC8qIFBsdWdpbkRvY3VtZW50LmggKi8sCiAJCQkJMUEyQTY4MjEwQjVCRURFNzAwMDJBNDgwIC8q
IFByb2dyZXNzVHJhY2tlci5jcHAgKi8sCiAJCQkJMUEyQTY4MjIwQjVCRURFNzAwMDJBNDgwIC8q
IFByb2dyZXNzVHJhY2tlci5oICovLAorCQkJCTk3OUY0MkM1MTA3NDcxODYwMDAwRjgzQiAvKiBS
ZWRpcmVjdFNjaGVkdWxlci5jcHAgKi8sCisJCQkJOTc5RjQyQzYxMDc0NzE4NjAwMDBGODNCIC8q
IFJlZGlyZWN0U2NoZWR1bGVyLmggKi8sCiAJCQkJQkNCMTZDMTUwOTc5QzNCRDAwNDY3NzQxIC8q
IFJlcXVlc3QuY3BwICovLAogCQkJCUJDQjE2QzE2MDk3OUMzQkQwMDQ2Nzc0MSAvKiBSZXF1ZXN0
LmggKi8sCiAJCQkJOTNFMjI3REUwQUY1ODlBRDAwRDQ4MzI0IC8qIFJlc291cmNlTG9hZGVyLmNw
cCAqLywKQEAgLTE3OTIxLDYgKzE3OTI3LDcgQEAKIAkJCQk3NjkzQkFENTEwNkMyRENBMDA3QjA4
MjMgLyogUGx1Z2luSGFsdGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0FDRjNCRDEw
NzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1REIxQkM2QTEwNzE1QTY0MDBFRkFBNDkgLyogVHJhbnNmb3JtU291cmNlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5NzlGNDJDODEwNzQ3MTg2MDAwMEY4M0IgLyogUmVkaXJlY3RTY2hlZHVs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjAwMzcsNiArMjAwNDQsNyBAQAogCQkJCTc2OTNCQUQz
MTA2QzJEQ0EwMDdCMDgyMyAvKiBQbHVnaW5IYWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNBQ0YzQkMxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1REIxQkM2QjEwNzE1QTY0MDBFRkFBNDkgLyogVHJhbnNmb3JtU291
cmNlTGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzlGNDJDNzEwNzQ3MTg2MDAwMEY4
M0IgLyogUmVkaXJlY3RTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbCBiL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCmlu
ZGV4IGY0NDc3NDUuLjAxM2I0ZDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMu
YmtsCisrKyBiL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCkBAIC03MjgsNiArNzI4LDcgQEAg
VGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJD
b3JlLgogICAgICAgICBsb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAKICAgICAgICAgbG9h
ZGVyL1BsdWdpbkRvY3VtZW50LmNwcAogICAgICAgICBsb2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmNw
cAorICAgICAgICBsb2FkZXIvUmVkaXJlY3RTY2hlZHVsZXIuY3BwCiAgICAgICAgIGxvYWRlci9S
ZXF1ZXN0LmNwcAogICAgICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCiAgICAgICAgIGxv
YWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA1YmZj
YzYxLi43YWRkYWNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
KysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0xMjMsMTEwICsxMjMsNiBA
QCB1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CiAjZW5kaWYKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKLXN0cnVjdCBTY2hlZHVsZWRSZWRpcmVjdGlvbiB7Ci0gICAgZW51bSBUeXBlIHsg
cmVkaXJlY3Rpb24sIGxvY2F0aW9uQ2hhbmdlLCBoaXN0b3J5TmF2aWdhdGlvbiwgZm9ybVN1Ym1p
c3Npb24gfTsKLQotICAgIGNvbnN0IFR5cGUgdHlwZTsKLSAgICBjb25zdCBkb3VibGUgZGVsYXk7
Ci0gICAgY29uc3QgU3RyaW5nIHVybDsKLSAgICBjb25zdCBTdHJpbmcgcmVmZXJyZXI7Ci0gICAg
Y29uc3QgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3Q7Ci0gICAgY29uc3QgUmVmUHRyPEV2
ZW50PiBldmVudDsKLSAgICBjb25zdCBSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGU7Ci0gICAg
Y29uc3QgaW50IGhpc3RvcnlTdGVwczsKLSAgICBjb25zdCBib29sIGxvY2tIaXN0b3J5OwotICAg
IGNvbnN0IGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdDsKLSAgICBjb25zdCBib29sIHdhc1VzZXJH
ZXN0dXJlOwotICAgIGNvbnN0IGJvb2wgd2FzUmVmcmVzaDsKLSAgICBjb25zdCBib29sIHdhc0R1
cmluZ0xvYWQ7Ci0gICAgYm9vbCB0b2xkQ2xpZW50OwotCi0gICAgU2NoZWR1bGVkUmVkaXJlY3Rp
b24oZG91YmxlIGRlbGF5LCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9v
bCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29sIHdhc1VzZXJHZXN0dXJlLCBib29sIHJlZnJlc2gp
Ci0gICAgICAgIDogdHlwZShyZWRpcmVjdGlvbikKLSAgICAgICAgLCBkZWxheShkZWxheSkKLSAg
ICAgICAgLCB1cmwodXJsKQotICAgICAgICAsIGhpc3RvcnlTdGVwcygwKQotICAgICAgICAsIGxv
Y2tIaXN0b3J5KGxvY2tIaXN0b3J5KQotICAgICAgICAsIGxvY2tCYWNrRm9yd2FyZExpc3QobG9j
a0JhY2tGb3J3YXJkTGlzdCkKLSAgICAgICAgLCB3YXNVc2VyR2VzdHVyZSh3YXNVc2VyR2VzdHVy
ZSkKLSAgICAgICAgLCB3YXNSZWZyZXNoKHJlZnJlc2gpCi0gICAgICAgICwgd2FzRHVyaW5nTG9h
ZChmYWxzZSkKLSAgICAgICAgLCB0b2xkQ2xpZW50KGZhbHNlKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKCF1cmwuaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBTY2hlZHVsZWRSZWRpcmVjdGlvbihj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBsb2NrSGlzdG9y
eSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29sIHdhc1VzZXJHZXN0dXJlLCBib29sIHJl
ZnJlc2gsIGJvb2wgZHVyaW5nTG9hZCkKLSAgICAgICAgOiB0eXBlKGxvY2F0aW9uQ2hhbmdlKQot
ICAgICAgICAsIGRlbGF5KDApCi0gICAgICAgICwgdXJsKHVybCkKLSAgICAgICAgLCByZWZlcnJl
cihyZWZlcnJlcikKLSAgICAgICAgLCBoaXN0b3J5U3RlcHMoMCkKLSAgICAgICAgLCBsb2NrSGlz
dG9yeShsb2NrSGlzdG9yeSkKLSAgICAgICAgLCBsb2NrQmFja0ZvcndhcmRMaXN0KGxvY2tCYWNr
Rm9yd2FyZExpc3QpCi0gICAgICAgICwgd2FzVXNlckdlc3R1cmUod2FzVXNlckdlc3R1cmUpCi0g
ICAgICAgICwgd2FzUmVmcmVzaChyZWZyZXNoKQotICAgICAgICAsIHdhc0R1cmluZ0xvYWQoZHVy
aW5nTG9hZCkKLSAgICAgICAgLCB0b2xkQ2xpZW50KGZhbHNlKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKCF1cmwuaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBTY2hlZHVsZWRSZWRp
cmVjdGlvbihpbnQgaGlzdG9yeU5hdmlnYXRpb25TdGVwcykKLSAgICAgICAgOiB0eXBlKGhpc3Rv
cnlOYXZpZ2F0aW9uKQotICAgICAgICAsIGRlbGF5KDApCi0gICAgICAgICwgaGlzdG9yeVN0ZXBz
KGhpc3RvcnlOYXZpZ2F0aW9uU3RlcHMpCi0gICAgICAgICwgbG9ja0hpc3RvcnkoZmFsc2UpCi0g
ICAgICAgICwgbG9ja0JhY2tGb3J3YXJkTGlzdChmYWxzZSkKLSAgICAgICAgLCB3YXNVc2VyR2Vz
dHVyZShmYWxzZSkKLSAgICAgICAgLCB3YXNSZWZyZXNoKGZhbHNlKQotICAgICAgICAsIHdhc0R1
cmluZ0xvYWQoZmFsc2UpCi0gICAgICAgICwgdG9sZENsaWVudChmYWxzZSkKLSAgICB7Ci0gICAg
fQotCi0gICAgU2NoZWR1bGVkUmVkaXJlY3Rpb24oY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJh
bWVSZXF1ZXN0LAotICAgICAgICAgICAgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0Zv
cndhcmRMaXN0LCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+
IGZvcm1TdGF0ZSwKLSAgICAgICAgICAgIGJvb2wgZHVyaW5nTG9hZCkKLSAgICAgICAgOiB0eXBl
KGZvcm1TdWJtaXNzaW9uKQotICAgICAgICAsIGRlbGF5KDApCi0gICAgICAgICwgZnJhbWVSZXF1
ZXN0KGZyYW1lUmVxdWVzdCkKLSAgICAgICAgLCBldmVudChldmVudCkKLSAgICAgICAgLCBmb3Jt
U3RhdGUoZm9ybVN0YXRlKQotICAgICAgICAsIGhpc3RvcnlTdGVwcygwKQotICAgICAgICAsIGxv
Y2tIaXN0b3J5KGxvY2tIaXN0b3J5KQotICAgICAgICAsIGxvY2tCYWNrRm9yd2FyZExpc3QobG9j
a0JhY2tGb3J3YXJkTGlzdCkKLSAgICAgICAgLCB3YXNVc2VyR2VzdHVyZShmYWxzZSkKLSAgICAg
ICAgLCB3YXNSZWZyZXNoKGZhbHNlKQotICAgICAgICAsIHdhc0R1cmluZ0xvYWQoZHVyaW5nTG9h
ZCkKLSAgICAgICAgLCB0b2xkQ2xpZW50KGZhbHNlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFm
cmFtZVJlcXVlc3QuaXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUKHRoaXMtPmZvcm1TdGF0ZSk7
Ci0gICAgfQotfTsKLQotUmVkaXJlY3RTY2hlZHVsZXI6OlJlZGlyZWN0U2NoZWR1bGVyKEZyYW1l
KiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX3RpbWVyKHRoaXMsICZSZWRp
cmVjdFNjaGVkdWxlcjo6dGltZXJGaXJlZCkKLXsKLX0KLQotUmVkaXJlY3RTY2hlZHVsZXI6On5S
ZWRpcmVjdFNjaGVkdWxlcigpCi17Ci19Ci0KLWJvb2wgUmVkaXJlY3RTY2hlZHVsZXI6OnJlZGly
ZWN0U2NoZWR1bGVkRHVyaW5nTG9hZCgpCi17Ci0gICAgcmV0dXJuIG1fc2NoZWR1bGVkUmVkaXJl
Y3Rpb24gJiYgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+d2FzRHVyaW5nTG9hZDsKLX0KLQotdm9p
ZCBSZWRpcmVjdFNjaGVkdWxlcjo6Y2xlYXIoKQotewotICAgIG1fdGltZXIuc3RvcCgpOwotICAg
IG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24uY2xlYXIoKTsKLX0KLQogI2lmIEVOQUJMRShYSFRNTE1Q
KQogc3RhdGljIGNvbnN0IGNoYXIgZGVmYXVsdEFjY2VwdEhlYWRlcltdID0gImFwcGxpY2F0aW9u
L3htbCxhcHBsaWNhdGlvbi92bmQud2FwLnhodG1sK3htbCxhcHBsaWNhdGlvbi94aHRtbCt4bWw7
cHJvZmlsZT0naHR0cDovL3d3dy53YXBmb3J1bS5vcmcveGh0bWwnLHRleHQvaHRtbDtxPTAuOSx0
ZXh0L3BsYWluO3E9MC44LGltYWdlL3BuZywqLyo7cT0wLjUiOwogI2Vsc2UKQEAgLTEzNzQsMTE3
ICsxMjcwLDYgQEAgS1VSTCBGcmFtZUxvYWRlcjo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1
cmwpCiAgICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCk7CiB9
CiAKLXZvaWQgUmVkaXJlY3RTY2hlZHVsZXI6OnNjaGVkdWxlUmVkaXJlY3QoZG91YmxlIGRlbGF5
LCBjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBpZiAoZGVsYXkgPCAwIHx8IGRlbGF5ID4gSU5U
X01BWCAvIDEwMDApCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgaWYgKCFtX2ZyYW1l
LT5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3RvcnkgaXRlbSBpZiB0aGUg
cmVmcmVzaCB0aW1lb3V0IGlzID4gMSBzZWNvbmQuCi0gICAgaWYgKCFtX3NjaGVkdWxlZFJlZGly
ZWN0aW9uIHx8IGRlbGF5IDw9IG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmRlbGF5KQotICAgICAg
ICBzY2hlZHVsZShuZXcgU2NoZWR1bGVkUmVkaXJlY3Rpb24oZGVsYXksIHVybCwgdHJ1ZSwgZGVs
YXkgPD0gMSwgZmFsc2UsIGZhbHNlKSk7Ci19Ci0KLWJvb2wgUmVkaXJlY3RTY2hlZHVsZXI6Om11
c3RMb2NrQmFja0ZvcndhcmRMaXN0KEZyYW1lKiB0YXJnZXRGcmFtZSkKLXsKLSAgICAvLyBOYXZp
Z2F0aW9uIG9mIGEgc3ViZnJhbWUgZHVyaW5nIGxvYWRpbmcgb2YgYW4gYW5jZXN0b3IgZnJhbWUg
ZG9lcyBub3QgY3JlYXRlIGEgbmV3IGJhY2svZm9yd2FyZCBpdGVtLgotICAgIC8vIFRoZSBkZWZp
bml0aW9uIG9mICJkdXJpbmcgbG9hZCIgaXMgYW55IHRpbWUgYmVmb3JlIGFsbCBoYW5kbGVycyBm
b3IgdGhlIGxvYWQgZXZlbnQgaGF2ZSBiZWVuIHJ1bi4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTU3IGZvciB0aGUgb3JpZ2luYWwgbW90aXZh
dGlvbiBmb3IgdGhpcy4KLSAgICAKLSAgICBmb3IgKEZyYW1lKiBhbmNlc3RvciA9IHRhcmdldEZy
YW1lLT50cmVlKCktPnBhcmVudCgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+dHJl
ZSgpLT5wYXJlbnQoKSkgewotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBhbmNlc3Rvci0+
ZG9jdW1lbnQoKTsKLSAgICAgICAgaWYgKCFhbmNlc3Rvci0+bG9hZGVyKCktPmlzQ29tcGxldGUo
KSB8fCBkb2N1bWVudCAmJiBkb2N1bWVudC0+cHJvY2Vzc2luZ0xvYWRFdmVudCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBS
ZWRpcmVjdFNjaGVkdWxlcjo6c2NoZWR1bGVMb2NhdGlvbkNoYW5nZShjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFj
a0ZvcndhcmRMaXN0LCBib29sIHdhc1VzZXJHZXN0dXJlKQotewotICAgIGlmICghbV9mcmFtZS0+
cGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbG9ja0JhY2tGb3J3YXJkTGlzdCA9IGxvY2tCYWNrRm9yd2FyZExp
c3QgfHwgbXVzdExvY2tCYWNrRm9yd2FyZExpc3QobV9mcmFtZSk7Ci0KLSAgICBGcmFtZUxvYWRl
ciogbG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7Ci0gICAgCi0gICAgLy8gSWYgdGhlIFVSTCB3
ZSdyZSBnb2luZyB0byBuYXZpZ2F0ZSB0byBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBvbmUs
IGV4Y2VwdCBmb3IgdGhlCi0gICAgLy8gZnJhZ21lbnQgcGFydCwgd2UgZG9uJ3QgbmVlZCB0byBz
Y2hlZHVsZSB0aGUgbG9jYXRpb24gY2hhbmdlLgotICAgIEtVUkwgcGFyc2VkVVJMKFBhcnNlZFVS
TFN0cmluZywgdXJsKTsKLSAgICBpZiAocGFyc2VkVVJMLmhhc0ZyYWdtZW50SWRlbnRpZmllcigp
ICYmIGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIobG9hZGVyLT51cmwoKSwgcGFyc2Vk
VVJMKSkgewotICAgICAgICBsb2FkZXItPmNoYW5nZUxvY2F0aW9uKGxvYWRlci0+Y29tcGxldGVV
UkwodXJsKSwgcmVmZXJyZXIsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCB3YXNV
c2VyR2VzdHVyZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgYSBs
b2NhdGlvbiBjaGFuZ2Ugb2YgYSBwYWdlIHdpdGggbm8gZG9jdW1lbnQgYXMgYSBzcGVjaWFsIGNh
c2UuCi0gICAgLy8gVGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBmcmFtZSBjaGFuZ2VzIHRoZSBsb2Nh
dGlvbiBvZiBhbm90aGVyIGZyYW1lLgotICAgIGJvb2wgZHVyaW5nTG9hZCA9ICFsb2FkZXItPmNv
bW1pdHRlZEZpcnN0UmVhbERvY3VtZW50TG9hZCgpOwotCi0gICAgc2NoZWR1bGUobmV3IFNjaGVk
dWxlZFJlZGlyZWN0aW9uKHVybCwgcmVmZXJyZXIsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0Zvcndh
cmRMaXN0LCB3YXNVc2VyR2VzdHVyZSwgZmFsc2UsIGR1cmluZ0xvYWQpKTsKLX0KLQotdm9pZCBS
ZWRpcmVjdFNjaGVkdWxlcjo6c2NoZWR1bGVGb3JtU3VibWlzc2lvbihjb25zdCBGcmFtZUxvYWRS
ZXF1ZXN0JiBmcmFtZVJlcXVlc3QsCi0gICAgYm9vbCBsb2NrSGlzdG9yeSwgUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUpCi17Ci0gICAgQVNT
RVJUKG1fZnJhbWUtPnBhZ2UoKSk7Ci0gICAgQVNTRVJUKCFmcmFtZVJlcXVlc3QuaXNFbXB0eSgp
KTsKLQotICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGZvcm0g
c3VibWlzc2lvbnMgd2hlcmUgdGhlIFVSTCBpcyB0aGUgc2FtZQotICAgIC8vIGFzIHRoZSBjdXJy
ZW50IG9uZSBleGNlcHQgZm9yIHRoZSBmcmFnbWVudCBwYXJ0PyBTZWUgc2NoZWR1bGVMb2NhdGlv
bkNoYW5nZSBhYm92ZS4KLQotICAgIC8vIEhhbmRsZSBhIGxvY2F0aW9uIGNoYW5nZSBvZiBhIHBh
Z2Ugd2l0aCBubyBkb2N1bWVudCBhcyBhIHNwZWNpYWwgY2FzZS4KLSAgICAvLyBUaGlzIG1heSBo
YXBwZW4gd2hlbiBhIGZyYW1lIGNoYW5nZXMgdGhlIGxvY2F0aW9uIG9mIGFub3RoZXIgZnJhbWUu
Ci0gICAgYm9vbCBkdXJpbmdMb2FkID0gIW1fZnJhbWUtPmxvYWRlcigpLT5jb21taXR0ZWRGaXJz
dFJlYWxEb2N1bWVudExvYWQoKTsKLQotICAgIHNjaGVkdWxlKG5ldyBTY2hlZHVsZWRSZWRpcmVj
dGlvbihmcmFtZVJlcXVlc3QsIGxvY2tIaXN0b3J5LCBtdXN0TG9ja0JhY2tGb3J3YXJkTGlzdCht
X2ZyYW1lKSwgZXZlbnQsIGZvcm1TdGF0ZSwgZHVyaW5nTG9hZCkpOwotfQotCi12b2lkIFJlZGly
ZWN0U2NoZWR1bGVyOjpzY2hlZHVsZVJlZnJlc2goYm9vbCB3YXNVc2VyR2VzdHVyZSkKLXsKLSAg
ICBpZiAoIW1fZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGNvbnN0
IEtVUkwmIHVybCA9IG1fZnJhbWUtPmxvYWRlcigpLT51cmwoKTsKLQotICAgIGlmICh1cmwuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzY2hlZHVsZShuZXcgU2NoZWR1bGVkUmVk
aXJlY3Rpb24odXJsLnN0cmluZygpLCBtX2ZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJl
cigpLCB0cnVlLCB0cnVlLCB3YXNVc2VyR2VzdHVyZSwgdHJ1ZSwgZmFsc2UpKTsKLX0KLQotYm9v
bCBSZWRpcmVjdFNjaGVkdWxlcjo6bG9jYXRpb25DaGFuZ2VQZW5kaW5nKCkKLXsKLSAgICBpZiAo
IW1fc2NoZWR1bGVkUmVkaXJlY3Rpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3
aXRjaCAobV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dHlwZSkgewotICAgICAgICBjYXNlIFNjaGVk
dWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6aGlzdG9yeU5hdmlnYXRpb246Ci0g
ICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlOgotICAgICAg
ICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpmb3JtU3VibWlzc2lvbjoKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVkaXJlY3RTY2hlZHVsZXI6OnNjaGVkdWxlSGlzdG9yeU5h
dmlnYXRpb24oaW50IHN0ZXBzKQotewotICAgIGlmICghbV9mcmFtZS0+cGFnZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBzY2hlZHVsZShuZXcgU2NoZWR1bGVkUmVkaXJlY3Rpb24oc3RlcHMp
KTsKLX0KLQogdm9pZCBGcmFtZUxvYWRlcjo6Z29CYWNrT3JGb3J3YXJkKGludCBkaXN0YW5jZSkK
IHsKICAgICBpZiAoZGlzdGFuY2UgPT0gMCkKQEAgLTE1MTUsNDggKzEzMDAsNiBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpnb0JhY2tPckZvcndhcmQoaW50IGRpc3RhbmNlKQogICAgICAgICBwYWdlLT5n
b1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlSW5kZXhlZEJhY2tGb3J3YXJkKTsKIH0KIAotdm9p
ZCBSZWRpcmVjdFNjaGVkdWxlcjo6dGltZXJGaXJlZChUaW1lcjxSZWRpcmVjdFNjaGVkdWxlcj4q
KQotewotICAgIEFTU0VSVChtX2ZyYW1lLT5wYWdlKCkpOwotCi0gICAgaWYgKG1fZnJhbWUtPnBh
Z2UoKS0+ZGVmZXJzTG9hZGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBPd25QdHI8U2No
ZWR1bGVkUmVkaXJlY3Rpb24+IHJlZGlyZWN0aW9uKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24ucmVs
ZWFzZSgpKTsKLSAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7Ci0K
LSAgICBzd2l0Y2ggKHJlZGlyZWN0aW9uLT50eXBlKSB7Ci0gICAgICAgIGNhc2UgU2NoZWR1bGVk
UmVkaXJlY3Rpb246OnJlZGlyZWN0aW9uOgotICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0
aW9uOjpsb2NhdGlvbkNoYW5nZToKLSAgICAgICAgICAgIGxvYWRlci0+Y2hhbmdlTG9jYXRpb24o
S1VSTChQYXJzZWRVUkxTdHJpbmcsIHJlZGlyZWN0aW9uLT51cmwpLCByZWRpcmVjdGlvbi0+cmVm
ZXJyZXIsCi0gICAgICAgICAgICAgICAgcmVkaXJlY3Rpb24tPmxvY2tIaXN0b3J5LCByZWRpcmVj
dGlvbi0+bG9ja0JhY2tGb3J3YXJkTGlzdCwgcmVkaXJlY3Rpb24tPndhc1VzZXJHZXN0dXJlLCBy
ZWRpcmVjdGlvbi0+d2FzUmVmcmVzaCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNh
c2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246Omhpc3RvcnlOYXZpZ2F0aW9uOgotICAgICAgICAgICAg
aWYgKHJlZGlyZWN0aW9uLT5oaXN0b3J5U3RlcHMgPT0gMCkgewotICAgICAgICAgICAgICAgIC8v
IFNwZWNpYWwgY2FzZSBmb3IgZ28oMCkgZnJvbSBhIGZyYW1lIC0+IHJlbG9hZCBvbmx5IHRoZSBm
cmFtZQotICAgICAgICAgICAgICAgIGxvYWRlci0+dXJsU2VsZWN0ZWQobG9hZGVyLT51cmwoKSwg
IiIsIDAsIHJlZGlyZWN0aW9uLT5sb2NrSGlzdG9yeSwgcmVkaXJlY3Rpb24tPmxvY2tCYWNrRm9y
d2FyZExpc3QsIHJlZGlyZWN0aW9uLT53YXNVc2VyR2VzdHVyZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gZ28oaSE9MCkgZnJvbSBhIGZy
YW1lIG5hdmlnYXRlcyBpbnRvIHRoZSBoaXN0b3J5IG9mIHRoZSBmcmFtZSBvbmx5LAotICAgICAg
ICAgICAgLy8gaW4gYm90aCBJRSBhbmQgTlMgKGJ1dCBub3QgaW4gTW96aWxsYSkuIFdlIGNhbid0
IGVhc2lseSBkbyB0aGF0LgotICAgICAgICAgICAgaWYgKGxvYWRlci0+Y2FuR29CYWNrT3JGb3J3
YXJkKHJlZGlyZWN0aW9uLT5oaXN0b3J5U3RlcHMpKQotICAgICAgICAgICAgICAgIGxvYWRlci0+
Z29CYWNrT3JGb3J3YXJkKHJlZGlyZWN0aW9uLT5oaXN0b3J5U3RlcHMpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpmb3JtU3VibWlzc2lv
bjoKLSAgICAgICAgICAgIC8vIFRoZSBzdWJtaXRGb3JtIGZ1bmN0aW9uIHdpbGwgZmluZCBhIHRh
cmdldCBmcmFtZSBiZWZvcmUgdXNpbmcgdGhlIHJlZGlyZWN0aW9uIHRpbWVyLgotICAgICAgICAg
ICAgLy8gTm93IHRoYXQgdGhlIHRpbWVyIGhhcyBmaXJlZCwgd2UgbmVlZCB0byByZXBlYXQgdGhl
IHNlY3VyaXR5IGNoZWNrIHdoaWNoIG5vcm1hbGx5IGlzIGRvbmUgd2hlbgotICAgICAgICAgICAg
Ly8gc2VsZWN0aW5nIGEgdGFyZ2V0LCBpbiBjYXNlIGNvbmRpdGlvbnMgaGF2ZSBjaGFuZ2VkLiBP
dGhlciBjb2RlIHBhdGhzIGF2b2lkIHRoaXMgYnkgdGFyZ2V0aW5nCi0gICAgICAgICAgICAvLyB3
aXRob3V0IGxlYXZpbmcgYSB0aW1lIHdpbmRvdy4gSWYgd2UgZmFpbCB0aGUgY2hlY2sganVzdCBz
aWxlbnRseSBkcm9wIHRoZSBmb3JtIHN1Ym1pc3Npb24uCi0gICAgICAgICAgICBpZiAoIXJlZGly
ZWN0aW9uLT5mb3JtU3RhdGUtPnNvdXJjZUZyYW1lKCktPmxvYWRlcigpLT5zaG91bGRBbGxvd05h
dmlnYXRpb24obV9mcmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
bG9hZGVyLT5sb2FkRnJhbWVSZXF1ZXN0KHJlZGlyZWN0aW9uLT5mcmFtZVJlcXVlc3QsIHJlZGly
ZWN0aW9uLT5sb2NrSGlzdG9yeSwgcmVkaXJlY3Rpb24tPmxvY2tCYWNrRm9yd2FyZExpc3QsCi0g
ICAgICAgICAgICAgICAgcmVkaXJlY3Rpb24tPmV2ZW50LCByZWRpcmVjdGlvbi0+Zm9ybVN0YXRl
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQogdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFVSTEludG9DaGlsZEZyYW1lKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcmVyLCBGcmFtZSogY2hpbGRGcmFtZSkKIHsKICAg
ICBBU1NFUlQoY2hpbGRGcmFtZSk7CkBAIC0yMTU4LDc2ICsxOTAxLDYgQEAgYm9vbCBGcmFtZUxv
YWRlcjo6aXNDb21wbGV0ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faXNDb21wbGV0ZTsKIH0KIAot
dm9pZCBSZWRpcmVjdFNjaGVkdWxlcjo6c2NoZWR1bGUoUGFzc093blB0cjxTY2hlZHVsZWRSZWRp
cmVjdGlvbj4gcmVkaXJlY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fZnJhbWUtPnBhZ2UoKSk7Ci0g
ICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpOwotCi0gICAgLy8gSWYg
YSByZWRpcmVjdCB3YXMgc2NoZWR1bGVkIGR1cmluZyBhIGxvYWQsIHRoZW4gc3RvcCB0aGUgY3Vy
cmVudCBsb2FkLgotICAgIC8vIE90aGVyd2lzZSB3aGVuIHRoZSBjdXJyZW50IGxvYWQgdHJhbnNp
dGlvbnMgZnJvbSBhIHByb3Zpc2lvbmFsIHRvIGEgCi0gICAgLy8gY29tbWl0dGVkIHN0YXRlLCBw
ZW5kaW5nIHJlZGlyZWN0cyBtYXkgYmUgY2FuY2VsbGVkLiAKLSAgICBpZiAocmVkaXJlY3Rpb24t
Pndhc0R1cmluZ0xvYWQpIHsKLSAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBwcm92aXNpb25h
bERvY3VtZW50TG9hZGVyID0gbG9hZGVyLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkpCi0g
ICAgICAgICAgICBwcm92aXNpb25hbERvY3VtZW50TG9hZGVyLT5zdG9wTG9hZGluZygpOwotICAg
ICAgICBsb2FkZXItPnN0b3BMb2FkaW5nKFVubG9hZEV2ZW50UG9saWN5VW5sb2FkQW5kUGFnZUhp
ZGUpOyAgIAotICAgIH0KLQotICAgIGNhbmNlbCgpOwotICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rp
b24gPSByZWRpcmVjdGlvbjsKLSAgICBpZiAoIWxvYWRlci0+aXNDb21wbGV0ZSgpICYmIG1fc2No
ZWR1bGVkUmVkaXJlY3Rpb24tPnR5cGUgIT0gU2NoZWR1bGVkUmVkaXJlY3Rpb246OnJlZGlyZWN0
aW9uKQotICAgICAgICBsb2FkZXItPmNvbXBsZXRlZCgpOwotICAgIHN0YXJ0VGltZXIoKTsKLX0K
LQotdm9pZCBSZWRpcmVjdFNjaGVkdWxlcjo6c3RhcnRUaW1lcigpCi17Ci0gICAgaWYgKCFtX3Nj
aGVkdWxlZFJlZGlyZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9mcmFt
ZS0+cGFnZSgpKTsKLSAgICAKLSAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gbV9mcmFtZS0+bG9h
ZGVyKCk7Ci0KLSAgICBpZiAobV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dHlwZSA9PSBTY2hlZHVsZWRSZWRpcmVj
dGlvbjo6cmVkaXJlY3Rpb24gJiYgIWxvYWRlci0+YWxsQW5jZXN0b3JzQXJlQ29tcGxldGUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV90aW1lci5zdGFydE9uZVNob3QobV9zY2hlZHVsZWRS
ZWRpcmVjdGlvbi0+ZGVsYXkpOwotCi0gICAgc3dpdGNoIChtX3NjaGVkdWxlZFJlZGlyZWN0aW9u
LT50eXBlKSB7Ci0gICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hh
bmdlOgotICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbjoKLSAg
ICAgICAgICAgIGlmIChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT50b2xkQ2xpZW50KQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPnRv
bGRDbGllbnQgPSB0cnVlOwotICAgICAgICAgICAgbG9hZGVyLT5jbGllbnRSZWRpcmVjdGVkKEtV
UkwoUGFyc2VkVVJMU3RyaW5nLCBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT51cmwpLAotICAgICAg
ICAgICAgICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmRlbGF5LAotICAgICAgICAgICAgICAg
IGN1cnJlbnRUaW1lKCkgKyBtX3RpbWVyLm5leHRGaXJlSW50ZXJ2YWwoKSwKLSAgICAgICAgICAg
ICAgICBtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT5sb2NrQmFja0ZvcndhcmRMaXN0KTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6Zm9ybVN1
Ym1pc3Npb246Ci0gICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgbWFrZSBzZW5zZSB0byBy
ZXBvcnQgZm9ybSBzdWJtaXNzaW9ucyBhcyBjbGllbnQgcmVkaXJlY3RzIHRvby4KLSAgICAgICAg
ICAgIC8vIEJ1dCB3ZSBkaWRuJ3QgZG8gdGhhdCBpbiB0aGUgcGFzdCB3aGVuIGZvcm0gc3VibWlz
c2lvbiB1c2VkIGEgc2VwYXJhdGUgZGVsYXkKLSAgICAgICAgICAgIC8vIG1lY2hhbmlzbSwgc28g
ZG9pbmcgaXQgd2lsbCBiZSBhIGJlaGF2aW9yIGNoYW5nZS4KLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6aGlzdG9yeU5hdmlnYXRpb246Ci0g
ICAgICAgICAgICAvLyBEb24ndCByZXBvcnQgaGlzdG9yeSBuYXZpZ2F0aW9ucy4KLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQg
UmVkaXJlY3RTY2hlZHVsZXI6OmNhbmNlbChib29sIG5ld0xvYWRJblByb2dyZXNzKQotewotICAg
IG1fdGltZXIuc3RvcCgpOwotCi0gICAgT3duUHRyPFNjaGVkdWxlZFJlZGlyZWN0aW9uPiByZWRp
cmVjdGlvbihtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLnJlbGVhc2UoKSk7Ci0gICAgaWYgKHJlZGly
ZWN0aW9uICYmIHJlZGlyZWN0aW9uLT50b2xkQ2xpZW50KQotICAgICAgICBtX2ZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50UmVkaXJlY3RDYW5jZWxsZWRPckZpbmlzaGVkKG5ld0xvYWRJblByb2dyZXNz
KTsKLX0KLQogdm9pZCBGcmFtZUxvYWRlcjo6Y29tcGxldGVkKCkKIHsKICAgICBSZWZQdHI8RnJh
bWU+IHByb3RlY3QobV9mcmFtZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5oIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAppbmRleCAyMjllZGZiLi42ZmI2
MzlmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCisrKyBiL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkNh
Y2hlUG9saWN5LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgorI2luY2x1ZGUgIlJl
ZGlyZWN0U2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC03Miw3ICs3Myw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBXaWRnZXQ7CiAKICAgICBzdHJ1Y3Qg
RnJhbWVMb2FkUmVxdWVzdDsKLSAgICBzdHJ1Y3QgU2NoZWR1bGVkUmVkaXJlY3Rpb247CiAgICAg
c3RydWN0IFdpbmRvd0ZlYXR1cmVzOwogCiAgICAgYm9vbCBpc0JhY2tGb3J3YXJkTG9hZFR5cGUo
RnJhbWVMb2FkVHlwZSk7CkBAIC0xMTIsMzYgKzExMiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdm9pZCogbV9hcmd1bWVudDsKICAgICB9OwogCi0gICAgY2xhc3MgUmVkaXJlY3RT
Y2hlZHVsZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUmVk
aXJlY3RTY2hlZHVsZXIoRnJhbWUqKTsKLSAgICAgICAgflJlZGlyZWN0U2NoZWR1bGVyKCk7Ci0K
LSAgICAgICAgYm9vbCByZWRpcmVjdFNjaGVkdWxlZER1cmluZ0xvYWQoKTsKLSAgICAgICAgYm9v
bCBsb2NhdGlvbkNoYW5nZVBlbmRpbmcoKTsKLQotICAgICAgICB2b2lkIHNjaGVkdWxlUmVkaXJl
Y3QoZG91YmxlIGRlbGF5LCBjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgICAgIHZvaWQgc2NoZWR1
bGVMb2NhdGlvbkNoYW5nZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJl
ciwgYm9vbCBsb2NrSGlzdG9yeSA9IHRydWUsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCA9IHRy
dWUsIGJvb2wgdXNlckdlc3R1cmUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgc2NoZWR1bGVGb3Jt
U3VibWlzc2lvbihjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBsb2NrSGlzdG9yeSwgUGFz
c1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7Ci0gICAgICAgIHZvaWQgc2No
ZWR1bGVSZWZyZXNoKGJvb2wgdXNlckdlc3R1cmUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgc2No
ZWR1bGVIaXN0b3J5TmF2aWdhdGlvbihpbnQgc3RlcHMpOwotCi0gICAgICAgIHZvaWQgc3RhcnRU
aW1lcigpOwotCi0gICAgICAgIHZvaWQgY2FuY2VsKGJvb2wgbmV3TG9hZEluUHJvZ3Jlc3MgPSBm
YWxzZSk7Ci0gICAgICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZv
aWQgdGltZXJGaXJlZChUaW1lcjxSZWRpcmVjdFNjaGVkdWxlcj4qKTsKLSAgICAgICAgdm9pZCBz
Y2hlZHVsZShQYXNzT3duUHRyPFNjaGVkdWxlZFJlZGlyZWN0aW9uPiByZWRpcmVjdGlvbik7Ci0K
LSAgICAgICAgc3RhdGljIGJvb2wgbXVzdExvY2tCYWNrRm9yd2FyZExpc3QoRnJhbWUqIHRhcmdl
dEZyYW1lKTsKLQotICAgICAgICBGcmFtZSogbV9mcmFtZTsKLSAgICAgICAgVGltZXI8UmVkaXJl
Y3RTY2hlZHVsZXI+IG1fdGltZXI7Ci0gICAgICAgIE93blB0cjxTY2hlZHVsZWRSZWRpcmVjdGlv
bj4gbV9zY2hlZHVsZWRSZWRpcmVjdGlvbjsKLSAgICB9OwotCiAgICAgY2xhc3MgRnJhbWVMb2Fk
ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRnJhbWVMb2Fk
ZXIoRnJhbWUqLCBGcmFtZUxvYWRlckNsaWVudCopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2Fk
ZXIvUmVkaXJlY3RTY2hlZHVsZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvUmVkaXJlY3RTY2hlZHVs
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NTM4ZjgKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2xvYWRlci9SZWRpcmVjdFNjaGVkdWxlci5jcHAKQEAgLTAs
MCArMSwzNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICho
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWRhbSBC
YXJ0aC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVkaXJlY3RTY2hlZHVsZXIuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisj
aW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJGb3JtU3RhdGUuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBTY2hlZHVsZWRSZWRpcmVj
dGlvbiB7CisgICAgZW51bSBUeXBlIHsgcmVkaXJlY3Rpb24sIGxvY2F0aW9uQ2hhbmdlLCBoaXN0
b3J5TmF2aWdhdGlvbiwgZm9ybVN1Ym1pc3Npb24gfTsKKworICAgIGNvbnN0IFR5cGUgdHlwZTsK
KyAgICBjb25zdCBkb3VibGUgZGVsYXk7CisgICAgY29uc3QgU3RyaW5nIHVybDsKKyAgICBjb25z
dCBTdHJpbmcgcmVmZXJyZXI7CisgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVl
c3Q7CisgICAgY29uc3QgUmVmUHRyPEV2ZW50PiBldmVudDsKKyAgICBjb25zdCBSZWZQdHI8Rm9y
bVN0YXRlPiBmb3JtU3RhdGU7CisgICAgY29uc3QgaW50IGhpc3RvcnlTdGVwczsKKyAgICBjb25z
dCBib29sIGxvY2tIaXN0b3J5OworICAgIGNvbnN0IGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdDsK
KyAgICBjb25zdCBib29sIHdhc1VzZXJHZXN0dXJlOworICAgIGNvbnN0IGJvb2wgd2FzUmVmcmVz
aDsKKyAgICBjb25zdCBib29sIHdhc0R1cmluZ0xvYWQ7CisgICAgYm9vbCB0b2xkQ2xpZW50Owor
CisgICAgU2NoZWR1bGVkUmVkaXJlY3Rpb24oZG91YmxlIGRlbGF5LCBjb25zdCBTdHJpbmcmIHVy
bCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29sIHdhc1Vz
ZXJHZXN0dXJlLCBib29sIHJlZnJlc2gpCisgICAgICAgIDogdHlwZShyZWRpcmVjdGlvbikKKyAg
ICAgICAgLCBkZWxheShkZWxheSkKKyAgICAgICAgLCB1cmwodXJsKQorICAgICAgICAsIGhpc3Rv
cnlTdGVwcygwKQorICAgICAgICAsIGxvY2tIaXN0b3J5KGxvY2tIaXN0b3J5KQorICAgICAgICAs
IGxvY2tCYWNrRm9yd2FyZExpc3QobG9ja0JhY2tGb3J3YXJkTGlzdCkKKyAgICAgICAgLCB3YXNV
c2VyR2VzdHVyZSh3YXNVc2VyR2VzdHVyZSkKKyAgICAgICAgLCB3YXNSZWZyZXNoKHJlZnJlc2gp
CisgICAgICAgICwgd2FzRHVyaW5nTG9hZChmYWxzZSkKKyAgICAgICAgLCB0b2xkQ2xpZW50KGZh
bHNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCF1cmwuaXNFbXB0eSgpKTsKKyAgICB9CisKKyAg
ICBTY2hlZHVsZWRSZWRpcmVjdGlvbihjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBy
ZWZlcnJlciwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBib29s
IHdhc1VzZXJHZXN0dXJlLCBib29sIHJlZnJlc2gsIGJvb2wgZHVyaW5nTG9hZCkKKyAgICAgICAg
OiB0eXBlKGxvY2F0aW9uQ2hhbmdlKQorICAgICAgICAsIGRlbGF5KDApCisgICAgICAgICwgdXJs
KHVybCkKKyAgICAgICAgLCByZWZlcnJlcihyZWZlcnJlcikKKyAgICAgICAgLCBoaXN0b3J5U3Rl
cHMoMCkKKyAgICAgICAgLCBsb2NrSGlzdG9yeShsb2NrSGlzdG9yeSkKKyAgICAgICAgLCBsb2Nr
QmFja0ZvcndhcmRMaXN0KGxvY2tCYWNrRm9yd2FyZExpc3QpCisgICAgICAgICwgd2FzVXNlckdl
c3R1cmUod2FzVXNlckdlc3R1cmUpCisgICAgICAgICwgd2FzUmVmcmVzaChyZWZyZXNoKQorICAg
ICAgICAsIHdhc0R1cmluZ0xvYWQoZHVyaW5nTG9hZCkKKyAgICAgICAgLCB0b2xkQ2xpZW50KGZh
bHNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCF1cmwuaXNFbXB0eSgpKTsKKyAgICB9CisKKyAg
ICBleHBsaWNpdCBTY2hlZHVsZWRSZWRpcmVjdGlvbihpbnQgaGlzdG9yeU5hdmlnYXRpb25TdGVw
cykKKyAgICAgICAgOiB0eXBlKGhpc3RvcnlOYXZpZ2F0aW9uKQorICAgICAgICAsIGRlbGF5KDAp
CisgICAgICAgICwgaGlzdG9yeVN0ZXBzKGhpc3RvcnlOYXZpZ2F0aW9uU3RlcHMpCisgICAgICAg
ICwgbG9ja0hpc3RvcnkoZmFsc2UpCisgICAgICAgICwgbG9ja0JhY2tGb3J3YXJkTGlzdChmYWxz
ZSkKKyAgICAgICAgLCB3YXNVc2VyR2VzdHVyZShmYWxzZSkKKyAgICAgICAgLCB3YXNSZWZyZXNo
KGZhbHNlKQorICAgICAgICAsIHdhc0R1cmluZ0xvYWQoZmFsc2UpCisgICAgICAgICwgdG9sZENs
aWVudChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgU2NoZWR1bGVkUmVkaXJlY3Rpb24oY29u
c3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVSZXF1ZXN0LAorICAgICAgICAgICAgYm9vbCBsb2Nr
SGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSwKKyAgICAgICAgICAgIGJvb2wgZHVy
aW5nTG9hZCkKKyAgICAgICAgOiB0eXBlKGZvcm1TdWJtaXNzaW9uKQorICAgICAgICAsIGRlbGF5
KDApCisgICAgICAgICwgZnJhbWVSZXF1ZXN0KGZyYW1lUmVxdWVzdCkKKyAgICAgICAgLCBldmVu
dChldmVudCkKKyAgICAgICAgLCBmb3JtU3RhdGUoZm9ybVN0YXRlKQorICAgICAgICAsIGhpc3Rv
cnlTdGVwcygwKQorICAgICAgICAsIGxvY2tIaXN0b3J5KGxvY2tIaXN0b3J5KQorICAgICAgICAs
IGxvY2tCYWNrRm9yd2FyZExpc3QobG9ja0JhY2tGb3J3YXJkTGlzdCkKKyAgICAgICAgLCB3YXNV
c2VyR2VzdHVyZShmYWxzZSkKKyAgICAgICAgLCB3YXNSZWZyZXNoKGZhbHNlKQorICAgICAgICAs
IHdhc0R1cmluZ0xvYWQoZHVyaW5nTG9hZCkKKyAgICAgICAgLCB0b2xkQ2xpZW50KGZhbHNlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFmcmFtZVJlcXVlc3QuaXNFbXB0eSgpKTsKKyAgICAgICAg
QVNTRVJUKHRoaXMtPmZvcm1TdGF0ZSk7CisgICAgfQorfTsKKworUmVkaXJlY3RTY2hlZHVsZXI6
OlJlZGlyZWN0U2NoZWR1bGVyKEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCisg
ICAgLCBtX3RpbWVyKHRoaXMsICZSZWRpcmVjdFNjaGVkdWxlcjo6dGltZXJGaXJlZCkKK3sKK30K
KworUmVkaXJlY3RTY2hlZHVsZXI6On5SZWRpcmVjdFNjaGVkdWxlcigpCit7Cit9CisKK2Jvb2wg
UmVkaXJlY3RTY2hlZHVsZXI6OnJlZGlyZWN0U2NoZWR1bGVkRHVyaW5nTG9hZCgpCit7CisgICAg
cmV0dXJuIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24gJiYgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+
d2FzRHVyaW5nTG9hZDsKK30KKwordm9pZCBSZWRpcmVjdFNjaGVkdWxlcjo6Y2xlYXIoKQorewor
ICAgIG1fdGltZXIuc3RvcCgpOworICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24uY2xlYXIoKTsK
K30KKwordm9pZCBSZWRpcmVjdFNjaGVkdWxlcjo6c2NoZWR1bGVSZWRpcmVjdChkb3VibGUgZGVs
YXksIGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIGlmIChkZWxheSA8IDAgfHwgZGVsYXkgPiBJ
TlRfTUFYIC8gMTAwMCkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBpZiAoIW1fZnJh
bWUtPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRo
ZSByZWZyZXNoIHRpbWVvdXQgaXMgPiAxIHNlY29uZC4KKyAgICBpZiAoIW1fc2NoZWR1bGVkUmVk
aXJlY3Rpb24gfHwgZGVsYXkgPD0gbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+ZGVsYXkpCisgICAg
ICAgIHNjaGVkdWxlKG5ldyBTY2hlZHVsZWRSZWRpcmVjdGlvbihkZWxheSwgdXJsLCB0cnVlLCBk
ZWxheSA8PSAxLCBmYWxzZSwgZmFsc2UpKTsKK30KKworYm9vbCBSZWRpcmVjdFNjaGVkdWxlcjo6
bXVzdExvY2tCYWNrRm9yd2FyZExpc3QoRnJhbWUqIHRhcmdldEZyYW1lKQoreworICAgIC8vIE5h
dmlnYXRpb24gb2YgYSBzdWJmcmFtZSBkdXJpbmcgbG9hZGluZyBvZiBhbiBhbmNlc3RvciBmcmFt
ZSBkb2VzIG5vdCBjcmVhdGUgYSBuZXcgYmFjay9mb3J3YXJkIGl0ZW0uCisgICAgLy8gVGhlIGRl
ZmluaXRpb24gb2YgImR1cmluZyBsb2FkIiBpcyBhbnkgdGltZSBiZWZvcmUgYWxsIGhhbmRsZXJz
IGZvciB0aGUgbG9hZCBldmVudCBoYXZlIGJlZW4gcnVuLgorICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NTcgZm9yIHRoZSBvcmlnaW5hbCBtb3Rp
dmF0aW9uIGZvciB0aGlzLgorICAgIAorICAgIGZvciAoRnJhbWUqIGFuY2VzdG9yID0gdGFyZ2V0
RnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT50
cmVlKCktPnBhcmVudCgpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGFuY2VzdG9y
LT5kb2N1bWVudCgpOworICAgICAgICBpZiAoIWFuY2VzdG9yLT5sb2FkZXIoKS0+aXNDb21wbGV0
ZSgpIHx8IGRvY3VtZW50ICYmIGRvY3VtZW50LT5wcm9jZXNzaW5nTG9hZEV2ZW50KCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFJlZGlyZWN0U2NoZWR1bGVyOjpzY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tC
YWNrRm9yd2FyZExpc3QsIGJvb2wgd2FzVXNlckdlc3R1cmUpCit7CisgICAgaWYgKCFtX2ZyYW1l
LT5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBsb2NrQmFja0ZvcndhcmRMaXN0ID0gbG9ja0JhY2tGb3J3YXJk
TGlzdCB8fCBtdXN0TG9ja0JhY2tGb3J3YXJkTGlzdChtX2ZyYW1lKTsKKworICAgIEZyYW1lTG9h
ZGVyKiBsb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKTsKKyAgICAKKyAgICAvLyBJZiB0aGUgVVJM
IHdlJ3JlIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IG9u
ZSwgZXhjZXB0IGZvciB0aGUKKyAgICAvLyBmcmFnbWVudCBwYXJ0LCB3ZSBkb24ndCBuZWVkIHRv
IHNjaGVkdWxlIHRoZSBsb2NhdGlvbiBjaGFuZ2UuCisgICAgS1VSTCBwYXJzZWRVUkwoUGFyc2Vk
VVJMU3RyaW5nLCB1cmwpOworICAgIGlmIChwYXJzZWRVUkwuaGFzRnJhZ21lbnRJZGVudGlmaWVy
KCkgJiYgZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihsb2FkZXItPnVybCgpLCBwYXJz
ZWRVUkwpKSB7CisgICAgICAgIGxvYWRlci0+Y2hhbmdlTG9jYXRpb24obG9hZGVyLT5jb21wbGV0
ZVVSTCh1cmwpLCByZWZlcnJlciwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIHdh
c1VzZXJHZXN0dXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEhhbmRsZSBh
IGxvY2F0aW9uIGNoYW5nZSBvZiBhIHBhZ2Ugd2l0aCBubyBkb2N1bWVudCBhcyBhIHNwZWNpYWwg
Y2FzZS4KKyAgICAvLyBUaGlzIG1heSBoYXBwZW4gd2hlbiBhIGZyYW1lIGNoYW5nZXMgdGhlIGxv
Y2F0aW9uIG9mIGFub3RoZXIgZnJhbWUuCisgICAgYm9vbCBkdXJpbmdMb2FkID0gIWxvYWRlci0+
Y29tbWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkKCk7CisKKyAgICBzY2hlZHVsZShuZXcgU2No
ZWR1bGVkUmVkaXJlY3Rpb24odXJsLCByZWZlcnJlciwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9y
d2FyZExpc3QsIHdhc1VzZXJHZXN0dXJlLCBmYWxzZSwgZHVyaW5nTG9hZCkpOworfQorCit2b2lk
IFJlZGlyZWN0U2NoZWR1bGVyOjpzY2hlZHVsZUZvcm1TdWJtaXNzaW9uKGNvbnN0IEZyYW1lTG9h
ZFJlcXVlc3QmIGZyYW1lUmVxdWVzdCwKKyAgICBib29sIGxvY2tIaXN0b3J5LCBQYXNzUmVmUHRy
PEV2ZW50PiBldmVudCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSkKK3sKKyAgICBB
U1NFUlQobV9mcmFtZS0+cGFnZSgpKTsKKyAgICBBU1NFUlQoIWZyYW1lUmVxdWVzdC5pc0VtcHR5
KCkpOworCisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBmb3IgZm9y
bSBzdWJtaXNzaW9ucyB3aGVyZSB0aGUgVVJMIGlzIHRoZSBzYW1lCisgICAgLy8gYXMgdGhlIGN1
cnJlbnQgb25lIGV4Y2VwdCBmb3IgdGhlIGZyYWdtZW50IHBhcnQ/IFNlZSBzY2hlZHVsZUxvY2F0
aW9uQ2hhbmdlIGFib3ZlLgorCisgICAgLy8gSGFuZGxlIGEgbG9jYXRpb24gY2hhbmdlIG9mIGEg
cGFnZSB3aXRoIG5vIGRvY3VtZW50IGFzIGEgc3BlY2lhbCBjYXNlLgorICAgIC8vIFRoaXMgbWF5
IGhhcHBlbiB3aGVuIGEgZnJhbWUgY2hhbmdlcyB0aGUgbG9jYXRpb24gb2YgYW5vdGhlciBmcmFt
ZS4KKyAgICBib29sIGR1cmluZ0xvYWQgPSAhbV9mcmFtZS0+bG9hZGVyKCktPmNvbW1pdHRlZEZp
cnN0UmVhbERvY3VtZW50TG9hZCgpOworCisgICAgc2NoZWR1bGUobmV3IFNjaGVkdWxlZFJlZGly
ZWN0aW9uKGZyYW1lUmVxdWVzdCwgbG9ja0hpc3RvcnksIG11c3RMb2NrQmFja0ZvcndhcmRMaXN0
KG1fZnJhbWUpLCBldmVudCwgZm9ybVN0YXRlLCBkdXJpbmdMb2FkKSk7Cit9CisKK3ZvaWQgUmVk
aXJlY3RTY2hlZHVsZXI6OnNjaGVkdWxlUmVmcmVzaChib29sIHdhc1VzZXJHZXN0dXJlKQorewor
ICAgIGlmICghbV9mcmFtZS0+cGFnZSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgY29u
c3QgS1VSTCYgdXJsID0gbV9mcmFtZS0+bG9hZGVyKCktPnVybCgpOworCisgICAgaWYgKHVybC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNjaGVkdWxlKG5ldyBTY2hlZHVsZWRS
ZWRpcmVjdGlvbih1cmwuc3RyaW5nKCksIG1fZnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVy
cmVyKCksIHRydWUsIHRydWUsIHdhc1VzZXJHZXN0dXJlLCB0cnVlLCBmYWxzZSkpOworfQorCiti
b29sIFJlZGlyZWN0U2NoZWR1bGVyOjpsb2NhdGlvbkNoYW5nZVBlbmRpbmcoKQoreworICAgIGlm
ICghbV9zY2hlZHVsZWRSZWRpcmVjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
c3dpdGNoIChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT50eXBlKSB7CisgICAgICAgIGNhc2UgU2No
ZWR1bGVkUmVkaXJlY3Rpb246OnJlZGlyZWN0aW9uOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpoaXN0b3J5TmF2aWdhdGlvbjoK
KyAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6CisgICAg
ICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246OmZvcm1TdWJtaXNzaW9uOgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBSZWRpcmVjdFNjaGVkdWxlcjo6c2NoZWR1bGVIaXN0b3J5
TmF2aWdhdGlvbihpbnQgc3RlcHMpCit7CisgICAgaWYgKCFtX2ZyYW1lLT5wYWdlKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHNjaGVkdWxlKG5ldyBTY2hlZHVsZWRSZWRpcmVjdGlvbihzdGVw
cykpOworfQorCit2b2lkIFJlZGlyZWN0U2NoZWR1bGVyOjp0aW1lckZpcmVkKFRpbWVyPFJlZGly
ZWN0U2NoZWR1bGVyPiopCit7CisgICAgQVNTRVJUKG1fZnJhbWUtPnBhZ2UoKSk7CisKKyAgICBp
ZiAobV9mcmFtZS0+cGFnZSgpLT5kZWZlcnNMb2FkaW5nKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIE93blB0cjxTY2hlZHVsZWRSZWRpcmVjdGlvbj4gcmVkaXJlY3Rpb24obV9zY2hlZHVsZWRS
ZWRpcmVjdGlvbi5yZWxlYXNlKCkpOworICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBtX2ZyYW1l
LT5sb2FkZXIoKTsKKworICAgIHN3aXRjaCAocmVkaXJlY3Rpb24tPnR5cGUpIHsKKyAgICAgICAg
Y2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6cmVkaXJlY3Rpb246CisgICAgICAgIGNhc2UgU2No
ZWR1bGVkUmVkaXJlY3Rpb246OmxvY2F0aW9uQ2hhbmdlOgorICAgICAgICAgICAgbG9hZGVyLT5j
aGFuZ2VMb2NhdGlvbihLVVJMKFBhcnNlZFVSTFN0cmluZywgcmVkaXJlY3Rpb24tPnVybCksIHJl
ZGlyZWN0aW9uLT5yZWZlcnJlciwKKyAgICAgICAgICAgICAgICByZWRpcmVjdGlvbi0+bG9ja0hp
c3RvcnksIHJlZGlyZWN0aW9uLT5sb2NrQmFja0ZvcndhcmRMaXN0LCByZWRpcmVjdGlvbi0+d2Fz
VXNlckdlc3R1cmUsIHJlZGlyZWN0aW9uLT53YXNSZWZyZXNoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY2FzZSBTY2hlZHVsZWRSZWRpcmVjdGlvbjo6aGlzdG9yeU5hdmlnYXRpb246
CisgICAgICAgICAgICBpZiAocmVkaXJlY3Rpb24tPmhpc3RvcnlTdGVwcyA9PSAwKSB7CisgICAg
ICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBnbygwKSBmcm9tIGEgZnJhbWUgLT4gcmVs
b2FkIG9ubHkgdGhlIGZyYW1lCisgICAgICAgICAgICAgICAgbG9hZGVyLT51cmxTZWxlY3RlZChs
b2FkZXItPnVybCgpLCAiIiwgMCwgcmVkaXJlY3Rpb24tPmxvY2tIaXN0b3J5LCByZWRpcmVjdGlv
bi0+bG9ja0JhY2tGb3J3YXJkTGlzdCwgcmVkaXJlY3Rpb24tPndhc1VzZXJHZXN0dXJlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBnbyhp
IT0wKSBmcm9tIGEgZnJhbWUgbmF2aWdhdGVzIGludG8gdGhlIGhpc3Rvcnkgb2YgdGhlIGZyYW1l
IG9ubHksCisgICAgICAgICAgICAvLyBpbiBib3RoIElFIGFuZCBOUyAoYnV0IG5vdCBpbiBNb3pp
bGxhKS4gV2UgY2FuJ3QgZWFzaWx5IGRvIHRoYXQuCisgICAgICAgICAgICBpZiAobG9hZGVyLT5j
YW5Hb0JhY2tPckZvcndhcmQocmVkaXJlY3Rpb24tPmhpc3RvcnlTdGVwcykpCisgICAgICAgICAg
ICAgICAgbG9hZGVyLT5nb0JhY2tPckZvcndhcmQocmVkaXJlY3Rpb24tPmhpc3RvcnlTdGVwcyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJlY3Rpb246
OmZvcm1TdWJtaXNzaW9uOgorICAgICAgICAgICAgLy8gVGhlIHN1Ym1pdEZvcm0gZnVuY3Rpb24g
d2lsbCBmaW5kIGEgdGFyZ2V0IGZyYW1lIGJlZm9yZSB1c2luZyB0aGUgcmVkaXJlY3Rpb24gdGlt
ZXIuCisgICAgICAgICAgICAvLyBOb3cgdGhhdCB0aGUgdGltZXIgaGFzIGZpcmVkLCB3ZSBuZWVk
IHRvIHJlcGVhdCB0aGUgc2VjdXJpdHkgY2hlY2sgd2hpY2ggbm9ybWFsbHkgaXMgZG9uZSB3aGVu
CisgICAgICAgICAgICAvLyBzZWxlY3RpbmcgYSB0YXJnZXQsIGluIGNhc2UgY29uZGl0aW9ucyBo
YXZlIGNoYW5nZWQuIE90aGVyIGNvZGUgcGF0aHMgYXZvaWQgdGhpcyBieSB0YXJnZXRpbmcKKyAg
ICAgICAgICAgIC8vIHdpdGhvdXQgbGVhdmluZyBhIHRpbWUgd2luZG93LiBJZiB3ZSBmYWlsIHRo
ZSBjaGVjayBqdXN0IHNpbGVudGx5IGRyb3AgdGhlIGZvcm0gc3VibWlzc2lvbi4KKyAgICAgICAg
ICAgIGlmICghcmVkaXJlY3Rpb24tPmZvcm1TdGF0ZS0+c291cmNlRnJhbWUoKS0+bG9hZGVyKCkt
PnNob3VsZEFsbG93TmF2aWdhdGlvbihtX2ZyYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBsb2FkZXItPmxvYWRGcmFtZVJlcXVlc3QocmVkaXJlY3Rpb24tPmZyYW1l
UmVxdWVzdCwgcmVkaXJlY3Rpb24tPmxvY2tIaXN0b3J5LCByZWRpcmVjdGlvbi0+bG9ja0JhY2tG
b3J3YXJkTGlzdCwKKyAgICAgICAgICAgICAgICByZWRpcmVjdGlvbi0+ZXZlbnQsIHJlZGlyZWN0
aW9uLT5mb3JtU3RhdGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFJlZGlyZWN0U2NoZWR1bGVyOjpzY2hlZHVsZShQ
YXNzT3duUHRyPFNjaGVkdWxlZFJlZGlyZWN0aW9uPiByZWRpcmVjdGlvbikKK3sKKyAgICBBU1NF
UlQobV9mcmFtZS0+cGFnZSgpKTsKKyAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gbV9mcmFtZS0+
bG9hZGVyKCk7CisKKyAgICAvLyBJZiBhIHJlZGlyZWN0IHdhcyBzY2hlZHVsZWQgZHVyaW5nIGEg
bG9hZCwgdGhlbiBzdG9wIHRoZSBjdXJyZW50IGxvYWQuCisgICAgLy8gT3RoZXJ3aXNlIHdoZW4g
dGhlIGN1cnJlbnQgbG9hZCB0cmFuc2l0aW9ucyBmcm9tIGEgcHJvdmlzaW9uYWwgdG8gYSAKKyAg
ICAvLyBjb21taXR0ZWQgc3RhdGUsIHBlbmRpbmcgcmVkaXJlY3RzIG1heSBiZSBjYW5jZWxsZWQu
IAorICAgIGlmIChyZWRpcmVjdGlvbi0+d2FzRHVyaW5nTG9hZCkgeworICAgICAgICBpZiAoRG9j
dW1lbnRMb2FkZXIqIHByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIgPSBsb2FkZXItPnByb3Zpc2lv
bmFsRG9jdW1lbnRMb2FkZXIoKSkKKyAgICAgICAgICAgIHByb3Zpc2lvbmFsRG9jdW1lbnRMb2Fk
ZXItPnN0b3BMb2FkaW5nKCk7CisgICAgICAgIGxvYWRlci0+c3RvcExvYWRpbmcoVW5sb2FkRXZl
bnRQb2xpY3lVbmxvYWRBbmRQYWdlSGlkZSk7ICAgCisgICAgfQorCisgICAgY2FuY2VsKCk7Cisg
ICAgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbiA9IHJlZGlyZWN0aW9uOworICAgIGlmICghbG9hZGVy
LT5pc0NvbXBsZXRlKCkgJiYgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+dHlwZSAhPSBTY2hlZHVs
ZWRSZWRpcmVjdGlvbjo6cmVkaXJlY3Rpb24pCisgICAgICAgIGxvYWRlci0+Y29tcGxldGVkKCk7
CisgICAgc3RhcnRUaW1lcigpOworfQorCit2b2lkIFJlZGlyZWN0U2NoZWR1bGVyOjpzdGFydFRp
bWVyKCkKK3sKKyAgICBpZiAoIW1fc2NoZWR1bGVkUmVkaXJlY3Rpb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX2ZyYW1lLT5wYWdlKCkpOworICAgIAorICAgIEZyYW1lTG9hZGVy
KiBsb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKTsKKworICAgIGlmIChtX3RpbWVyLmlzQWN0aXZl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT50
eXBlID09IFNjaGVkdWxlZFJlZGlyZWN0aW9uOjpyZWRpcmVjdGlvbiAmJiAhbG9hZGVyLT5hbGxB
bmNlc3RvcnNBcmVDb21wbGV0ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RpbWVyLnN0
YXJ0T25lU2hvdChtX3NjaGVkdWxlZFJlZGlyZWN0aW9uLT5kZWxheSk7CisKKyAgICBzd2l0Y2gg
KG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPnR5cGUpIHsKKyAgICAgICAgY2FzZSBTY2hlZHVsZWRS
ZWRpcmVjdGlvbjo6bG9jYXRpb25DaGFuZ2U6CisgICAgICAgIGNhc2UgU2NoZWR1bGVkUmVkaXJl
Y3Rpb246OnJlZGlyZWN0aW9uOgorICAgICAgICAgICAgaWYgKG1fc2NoZWR1bGVkUmVkaXJlY3Rp
b24tPnRvbGRDbGllbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9z
Y2hlZHVsZWRSZWRpcmVjdGlvbi0+dG9sZENsaWVudCA9IHRydWU7CisgICAgICAgICAgICBsb2Fk
ZXItPmNsaWVudFJlZGlyZWN0ZWQoS1VSTChQYXJzZWRVUkxTdHJpbmcsIG1fc2NoZWR1bGVkUmVk
aXJlY3Rpb24tPnVybCksCisgICAgICAgICAgICAgICAgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi0+
ZGVsYXksCisgICAgICAgICAgICAgICAgY3VycmVudFRpbWUoKSArIG1fdGltZXIubmV4dEZpcmVJ
bnRlcnZhbCgpLAorICAgICAgICAgICAgICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24tPmxvY2tC
YWNrRm9yd2FyZExpc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFNjaGVk
dWxlZFJlZGlyZWN0aW9uOjpmb3JtU3VibWlzc2lvbjoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJ
dCB3b3VsZCBtYWtlIHNlbnNlIHRvIHJlcG9ydCBmb3JtIHN1Ym1pc3Npb25zIGFzIGNsaWVudCBy
ZWRpcmVjdHMgdG9vLgorICAgICAgICAgICAgLy8gQnV0IHdlIGRpZG4ndCBkbyB0aGF0IGluIHRo
ZSBwYXN0IHdoZW4gZm9ybSBzdWJtaXNzaW9uIHVzZWQgYSBzZXBhcmF0ZSBkZWxheQorICAgICAg
ICAgICAgLy8gbWVjaGFuaXNtLCBzbyBkb2luZyBpdCB3aWxsIGJlIGEgYmVoYXZpb3IgY2hhbmdl
LgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFNjaGVkdWxlZFJlZGlyZWN0aW9u
OjpoaXN0b3J5TmF2aWdhdGlvbjoKKyAgICAgICAgICAgIC8vIERvbid0IHJlcG9ydCBoaXN0b3J5
IG5hdmlnYXRpb25zLgorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBSZWRpcmVjdFNjaGVkdWxlcjo6Y2FuY2VsKGJvb2wgbmV3
TG9hZEluUHJvZ3Jlc3MpCit7CisgICAgbV90aW1lci5zdG9wKCk7CisKKyAgICBPd25QdHI8U2No
ZWR1bGVkUmVkaXJlY3Rpb24+IHJlZGlyZWN0aW9uKG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24ucmVs
ZWFzZSgpKTsKKyAgICBpZiAocmVkaXJlY3Rpb24gJiYgcmVkaXJlY3Rpb24tPnRvbGRDbGllbnQp
CisgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnRSZWRpcmVjdENhbmNlbGxlZE9yRmlu
aXNoZWQobmV3TG9hZEluUHJvZ3Jlc3MpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL1JlZGlyZWN0U2NoZWR1bGVyLmggYi9XZWJDb3Jl
L2xvYWRlci9SZWRpcmVjdFNjaGVkdWxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjdmYzg5NTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2xvYWRlci9SZWRpcmVj
dFNjaGVkdWxlci5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QWRhbSBCYXJ0aC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlZGlyZWN0U2NoZWR1
bGVyX2gKKyNkZWZpbmUgUmVkaXJlY3RTY2hlZHVsZXJfaAorCisjaW5jbHVkZSAiRXZlbnQuaCIK
KyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEZvcm1TdGF0ZTsKKyAgICBjbGFzcyBGcmFtZTsKKyAg
ICBjbGFzcyBGcmFtZUxvYWRSZXF1ZXN0OworICAgIGNsYXNzIFN0cmluZzsKKworICAgIHN0cnVj
dCBTY2hlZHVsZWRSZWRpcmVjdGlvbjsKKworICAgIGNsYXNzIFJlZGlyZWN0U2NoZWR1bGVyIDog
cHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlZGlyZWN0U2NoZWR1
bGVyKEZyYW1lKik7CisgICAgICAgIH5SZWRpcmVjdFNjaGVkdWxlcigpOworCisgICAgICAgIGJv
b2wgcmVkaXJlY3RTY2hlZHVsZWREdXJpbmdMb2FkKCk7CisgICAgICAgIGJvb2wgbG9jYXRpb25D
aGFuZ2VQZW5kaW5nKCk7CisKKyAgICAgICAgdm9pZCBzY2hlZHVsZVJlZGlyZWN0KGRvdWJsZSBk
ZWxheSwgY29uc3QgU3RyaW5nJiB1cmwpOworICAgICAgICB2b2lkIHNjaGVkdWxlTG9jYXRpb25D
aGFuZ2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgbG9j
a0hpc3RvcnkgPSB0cnVlLCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QgPSB0cnVlLCBib29sIHVz
ZXJHZXN0dXJlID0gZmFsc2UpOworICAgICAgICB2b2lkIHNjaGVkdWxlRm9ybVN1Ym1pc3Npb24o
Y29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGJvb2wgbG9ja0hpc3RvcnksIFBhc3NSZWZQdHI8RXZl
bnQ+LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pOworICAgICAgICB2b2lkIHNjaGVkdWxlUmVmcmVz
aChib29sIHVzZXJHZXN0dXJlID0gZmFsc2UpOworICAgICAgICB2b2lkIHNjaGVkdWxlSGlzdG9y
eU5hdmlnYXRpb24oaW50IHN0ZXBzKTsKKworICAgICAgICB2b2lkIHN0YXJ0VGltZXIoKTsKKwor
ICAgICAgICB2b2lkIGNhbmNlbChib29sIG5ld0xvYWRJblByb2dyZXNzID0gZmFsc2UpOworICAg
ICAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHRpbWVyRmly
ZWQoVGltZXI8UmVkaXJlY3RTY2hlZHVsZXI+Kik7CisgICAgICAgIHZvaWQgc2NoZWR1bGUoUGFz
c093blB0cjxTY2hlZHVsZWRSZWRpcmVjdGlvbj4gcmVkaXJlY3Rpb24pOworCisgICAgICAgIHN0
YXRpYyBib29sIG11c3RMb2NrQmFja0ZvcndhcmRMaXN0KEZyYW1lKiB0YXJnZXRGcmFtZSk7CisK
KyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgICAgIFRpbWVyPFJlZGlyZWN0U2NoZWR1bGVy
PiBtX3RpbWVyOworICAgICAgICBPd25QdHI8U2NoZWR1bGVkUmVkaXJlY3Rpb24+IG1fc2NoZWR1
bGVkUmVkaXJlY3Rpb247CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRnJhbWVMb2FkZXJfaA==
</data>
<flag name="review"
          id="21641"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>