<?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>11786</bug_id>
          
          <creation_ts>2006-12-08 12:58:20 -0800</creation_ts>
          <short_desc>Create ResourceHandleBase to eliminate #ifdefs in ResourceHandle and related headers</short_desc>
          <delta_ts>2011-09-02 16:23:50 -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>Platform</component>
          <version>420+</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Fisher (:fishd, Google)">fishd</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>42766</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2006-12-08 12:58:20 -0800</bug_when>
    <thetext>Refactor ResourceHandleInternal to ease porting

Currently it is necessary to #ifdef ResourceHandleInternal when implementing a port of ResourceHandle.  It&apos;d be a lot simpler if ResourceHandlerInternal were a base class that only defined the shared member variables.  Then each port could subclass that to define their port specific member variables, and each port could be responsible for allocating ResourceHandle&apos;s d-pointer.

If such a change is acceptable, I&apos;ll gladly cut a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68193</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-01-24 23:28:19 -0800</bug_when>
    <thetext>I&apos;d like to reframe this bug in terms of creating ResourceHandleBase, which would allow us to eliminate ResourceHandleInternal and avoid a bunch of platform #ifdefs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68194</commentid>
    <comment_count>2</comment_count>
      <attachid>18687</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-01-24 23:37:54 -0800</bug_when>
    <thetext>Created attachment 18687
prototype patch for PLATFORM(MAC) only

Here&apos;s the initial changes for PLATFORM(MAC).  I&apos;d like feedback on this approach before I make corresponding changes for the other platforms :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68230</commentid>
    <comment_count>3</comment_count>
      <attachid>18687</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-01-25 13:00:00 -0800</bug_when>
    <thetext>Comment on attachment 18687
prototype patch for PLATFORM(MAC) only

actually, this isn&apos;t ready for review yet.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18687</attachid>
            <date>2008-01-24 23:37:54 -0800</date>
            <delta_ts>2010-06-10 15:25:28 -0700</delta_ts>
            <desc>prototype patch for PLATFORM(MAC) only</desc>
            <filename>resource-handle-base-1.diff</filename>
            <type>text/plain</type>
            <size>73551</size>
            <attacher name="Darin Fisher (:fishd, Google)">fishd</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI5Nzg5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDggQEAKKzIwMDgtMDEt
MjQgIE1vcmdhbkwgIDxtb3JnYW5sLndlYmtpdEB5YWhvby5jb20+CisKKyAgICAgICAgQ3JlYXRl
IFJlc291cmNlSGFuZGxlQmFzZS4gIEVsaW1pbmF0ZSBSZXNvdXJjZUhhbmRsZUludGVybmFsLgor
CisgICAgICAgIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc4
NiBmb3IgZGV0YWlscy4KKworICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9S
IENIQU5HRUQKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUJhc2UuY3BwOiBDb3BpZWQg
ZnJvbSBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlQmFzZTo6YXNSZXNvdXJjZUhhbmRsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZUJhc2U6OlJlc291cmNlSGFuZGxlQmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUJhc2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZUJhc2U6OnNjaGVkdWxlQmxvY2tlZEZhaWx1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGVCYXNlOjpmaXJlQmxvY2tlZEZhaWx1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVCYXNlOjpwb3J0QWxsb3dlZCk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUJhc2UuaDogQ29waWVkIGZyb20gcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5oLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGVCYXNlOjpjbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVCYXNlOjpz
ZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVCYXNlOjpyZXF1ZXN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZS5o
OiBDb3BpZWQgZnJvbSBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmguCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6UmVzb3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlQmFzZTo6Y2xlYXJBdXRoZW50aWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZUJhc2U6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUJh
c2U6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmRlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZWxlYXNlRGVs
ZWdhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVCYXNlOjpzdXBwb3J0c0J1
ZmZlcmVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUJhc2U6OmJ1ZmZl
cmVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVsZWFzZVByb3h5
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb25uZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQmFzZTo6bG9hZHNCbG9ja2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQmFzZTo6d2lsbExvYWRGcm9tQ2FjaGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVCYXNlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZENh
bmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpb24pOgorCiAy
MDA4LTAxLTI0ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBCZXR0
ZXIgZml4IGZvciBCdWcgMTY5OTYKSW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDI5NzIxKQorKysgV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zODYsMTAgKzM4Niw3IEBACiAJCTUxNEM3Njc1MENFOTIzQTEwMDdFRjND
RCAvKiBQcm90ZWN0aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNEM3NjYwMENFOTIzQTEwMDdFRjNDRCAvKiBQcm90ZWN0aW9uU3BhY2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTRD
NzY3NjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VFcnJvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY2MTBDRTkyM0ExMDA3RUYzQ0Qg
LyogUmVzb3VyY2VFcnJvci5jcHAgKi87IH07CiAJCTUxNEM3Njc3MENFOTIzQTEwMDdFRjNDRCAv
KiBSZXNvdXJjZUVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTRDNzY2MjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VFcnJvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxNEM3Njc4MENF
OTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY2MzBDRTkyM0ExMDA3RUYzQ0QgLyogUmVz
b3VyY2VIYW5kbGUuY3BwICovOyB9OwotCQk1MTRDNzY3OTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVz
b3VyY2VIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNEM3NjY0MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNEM3NjdBMENFOTIz
QTEwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NjUwQ0U5MjNBMTAwN0VGM0NEIC8qIFJl
c291cmNlSGFuZGxlQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJNTE0Qzc2N0IwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlSGFuZGxl
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNEM3NjY2MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZUludGVybmFsLmggKi87
IH07CiAJCTUxNEM3NjdDMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjY3
MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmNwcCAqLzsgfTsKIAkJNTE0
Qzc2N0QwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjY4MENFOTIzQTEwMDdF
RjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2N0UwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291
cmNlUmVzcG9uc2VCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNEM3NjY5MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFz
ZS5jcHAgKi87IH07CkBAIC0xNTQyLDYgKzE1MzksOSBAQAogCQk5MzUyMDg3NzA5QkQ0NTM0MDBG
MjAzOEQgLyogQ29va2llSmFyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTM1MjA4NzYwOUJENDUzNDAwRjIwMzhEIC8qIENvb2tpZUphci5tbSAqLzsg
fTsKIAkJOTM1MjA4ODIwOUJENDVFOTAwRjIwMzhEIC8qIENvb2tpZUphci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1MjA4ODEwOUJENDVFOTAwRjIw
MzhEIC8qIENvb2tpZUphci5oICovOyB9OwogCQk5MzUzNjc2QjA5QUVEODhCMDBEMzVDRDYgLyog
U2Nyb2xsVmlld01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzNTM2NzZBMDlBRUQ4OEIwMEQzNUNENiAvKiBTY3JvbGxWaWV3TWFjLm1tICovOyB9
OworCQk5MzVBMEEwNDBENDlDMEQzMDBBRUE1MUUgLyogUmVzb3VyY2VIYW5kbGVCYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNUEwQTAyMEQ0
OUMwRDMwMEFFQTUxRSAvKiBSZXNvdXJjZUhhbmRsZUJhc2UuY3BwICovOyB9OworCQk5MzVBMEEw
NTBENDlDMEQzMDBBRUE1MUUgLyogUmVzb3VyY2VIYW5kbGVCYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzVBMEEwMzBENDlDMEQzMDBBRUE1MUUg
LyogUmVzb3VyY2VIYW5kbGVCYXNlLmggKi87IH07CisJCTkzNUEwQTA3MEQ0OUMwRkEwMEFFQTUx
RSAvKiBSZXNvdXJjZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTM1QTBBMDYwRDQ5QzBGQTAwQUVBNTFFIC8qIFJlc291cmNlSGFuZGxlLmgg
Ki87IH07CiAJCTkzNUM0NzYxMDlBQzRDRDEwMEE2QUFCNCAvKiBMZW5ndGguaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNUM0NzYwMDlBQzRDRDEwMEE2
QUFCNCAvKiBMZW5ndGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5MzVDNDc2MzA5QUM0Q0U2MDBBNkFBQjQgLyogTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTM1QzQ3NjIwOUFDNENFNjAwQTZBQUI0IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMuaCAqLzsgfTsKIAkJOTM1QzQ3NjgwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTM1QzQ3NjYwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NjM2LDEwICs0
NjM2LDcgQEAKIAkJNTE0Qzc2NjAwQ0U5MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25TcGFjZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm90ZWN0aW9uU3BhY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0Qzc2NjEwQ0U5MjNBMTAwN0VGM0NEIC8qIFJl
c291cmNlRXJyb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVz
b3VyY2VFcnJvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNEM3NjYyMENF
OTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZUVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlc291cmNlRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTE0Qzc2NjMwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlSGFuZGxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlSGFuZGxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE0Qzc2NjQwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNl
SGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlSGFuZGxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNEM3NjY1MENFOTIzQTEwMDdFRjND
RCAvKiBSZXNvdXJjZUhhbmRsZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZXNvdXJjZUhhbmRsZUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MTRDNzY2NjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUhhbmRsZUludGVybmFsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNEM3NjY3MENFOTIzQTEwMDdFRjNDRCAv
KiBSZXNvdXJjZVJlcXVlc3RCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlc291cmNlUmVxdWVzdEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTRDNzY2ODBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZVJlcXVlc3RCYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNEM3NjY5MENFOTIzQTEwMDdFRjNDRCAvKiBS
ZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NzU5LDYgKzU3NTYsOSBAQAogCQk5MzUyMDg3NjA5QkQ0NTM0MDBGMjAzOEQgLyogQ29v
a2llSmFyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29va2ll
SmFyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzUyMDg4MTA5QkQ0NUU5MDBG
MjAzOEQgLyogQ29va2llSmFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
b2tpZUphci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzUzNjc2QTA5QUVEODhC
MDBEMzVDRDYgLyogU2Nyb2xsVmlld01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFNjcm9sbFZpZXdNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTkzNUEwQTAyMEQ0OUMwRDMwMEFFQTUxRSAvKiBSZXNvdXJjZUhhbmRsZUJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlSGFuZGxlQmFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzNUEwQTAzMEQ0OUMwRDMwMEFFQTUx
RSAvKiBSZXNvdXJjZUhhbmRsZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc291cmNlSGFuZGxlQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
MzVBMEEwNjBENDlDMEZBMDBBRUE1MUUgLyogUmVzb3VyY2VIYW5kbGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzNUM0NzYwMDlBQzRDRDEwMEE2QUFCNCAvKiBMZW5ndGguaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzNUM0NzYyMDlBQzRDRTYwMEE2QUFCNCAvKiBNb3VzZUV2ZW50V2l0aEhpdFRl
c3RSZXN1bHRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM1QzQ3
NjYwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgyMzQsNiArODIzNCw4IEBACiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTY1NkI4NEU3MEFFQTFEQUUwMEEwOTVCNCAvKiBtYWMg
Ki8sCisJCQkJOTM1QTBBMDIwRDQ5QzBEMzAwQUVBNTFFIC8qIFJlc291cmNlSGFuZGxlQmFzZS5j
cHAgKi8sCisJCQkJOTM1QTBBMDMwRDQ5QzBEMzAwQUVBNTFFIC8qIFJlc291cmNlSGFuZGxlQmFz
ZS5oICovLAogCQkJCTUxNEM3NjU2MENFOTIzQTEwMDdFRjNDRCAvKiBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5jcHAgKi8sCiAJCQkJNTE0Qzc2NTcwQ0U5MjNBMTAwN0VGM0NEIC8qIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLmggKi8sCiAJCQkJNTE0Qzc2NTgwQ0U5MjNBMTAwN0VGM0NEIC8qIENy
ZWRlbnRpYWwuY3BwICovLApAQCAtODI0NywxMCArODI0OSw3IEBACiAJCQkJNTE0Qzc2NjAwQ0U5
MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25TcGFjZS5oICovLAogCQkJCTUxNEM3NjYxMENFOTIz
QTEwMDdFRjNDRCAvKiBSZXNvdXJjZUVycm9yLmNwcCAqLywKIAkJCQk1MTRDNzY2MjBDRTkyM0Ex
MDA3RUYzQ0QgLyogUmVzb3VyY2VFcnJvci5oICovLAotCQkJCTUxNEM3NjYzMENFOTIzQTEwMDdF
RjNDRCAvKiBSZXNvdXJjZUhhbmRsZS5jcHAgKi8sCi0JCQkJNTE0Qzc2NjQwQ0U5MjNBMTAwN0VG
M0NEIC8qIFJlc291cmNlSGFuZGxlLmggKi8sCiAJCQkJNTE0Qzc2NjUwQ0U5MjNBMTAwN0VGM0NE
IC8qIFJlc291cmNlSGFuZGxlQ2xpZW50LmggKi8sCi0JCQkJNTE0Qzc2NjYwQ0U5MjNBMTAwN0VG
M0NEIC8qIFJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCAqLywKIAkJCQk1MTRDNzY2NzBDRTkyM0Ex
MDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAgKi8sCiAJCQkJNTE0Qzc2NjgwQ0U5
MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJhc2UuaCAqLywKIAkJCQk1MTRDNzY2OTBD
RTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwICovLApAQCAtODI2Miw2
ICs4MjYxLDcgQEAKIAkJNjU2Qjg0RTcwQUVBMURBRTAwQTA5NUI0IC8qIG1hYyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJOTM1QTBBMDYwRDQ5QzBGQTAw
QUVBNTFFIC8qIFJlc291cmNlSGFuZGxlLmggKi8sCiAJCQkJNTE0Qzc2NDIwQ0U5MjM0RTAwN0VG
M0NEIC8qIEF1dGhlbnRpY2F0aW9uTWFjLmggKi8sCiAJCQkJNTE0Qzc2NDMwQ0U5MjM0RTAwN0VG
M0NEIC8qIEF1dGhlbnRpY2F0aW9uTWFjLm1tICovLAogCQkJCTUxNEM3NjQ0MENFOTIzNEUwMDdF
RjNDRCAvKiBGb3JtRGF0YVN0cmVhbU1hYy5oICovLApAQCAtMTM3OTksOSArMTM3OTksNyBAQAog
CQkJCTkzMzA5RTBBMDk5RTY0OTIwMDU2RTU4MSAvKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCMTZDMkYwOTc5QzNCRDAwNDY3NzQxIC8qIFJlcXVlc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxNEM3Njc3MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJj
ZUVycm9yLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTRDNzY3OTBDRTkyM0ExMDA3RUYzQ0QgLyog
UmVzb3VyY2VIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNEM3NjdBMENFOTIzQTEwMDdF
RjNDRCAvKiBSZXNvdXJjZUhhbmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE0Qzc2
N0IwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1NkQzNzNGMEFEQkE1REUwMEE0NTU0RCAvKiBSZXNvdXJjZUxvYWRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTE0Qzc2NTIwQ0U5MjM0RTAwN0VGM0NEIC8qIFJlc291cmNlUmVx
dWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0Qzc2N0QwQ0U5MjNBMTAwN0VGM0NEIC8qIFJl
c291cmNlUmVxdWVzdEJhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTQxOTgsNiArMTQxOTYsOCBA
QAogCQkJCUIyMzdDOEE4MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdGb250RGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTRFRUZGQzkwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5QjNFNEUwRDNDMUU4NDAwQjRBOTJCIC8qIFN0cmlu
Z0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTM1QTBBMDUwRDQ5QzBEMzAwQUVBNTFFIC8q
IFJlc291cmNlSGFuZGxlQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTM1QTBBMDcwRDQ5QzBG
QTAwQUVBNTFFIC8qIFJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE0MjM2LDcg
KzE0MjM2LDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0
ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3Qg
PSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZv
ciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhj
b2RlIDIuNCI7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9u
cyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMTQyNTAsNyArMTQyNDksNiBAQAogCQkJbWFpbkdyb3Vw
ID0gMDg2N0Q2OTFGRTg0MDI4RkMwMkFBQzA3IC8qIFdlYktpdCAqLzsKIAkJCXByb2R1Y3RSZWZH
cm91cCA9IDAzNDc2OERGRkYzOEE1MDQxMURCOUM4QiAvKiBQcm9kdWN0cyAqLzsKIAkJCXByb2pl
Y3REaXJQYXRoID0gIiI7Ci0JCQlwcm9qZWN0Um9vdCA9ICIiOwogCQkJdGFyZ2V0cyA9ICgKIAkJ
CQk5M0YxOThBNTA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZSAqLywKIAkJCQlERDA0MUZCRTA5
RDlEREJFMDAxMEFGMkEgLyogRGVyaXZlZCBTb3VyY2VzICovLApAQCAtMTU0MDQsNyArMTU0MDIs
NiBAQAogCQkJCUJDQjE2QzJFMDk3OUMzQkQwMDQ2Nzc0MSAvKiBSZXF1ZXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUxNEM3Njc2MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZUVycm9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3NjUwMENFOTIzNEUwMDdFRjNDRCAvKiBSZXNvdXJj
ZUVycm9yTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE0Qzc2NzgwQ0U5MjNBMTAwN0VGM0NE
IC8qIFJlc291cmNlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3NjUxMENFOTIz
NEUwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkz
RTIyN0UzMEFGNTg5QUQwMEQ0ODMyNCAvKiBSZXNvdXJjZUxvYWRlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MUFBM0Y2RjBCRDVBQTlFMDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0g
aW4gU291cmNlcyAqLywKQEAgLTE1Nzg4LDYgKzE1Nzg1LDcgQEAKIAkJCQlBQkZFN0UxMjBEMzJG
QUY2MDA2NkY0RDIgLyogTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjIzN0M4QTcwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUU0RUVGRkM4MEQzNDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTM1QTBBMDQwRDQ5QzBEMzAwQUVBNTFFIC8qIFJlc291
cmNlSGFuZGxlQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGUuY3BwCShyZXZpc2lvbiAyOTcyMSkKKysrIHBsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4NSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgotCi0jaW5jbHVkZSAiTG9n
Z2luZy5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCi0jaW5jbHVkZSAiVGlt
ZXIuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVz
b3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCwgYm9vbCBkZWZlcnNMb2FkaW5nLAotICAg
ICAgICAgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5k
bGUpCi0gICAgOiBkKG5ldyBSZXNvdXJjZUhhbmRsZUludGVybmFsKHRoaXMsIHJlcXVlc3QsIGNs
aWVudCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmLCBtaWdodERvd25sb2FkRnJv
bUhhbmRsZSkpCi17Ci19Ci0KLVBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291cmNlSGFu
ZGxlOjpjcmVhdGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRs
ZUNsaWVudCogY2xpZW50LAotICAgIEZyYW1lKiBmcmFtZSwgYm9vbCBkZWZlcnNMb2FkaW5nLCBi
b29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSkKLXsK
LSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IG5ld0hhbmRsZShuZXcgUmVzb3VyY2VIYW5kbGUo
cmVxdWVzdCwgY2xpZW50LCBkZWZlcnNMb2FkaW5nLCBzaG91bGRDb250ZW50U25pZmYsIG1pZ2h0
RG93bmxvYWRGcm9tSGFuZGxlKSk7Ci0KLSAgICBpZiAoIXBvcnRBbGxvd2VkKHJlcXVlc3QpKSB7
Ci0gICAgICAgIG5ld0hhbmRsZS0+c2NoZWR1bGVCbG9ja2VkRmFpbHVyZSgpOwotICAgICAgICBy
ZXR1cm4gbmV3SGFuZGxlLnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGlmIChuZXdI
YW5kbGUtPnN0YXJ0KGZyYW1lKSkKLSAgICAgICAgcmV0dXJuIG5ld0hhbmRsZS5yZWxlYXNlKCk7
Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2NoZWR1bGVCbG9j
a2VkRmFpbHVyZSgpCi17Ci0gICAgVGltZXI8UmVzb3VyY2VIYW5kbGU+KiBibG9ja2VkVGltZXIg
PSBuZXcgVGltZXI8UmVzb3VyY2VIYW5kbGU+KHRoaXMsICZSZXNvdXJjZUhhbmRsZTo6ZmlyZUJs
b2NrZWRGYWlsdXJlKTsKLSAgICBibG9ja2VkVGltZXItPnN0YXJ0T25lU2hvdCgwKTsKLX0KLQot
dm9pZCBSZXNvdXJjZUhhbmRsZTo6ZmlyZUJsb2NrZWRGYWlsdXJlKFRpbWVyPFJlc291cmNlSGFu
ZGxlPiogdGltZXIpCi17Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+d2Fz
QmxvY2tlZCh0aGlzKTsKLSAgICBkZWxldGUgdGltZXI7Ci19Ci0KLVJlc291cmNlSGFuZGxlQ2xp
ZW50KiBSZXNvdXJjZUhhbmRsZTo6Y2xpZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZC0+bV9j
bGllbnQ7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudChSZXNvdXJjZUhhbmRs
ZUNsaWVudCogY2xpZW50KQotewotICAgIGQtPm1fY2xpZW50ID0gY2xpZW50OwotfQotCi1jb25z
dCBSZXNvdXJjZVJlcXVlc3QmIFJlc291cmNlSGFuZGxlOjpyZXF1ZXN0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZC0+bV9yZXF1ZXN0OwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlOjpjbGVhckF1
dGhlbnRpY2F0aW9uKCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgZC0+bV9jdXJyZW50TWFj
Q2hhbGxlbmdlID0gbmlsOwotI2VsaWYgUExBVEZPUk0oQ0YpCi0gICAgZC0+bV9jdXJyZW50Q0ZD
aGFsbGVuZ2UgPSAwOwotI2VuZGlmCi0gICAgZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlLm51bGxp
ZnkoKTsKLX0KLQotYm9vbCBSZXNvdXJjZUhhbmRsZTo6cG9ydEFsbG93ZWQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHVuc2lnbmVkIHNob3J0IHBvcnQgPSByZXF1ZXN0
LnVybCgpLnBvcnQoKTsKLQotICAgIC8vIFNpbmNlIG1vc3QgVVJMcyBkb24ndCBoYXZlIGEgcG9y
dCwgcmV0dXJuIGVhcmx5IGZvciB0aGUgIm5vIHBvcnQiIGNhc2UuCi0gICAgaWYgKCFwb3J0KQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFRoaXMgYmxvY2tlZCBwb3J0IGxpc3QgbWF0
Y2hlcyB0aGUgcG9ydCBibG9ja2luZyB0aGF0IE1vemlsbGEgaW1wbGVtZW50cy4KLSAgICAvLyBT
ZWUgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9uZXRsaWIvUG9ydEJhbm5pbmcuaHRt
bCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQg
YmxvY2tlZFBvcnRMaXN0W10gPSB7Ci0gICAgICAgIDEsICAgIC8vIHRjcG11eAotICAgICAgICA3
LCAgICAvLyBlY2hvCi0gICAgICAgIDksICAgIC8vIGRpc2NhcmQKLSAgICAgICAgMTEsICAgLy8g
c3lzdGF0Ci0gICAgICAgIDEzLCAgIC8vIGRheXRpbWUKLSAgICAgICAgMTUsICAgLy8gbmV0c3Rh
dAotICAgICAgICAxNywgICAvLyBxb3RkCi0gICAgICAgIDE5LCAgIC8vIGNoYXJnZW4KLSAgICAg
ICAgMjAsICAgLy8gRlRQLWRhdGEKLSAgICAgICAgMjEsICAgLy8gRlRQLWNvbnRyb2wKLSAgICAg
ICAgMjIsICAgLy8gU1NICi0gICAgICAgIDIzLCAgIC8vIHRlbG5ldAotICAgICAgICAyNSwgICAv
LyBTTVRQCi0gICAgICAgIDM3LCAgIC8vIHRpbWUKLSAgICAgICAgNDIsICAgLy8gbmFtZQotICAg
ICAgICA0MywgICAvLyBuaWNuYW1lCi0gICAgICAgIDUzLCAgIC8vIGRvbWFpbgotICAgICAgICA3
NywgICAvLyBwcml2LXJqcwotICAgICAgICA3OSwgICAvLyBmaW5nZXIKLSAgICAgICAgODcsICAg
Ly8gdHR5bGluawotICAgICAgICA5NSwgICAvLyBzdXBkdXAKLSAgICAgICAgMTAxLCAgLy8gaG9z
dHJpYW1lCi0gICAgICAgIDEwMiwgIC8vIGlzby10c2FwCi0gICAgICAgIDEwMywgIC8vIGdwcGl0
bnAKLSAgICAgICAgMTA0LCAgLy8gYWNyLW5lbWEKLSAgICAgICAgMTA5LCAgLy8gUE9QMgotICAg
ICAgICAxMTAsICAvLyBQT1AzCi0gICAgICAgIDExMSwgIC8vIHN1bnJwYwotICAgICAgICAxMTMs
ICAvLyBhdXRoCi0gICAgICAgIDExNSwgIC8vIFNGVFAKLSAgICAgICAgMTE3LCAgLy8gdXVjcC1w
YXRoCi0gICAgICAgIDExOSwgIC8vIG5udHAKLSAgICAgICAgMTIzLCAgLy8gTlRQCi0gICAgICAg
IDEzNSwgIC8vIGxvYy1zcnYgLyBlcG1hcAotICAgICAgICAxMzksICAvLyBuZXRiaW9zCi0gICAg
ICAgIDE0MywgIC8vIElNQVAyCi0gICAgICAgIDE3OSwgIC8vIEJHUAotICAgICAgICAzODksICAv
LyBMREFQCi0gICAgICAgIDQ2NSwgIC8vIFNNVFArU1NMCi0gICAgICAgIDUxMiwgIC8vIHByaW50
IC8gZXhlYwotICAgICAgICA1MTMsICAvLyBsb2dpbgotICAgICAgICA1MTQsICAvLyBzaGVsbAot
ICAgICAgICA1MTUsICAvLyBwcmludGVyCi0gICAgICAgIDUyNiwgIC8vIHRlbXBvCi0gICAgICAg
IDUzMCwgIC8vIGNvdXJpZXIKLSAgICAgICAgNTMxLCAgLy8gQ2hhdAotICAgICAgICA1MzIsICAv
LyBuZXRuZXdzCi0gICAgICAgIDU0MCwgIC8vIFVVQ1AKLSAgICAgICAgNTU2LCAgLy8gcmVtb3Rl
ZnMKLSAgICAgICAgNTYzLCAgLy8gTk5UUCtTU0wKLSAgICAgICAgNTg3LCAgLy8gRVNNVFAKLSAg
ICAgICAgNjAxLCAgLy8gc3lzbG9nLWNvbm4KLSAgICAgICAgNjM2LCAgLy8gTERBUCtTU0wKLSAg
ICAgICAgOTkzLCAgLy8gSU1BUCtTU0wKLSAgICAgICAgOTk1LCAgLy8gUE9QMytTU0wKLSAgICAg
ICAgMjA0OSwgLy8gTkZTCi0gICAgICAgIDQwNDUsIC8vIGxvY2tkCi0gICAgICAgIDYwMDAsIC8v
IFgxMQotICAgIH07Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQqIGNvbnN0IGJsb2NrZWRQb3J0
TGlzdEVuZCA9IGJsb2NrZWRQb3J0TGlzdAotICAgICAgICArIHNpemVvZihibG9ja2VkUG9ydExp
c3QpIC8gc2l6ZW9mKGJsb2NrZWRQb3J0TGlzdFswXSk7Ci0KLSAgICAvLyBJZiB0aGUgcG9ydCBp
cyBub3QgaW4gdGhlIGJsb2NrZWQgcG9ydCBsaXN0LCBhbGxvdyBpdC4KLSAgICBpZiAoIXN0ZDo6
YmluYXJ5X3NlYXJjaChibG9ja2VkUG9ydExpc3QsIGJsb2NrZWRQb3J0TGlzdEVuZCwgcG9ydCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gQWxsb3cgcG9ydHMgMjEgYW5kIDIyIGZv
ciBGVFAgVVJMcywgYXMgTW96aWxsYSBkb2VzLgotICAgIGlmICgocG9ydCA9PSAyMSB8fCBwb3J0
ID09IDIyKSAmJiByZXF1ZXN0LnVybCgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5zdGFydHNXaXRoKCJm
dHA6IiwgZmFsc2UpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEFsbG93IGFueSBw
b3J0IG51bWJlciBpbiBhIGZpbGUgVVJMLCBzaW5jZSB0aGUgcG9ydCBudW1iZXIgaXMgaWdub3Jl
ZC4KLSAgICBpZiAocmVxdWVzdC51cmwoKS5kZXByZWNhdGVkU3RyaW5nKCkuc3RhcnRzV2l0aCgi
ZmlsZToiLCBmYWxzZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlLmgJKHJldmlzaW9uIDI5NzIxKQorKysgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIFJlc291cmNlSGFuZGxlX2gKLSNkZWZpbmUgUmVzb3VyY2VIYW5k
bGVfaAotCi0jaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKLSNpbmNsdWRlICJI
VFRQSGVhZGVyTWFwLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi0KLSNpZiBQTEFURk9S
TShXSU4pCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgRFdPUkQ7Ci10eXBlZGVmIHVuc2lnbmVkIGxv
bmcgRFdPUkRfUFRSOwotdHlwZWRlZiB2b2lkKiBMUFZPSUQ7Ci10eXBlZGVmIExQVk9JRCBISU5U
RVJORVQ7Ci10eXBlZGVmIHVuc2lnbmVkIFdQQVJBTTsKLXR5cGVkZWYgbG9uZyBMUEFSQU07Ci10
eXBlZGVmIHN0cnVjdCBIV05EX18qIEhXTkQ7Ci10eXBlZGVmIF9XNjQgbG9uZyBMT05HX1BUUjsK
LXR5cGVkZWYgTE9OR19QVFIgTFJFU1VMVDsKLSNlbmRpZgotCi0KLSNpZiBQTEFURk9STShNQUMp
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgTlNE
YXRhOwotQGNsYXNzIE5TRXJyb3I7Ci1AY2xhc3MgTlNVUkxDb25uZWN0aW9uOwotQGNsYXNzIFdl
YkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGU7Ci0jZWxzZQotY2xhc3MgTlNEYXRhOwotY2xh
c3MgTlNFcnJvcjsKLWNsYXNzIE5TVVJMQ29ubmVjdGlvbjsKLWNsYXNzIFdlYkNvcmVSZXNvdXJj
ZUhhbmRsZUFzRGVsZWdhdGU7Ci10eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7Ci0jZW5k
aWYKLSNlbmRpZgotCi0jaWYgVVNFKENGTkVUV09SSykKLXR5cGVkZWYgc3RydWN0IF9DRlVSTENv
bm5lY3Rpb24qIENGVVJMQ29ubmVjdGlvblJlZjsKLXR5cGVkZWYgaW50IENGSFRUUENvb2tpZVN0
b3JhZ2VBY2NlcHRQb2xpY3k7Ci10eXBlZGVmIHN0cnVjdCBPcGFxdWVDRkhUVFBDb29raWVTdG9y
YWdlKiBDRkhUVFBDb29raWVTdG9yYWdlUmVmOwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7Ci1jbGFzcyBDcmVkZW50aWFsOwot
Y2xhc3MgRm9ybURhdGE7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIEtVUkw7Ci1jbGFzcyBSZXNvdXJj
ZUVycm9yOwotY2xhc3MgUmVzb3VyY2VIYW5kbGVDbGllbnQ7Ci1jbGFzcyBSZXNvdXJjZUhhbmRs
ZUludGVybmFsOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwotY2xhc3MgUmVzb3VyY2VSZXNwb25z
ZTsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLWNsYXNzIFN1YnJlc291cmNlTG9hZGVyOwotY2xhc3Mg
U3VicmVzb3VyY2VMb2FkZXJDbGllbnQ7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBU
aW1lcjsKLQotY2xhc3MgUmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNvdXJj
ZUhhbmRsZT4gewotcHJpdmF0ZToKLSAgICBSZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBz
aG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpOwotCi1wdWJs
aWM6Ci0gICAgLy8gRklYTUU6IHNob3VsZCBub3QgbmVlZCB0aGUgRnJhbWUKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFJlc291cmNlSGFuZGxlQ2xpZW50KiwgRnJhbWUqLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wg
c2hvdWxkQ29udGVudFNuaWZmLCBib29sIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlID0gZmFsc2Up
OwotCi0gICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjxj
aGFyPiYgZGF0YSwgRnJhbWUqIGZyYW1lKTsKLSAgICBzdGF0aWMgYm9vbCB3aWxsTG9hZEZyb21D
YWNoZShSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICAKLSAgICB+UmVzb3VyY2VIYW5kbGUoKTsKLQot
I2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09SSykKLSAgICB2b2lkIGRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwot
ICAgIHZvaWQgcmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiwgY29uc3QgQ3JlZGVudGlhbCYpOwotICAgIHZvaWQgcmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51
ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0gICAg
dm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
OwotI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgZGlkQ2FuY2VsQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSAgICBOU1VS
TENvbm5lY3Rpb24gKmNvbm5lY3Rpb24oKSBjb25zdDsKLSAgICBXZWJDb3JlUmVzb3VyY2VIYW5k
bGVBc0RlbGVnYXRlICpkZWxlZ2F0ZSgpOwotICAgIHZvaWQgcmVsZWFzZURlbGVnYXRlKCk7Ci0j
ZWxpZiBVU0UoQ0ZORVRXT1JLKQotICAgIHN0YXRpYyBDRlJ1bkxvb3BSZWYgbG9hZGVyUnVuTG9v
cCgpOwotICAgIENGVVJMQ29ubmVjdGlvblJlZiBjb25uZWN0aW9uKCkgY29uc3Q7Ci0gICAgQ0ZV
UkxDb25uZWN0aW9uUmVmIHJlbGVhc2VDb25uZWN0aW9uRm9yRG93bmxvYWQoKTsKLQotICAgIHN0
YXRpYyB2b2lkIHNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYp
OwotI2VuZGlmCi0gICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcmVkRGF0YSgpOwot
ICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQnVmZmVyZWREYXRhKCk7Ci0gICAgCi0jaWYgUExBVEZP
Uk0oTUFDKQotICAgIGlkIHJlbGVhc2VQcm94eSgpOwotI2VuZGlmCi0KLSNpZiBVU0UoV0lOSU5F
VCkKLSAgICB2b2lkIHNldEhhc1JlY2VpdmVkUmVzcG9uc2UoYm9vbCA9IHRydWUpOwotICAgIGJv
b2wgaGFzUmVjZWl2ZWRSZXNwb25zZSgpIGNvbnN0OwotICAgIHZvaWQgZmlsZUxvYWRUaW1lcihU
aW1lcjxSZXNvdXJjZUhhbmRsZT4qKTsKLSAgICB2b2lkIG9uSGFuZGxlQ3JlYXRlZChMUEFSQU0p
OwotICAgIHZvaWQgb25SZXF1ZXN0UmVkaXJlY3RlZChMUEFSQU0pOwotICAgIHZvaWQgb25SZXF1
ZXN0Q29tcGxldGUoTFBBUkFNKTsKLSAgICBmcmllbmQgdm9pZCBfX3N0ZGNhbGwgdHJhbnNmZXJK
b2JTdGF0dXNDYWxsYmFjayhISU5URVJORVQsIERXT1JEX1BUUiwgRFdPUkQsIExQVk9JRCwgRFdP
UkQpOwotICAgIGZyaWVuZCBMUkVTVUxUIF9fc3RkY2FsbCBSZXNvdXJjZUhhbmRsZVduZFByb2Mo
SFdORCwgdW5zaWduZWQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOwotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkKLSAgICBSZXNvdXJj
ZUhhbmRsZUludGVybmFsKiBnZXRJbnRlcm5hbCgpIHsgcmV0dXJuIGQuZ2V0KCk7IH0KLSNlbmRp
ZgotCi0gICAgLy8gVXNlZCB0byB3b3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0IHlvdSBkb24ndCBn
ZXQgYW55IG1vcmUgTlNVUkxDb25uZWN0aW9uIGNhbGxiYWNrcyB1bnRpbCB5b3UgcmV0dXJuIGZy
b20gdGhlIG9uZSB5b3UncmUgaW4uCi0gICAgc3RhdGljIGJvb2wgbG9hZHNCbG9ja2VkKCk7ICAg
IAotICAgIAotICAgIHZvaWQgY2xlYXJBdXRoZW50aWNhdGlvbigpOwotICAgIHZvaWQgY2FuY2Vs
KCk7Ci0KLSAgICAvLyBUaGUgY2xpZW50IG1heSBiZSAwLCBpbiB3aGljaCBjYXNlIG5vIGNhbGxi
YWNrcyB3aWxsIGJlIG1hZGUuCi0gICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCgpIGNv
bnN0OwotICAgIHZvaWQgc2V0Q2xpZW50KFJlc291cmNlSGFuZGxlQ2xpZW50Kik7Ci0KLSAgICB2
b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7Ci0gICAgICAKLSAgICBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QoKSBjb25zdDsKLQotICAgIHZvaWQgZmlyZUJsb2NrZWRGYWlsdXJlKFRp
bWVyPFJlc291cmNlSGFuZGxlPiopOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBib29sIHBvcnRB
bGxvd2VkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwotICAgIAotICAgIHZvaWQgc2NoZWR1bGVC
bG9ja2VkRmFpbHVyZSgpOwotCi0gICAgYm9vbCBzdGFydChGcmFtZSopOwotICAgICAgICAKLSAg
ICBPd25QdHI8UmVzb3VyY2VIYW5kbGVJbnRlcm5hbD4gZDsKLX07Ci0KLX0KLQotI2VuZGlmIC8v
IFJlc291cmNlSGFuZGxlX2gKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVC
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQmFz
ZS5jcHAJKHJldmlzaW9uIDI5NzIxKQkoZnJvbSBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlLmNwcDoyOTcyMSkKKysrIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVCYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1
ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5j
bHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Jlc291cmNlSGFuZGxl
OjpSZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNl
SGFuZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wgZGVmZXJzTG9hZGluZywKKyAgICAgICAgIGJvb2wg
c2hvdWxkQ29udGVudFNuaWZmLCBib29sIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKQorICAgIDog
ZChuZXcgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCh0aGlzLCByZXF1ZXN0LCBjbGllbnQsIGRlZmVy
c0xvYWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZiwgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpKQor
eworfQorCitQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRl
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNs
aWVudCwKKyAgICBGcmFtZSogZnJhbWUsIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRD
b250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpCit7CisgICAgUmVmUHRy
PFJlc291cmNlSGFuZGxlPiBuZXdIYW5kbGUobmV3IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNs
aWVudCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmLCBtaWdodERvd25sb2FkRnJv
bUhhbmRsZSkpOworCisgICAgaWYgKCFwb3J0QWxsb3dlZChyZXF1ZXN0KSkgeworICAgICAgICBu
ZXdIYW5kbGUtPnNjaGVkdWxlQmxvY2tlZEZhaWx1cmUoKTsKKyAgICAgICAgcmV0dXJuIG5ld0hh
bmRsZS5yZWxlYXNlKCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAobmV3SGFuZGxlLT5zdGFy
dChmcmFtZSkpCisgICAgICAgIHJldHVybiBuZXdIYW5kbGUucmVsZWFzZSgpOworCisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNjaGVkdWxlQmxvY2tlZEZhaWx1cmUo
KQoreworICAgIFRpbWVyPFJlc291cmNlSGFuZGxlPiogYmxvY2tlZFRpbWVyID0gbmV3IFRpbWVy
PFJlc291cmNlSGFuZGxlPih0aGlzLCAmUmVzb3VyY2VIYW5kbGU6OmZpcmVCbG9ja2VkRmFpbHVy
ZSk7CisgICAgYmxvY2tlZFRpbWVyLT5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OmZpcmVCbG9ja2VkRmFpbHVyZShUaW1lcjxSZXNvdXJjZUhhbmRsZT4qIHRpbWVy
KQoreworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPndhc0Jsb2NrZWQodGhp
cyk7CisgICAgZGVsZXRlIHRpbWVyOworfQorCitSZXNvdXJjZUhhbmRsZUNsaWVudCogUmVzb3Vy
Y2VIYW5kbGU6OmNsaWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPm1fY2xpZW50OworfQor
Cit2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnQoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNs
aWVudCkKK3sKKyAgICBkLT5tX2NsaWVudCA9IGNsaWVudDsKK30KKworY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiBSZXNvdXJjZUhhbmRsZTo6cmVxdWVzdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQt
Pm1fcmVxdWVzdDsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2xlYXJBdXRoZW50aWNhdGlv
bigpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGQtPm1fY3VycmVudE1hY0NoYWxsZW5nZSA9
IG5pbDsKKyNlbGlmIFBMQVRGT1JNKENGKQorICAgIGQtPm1fY3VycmVudENGQ2hhbGxlbmdlID0g
MDsKKyNlbmRpZgorICAgIGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZS5udWxsaWZ5KCk7Cit9CisK
K2Jvb2wgUmVzb3VyY2VIYW5kbGU6OnBvcnRBbGxvd2VkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCBwb3J0ID0gcmVxdWVzdC51cmwoKS5wb3J0
KCk7CisKKyAgICAvLyBTaW5jZSBtb3N0IFVSTHMgZG9uJ3QgaGF2ZSBhIHBvcnQsIHJldHVybiBl
YXJseSBmb3IgdGhlICJubyBwb3J0IiBjYXNlLgorICAgIGlmICghcG9ydCkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAvLyBUaGlzIGJsb2NrZWQgcG9ydCBsaXN0IG1hdGNoZXMgdGhlIHBv
cnQgYmxvY2tpbmcgdGhhdCBNb3ppbGxhIGltcGxlbWVudHMuCisgICAgLy8gU2VlIGh0dHA6Ly93
d3cubW96aWxsYS5vcmcvcHJvamVjdHMvbmV0bGliL1BvcnRCYW5uaW5nLmh0bWwgZm9yIG1vcmUg
aW5mb3JtYXRpb24uCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGJsb2NrZWRQb3J0
TGlzdFtdID0geworICAgICAgICAxLCAgICAvLyB0Y3BtdXgKKyAgICAgICAgNywgICAgLy8gZWNo
bworICAgICAgICA5LCAgICAvLyBkaXNjYXJkCisgICAgICAgIDExLCAgIC8vIHN5c3RhdAorICAg
ICAgICAxMywgICAvLyBkYXl0aW1lCisgICAgICAgIDE1LCAgIC8vIG5ldHN0YXQKKyAgICAgICAg
MTcsICAgLy8gcW90ZAorICAgICAgICAxOSwgICAvLyBjaGFyZ2VuCisgICAgICAgIDIwLCAgIC8v
IEZUUC1kYXRhCisgICAgICAgIDIxLCAgIC8vIEZUUC1jb250cm9sCisgICAgICAgIDIyLCAgIC8v
IFNTSAorICAgICAgICAyMywgICAvLyB0ZWxuZXQKKyAgICAgICAgMjUsICAgLy8gU01UUAorICAg
ICAgICAzNywgICAvLyB0aW1lCisgICAgICAgIDQyLCAgIC8vIG5hbWUKKyAgICAgICAgNDMsICAg
Ly8gbmljbmFtZQorICAgICAgICA1MywgICAvLyBkb21haW4KKyAgICAgICAgNzcsICAgLy8gcHJp
di1yanMKKyAgICAgICAgNzksICAgLy8gZmluZ2VyCisgICAgICAgIDg3LCAgIC8vIHR0eWxpbmsK
KyAgICAgICAgOTUsICAgLy8gc3VwZHVwCisgICAgICAgIDEwMSwgIC8vIGhvc3RyaWFtZQorICAg
ICAgICAxMDIsICAvLyBpc28tdHNhcAorICAgICAgICAxMDMsICAvLyBncHBpdG5wCisgICAgICAg
IDEwNCwgIC8vIGFjci1uZW1hCisgICAgICAgIDEwOSwgIC8vIFBPUDIKKyAgICAgICAgMTEwLCAg
Ly8gUE9QMworICAgICAgICAxMTEsICAvLyBzdW5ycGMKKyAgICAgICAgMTEzLCAgLy8gYXV0aAor
ICAgICAgICAxMTUsICAvLyBTRlRQCisgICAgICAgIDExNywgIC8vIHV1Y3AtcGF0aAorICAgICAg
ICAxMTksICAvLyBubnRwCisgICAgICAgIDEyMywgIC8vIE5UUAorICAgICAgICAxMzUsICAvLyBs
b2Mtc3J2IC8gZXBtYXAKKyAgICAgICAgMTM5LCAgLy8gbmV0YmlvcworICAgICAgICAxNDMsICAv
LyBJTUFQMgorICAgICAgICAxNzksICAvLyBCR1AKKyAgICAgICAgMzg5LCAgLy8gTERBUAorICAg
ICAgICA0NjUsICAvLyBTTVRQK1NTTAorICAgICAgICA1MTIsICAvLyBwcmludCAvIGV4ZWMKKyAg
ICAgICAgNTEzLCAgLy8gbG9naW4KKyAgICAgICAgNTE0LCAgLy8gc2hlbGwKKyAgICAgICAgNTE1
LCAgLy8gcHJpbnRlcgorICAgICAgICA1MjYsICAvLyB0ZW1wbworICAgICAgICA1MzAsICAvLyBj
b3VyaWVyCisgICAgICAgIDUzMSwgIC8vIENoYXQKKyAgICAgICAgNTMyLCAgLy8gbmV0bmV3cwor
ICAgICAgICA1NDAsICAvLyBVVUNQCisgICAgICAgIDU1NiwgIC8vIHJlbW90ZWZzCisgICAgICAg
IDU2MywgIC8vIE5OVFArU1NMCisgICAgICAgIDU4NywgIC8vIEVTTVRQCisgICAgICAgIDYwMSwg
IC8vIHN5c2xvZy1jb25uCisgICAgICAgIDYzNiwgIC8vIExEQVArU1NMCisgICAgICAgIDk5Mywg
IC8vIElNQVArU1NMCisgICAgICAgIDk5NSwgIC8vIFBPUDMrU1NMCisgICAgICAgIDIwNDksIC8v
IE5GUworICAgICAgICA0MDQ1LCAvLyBsb2NrZAorICAgICAgICA2MDAwLCAvLyBYMTEKKyAgICB9
OworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBjb25zdCBibG9ja2VkUG9ydExpc3RFbmQgPSBi
bG9ja2VkUG9ydExpc3QKKyAgICAgICAgKyBzaXplb2YoYmxvY2tlZFBvcnRMaXN0KSAvIHNpemVv
ZihibG9ja2VkUG9ydExpc3RbMF0pOworCisgICAgLy8gSWYgdGhlIHBvcnQgaXMgbm90IGluIHRo
ZSBibG9ja2VkIHBvcnQgbGlzdCwgYWxsb3cgaXQuCisgICAgaWYgKCFzdGQ6OmJpbmFyeV9zZWFy
Y2goYmxvY2tlZFBvcnRMaXN0LCBibG9ja2VkUG9ydExpc3RFbmQsIHBvcnQpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIC8vIEFsbG93IHBvcnRzIDIxIGFuZCAyMiBmb3IgRlRQIFVSTHMs
IGFzIE1vemlsbGEgZG9lcy4KKyAgICBpZiAoKHBvcnQgPT0gMjEgfHwgcG9ydCA9PSAyMikgJiYg
cmVxdWVzdC51cmwoKS5kZXByZWNhdGVkU3RyaW5nKCkuc3RhcnRzV2l0aCgiZnRwOiIsIGZhbHNl
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBBbGxvdyBhbnkgcG9ydCBudW1iZXIg
aW4gYSBmaWxlIFVSTCwgc2luY2UgdGhlIHBvcnQgbnVtYmVyIGlzIGlnbm9yZWQuCisgICAgaWYg
KHJlcXVlc3QudXJsKCkuZGVwcmVjYXRlZFN0cmluZygpLnN0YXJ0c1dpdGgoImZpbGU6IiwgZmFs
c2UpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyAgCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRs
ZUJhc2UuY3BwCShyZXZpc2lvbiAyOTcyMSkKKysrIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZUludGVybmFsLmgiCiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKQEAgLTM0LDEzICszMywxOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVJlc291cmNlSGFuZGxlOjpSZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wgZGVm
ZXJzTG9hZGluZywKLSAgICAgICAgIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIG1pZ2h0
RG93bmxvYWRGcm9tSGFuZGxlKQotICAgIDogZChuZXcgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCh0
aGlzLCByZXF1ZXN0LCBjbGllbnQsIGRlZmVyc0xvYWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZiwg
bWlnaHREb3dubG9hZEZyb21IYW5kbGUpKQoraW5saW5lIFJlc291cmNlSGFuZGxlJiBSZXNvdXJj
ZUhhbmRsZUJhc2U6OmFzUmVzb3VyY2VIYW5kbGUoKQogeworICAgIHJldHVybiAqc3RhdGljX2Nh
c3Q8UmVzb3VyY2VIYW5kbGUqPih0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRs
ZT4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsCitSZXNvdXJjZUhhbmRsZUJhc2U6OlJlc291
cmNlSGFuZGxlQmFzZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFu
ZGxlQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3JlcXVlc3QocmVxdWVzdCkKKyAgICAsIG1fY2xp
ZW50KGNsaWVudCkKK3sKK30KKworUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VI
YW5kbGVCYXNlOjpjcmVhdGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJj
ZUhhbmRsZUNsaWVudCogY2xpZW50LAogICAgIEZyYW1lKiBmcmFtZSwgYm9vbCBkZWZlcnNMb2Fk
aW5nLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBtaWdodERvd25sb2FkRnJvbUhhbmRs
ZSkKIHsKICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IG5ld0hhbmRsZShuZXcgUmVzb3VyY2VI
YW5kbGUocmVxdWVzdCwgY2xpZW50LCBkZWZlcnNMb2FkaW5nLCBzaG91bGRDb250ZW50U25pZmYs
IG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKSk7CkBAIC01Niw0NSArNjAsMjEgQEAgUGFzc1JlZlB0
cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5kbAogICAgIHJldHVybiAwOwogfQogCi12b2lk
IFJlc291cmNlSGFuZGxlOjpzY2hlZHVsZUJsb2NrZWRGYWlsdXJlKCkKK3ZvaWQgUmVzb3VyY2VI
YW5kbGVCYXNlOjpzY2hlZHVsZUJsb2NrZWRGYWlsdXJlKCkKIHsKLSAgICBUaW1lcjxSZXNvdXJj
ZUhhbmRsZT4qIGJsb2NrZWRUaW1lciA9IG5ldyBUaW1lcjxSZXNvdXJjZUhhbmRsZT4odGhpcywg
JlJlc291cmNlSGFuZGxlOjpmaXJlQmxvY2tlZEZhaWx1cmUpOworICAgIFRpbWVyPFJlc291cmNl
SGFuZGxlQmFzZT4qIGJsb2NrZWRUaW1lciA9IG5ldyBUaW1lcjxSZXNvdXJjZUhhbmRsZUJhc2U+
KHRoaXMsICZSZXNvdXJjZUhhbmRsZUJhc2U6OmZpcmVCbG9ja2VkRmFpbHVyZSk7CiAgICAgYmxv
Y2tlZFRpbWVyLT5zdGFydE9uZVNob3QoMCk7CisgICAgLy8gRklYTUU6IHdoYXQgaWYgd2UgYXJl
IGRlc3Ryb3llZCBiZWZvcmUgdGhpcyB0aW1lciBmaXJlcyE/CiB9CiAKLXZvaWQgUmVzb3VyY2VI
YW5kbGU6OmZpcmVCbG9ja2VkRmFpbHVyZShUaW1lcjxSZXNvdXJjZUhhbmRsZT4qIHRpbWVyKQor
dm9pZCBSZXNvdXJjZUhhbmRsZUJhc2U6OmZpcmVCbG9ja2VkRmFpbHVyZShUaW1lcjxSZXNvdXJj
ZUhhbmRsZUJhc2U+KiB0aW1lcikKIHsKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVu
dCgpLT53YXNCbG9ja2VkKHRoaXMpOworICAgICAgICBjbGllbnQoKS0+d2FzQmxvY2tlZCgmYXNS
ZXNvdXJjZUhhbmRsZSgpKTsKICAgICBkZWxldGUgdGltZXI7CiB9CiAKLVJlc291cmNlSGFuZGxl
Q2xpZW50KiBSZXNvdXJjZUhhbmRsZTo6Y2xpZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZC0+
bV9jbGllbnQ7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudChSZXNvdXJjZUhh
bmRsZUNsaWVudCogY2xpZW50KQotewotICAgIGQtPm1fY2xpZW50ID0gY2xpZW50OwotfQotCi1j
b25zdCBSZXNvdXJjZVJlcXVlc3QmIFJlc291cmNlSGFuZGxlOjpyZXF1ZXN0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZC0+bV9yZXF1ZXN0OwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlOjpjbGVh
ckF1dGhlbnRpY2F0aW9uKCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgZC0+bV9jdXJyZW50
TWFjQ2hhbGxlbmdlID0gbmlsOwotI2VsaWYgUExBVEZPUk0oQ0YpCi0gICAgZC0+bV9jdXJyZW50
Q0ZDaGFsbGVuZ2UgPSAwOwotI2VuZGlmCi0gICAgZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlLm51
bGxpZnkoKTsKLX0KLQotYm9vbCBSZXNvdXJjZUhhbmRsZTo6cG9ydEFsbG93ZWQoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorYm9vbCBSZXNvdXJjZUhhbmRsZUJhc2U6OnBvcnRBbGxv
d2VkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICB1bnNpZ25lZCBzaG9y
dCBwb3J0ID0gcmVxdWVzdC51cmwoKS5wb3J0KCk7CiAKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZUJhc2UuaAkocmV2aXNpb24gMjk3MjEpCShmcm9tIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaDoyOTcyMSkKKysrIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgUmVzb3VyY2VIYW5kbGVfaAorI2RlZmluZSBSZXNvdXJjZUhh
bmRsZV9oCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgorI2luY2x1ZGUg
IkhUVFBIZWFkZXJNYXAuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKKworI2lmIFBMQVRG
T1JNKFdJTikKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBEV09SRDsKK3R5cGVkZWYgdW5zaWduZWQg
bG9uZyBEV09SRF9QVFI7Cit0eXBlZGVmIHZvaWQqIExQVk9JRDsKK3R5cGVkZWYgTFBWT0lEIEhJ
TlRFUk5FVDsKK3R5cGVkZWYgdW5zaWduZWQgV1BBUkFNOwordHlwZWRlZiBsb25nIExQQVJBTTsK
K3R5cGVkZWYgc3RydWN0IEhXTkRfXyogSFdORDsKK3R5cGVkZWYgX1c2NCBsb25nIExPTkdfUFRS
OwordHlwZWRlZiBMT05HX1BUUiBMUkVTVUxUOworI2VuZGlmCisKKworI2lmIFBMQVRGT1JNKE1B
QykKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBO
U0RhdGE7CitAY2xhc3MgTlNFcnJvcjsKK0BjbGFzcyBOU1VSTENvbm5lY3Rpb247CitAY2xhc3Mg
V2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZTsKKyNlbHNlCitjbGFzcyBOU0RhdGE7Citj
bGFzcyBOU0Vycm9yOworY2xhc3MgTlNVUkxDb25uZWN0aW9uOworY2xhc3MgV2ViQ29yZVJlc291
cmNlSGFuZGxlQXNEZWxlZ2F0ZTsKK3R5cGVkZWYgc3RydWN0IG9iamNfb2JqZWN0ICppZDsKKyNl
bmRpZgorI2VuZGlmCisKKyNpZiBVU0UoQ0ZORVRXT1JLKQordHlwZWRlZiBzdHJ1Y3QgX0NGVVJM
Q29ubmVjdGlvbiogQ0ZVUkxDb25uZWN0aW9uUmVmOwordHlwZWRlZiBpbnQgQ0ZIVFRQQ29va2ll
U3RvcmFnZUFjY2VwdFBvbGljeTsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0
b3JhZ2UqIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKK2NsYXNzIENyZWRlbnRpYWw7
CitjbGFzcyBGb3JtRGF0YTsKK2NsYXNzIEZyYW1lOworY2xhc3MgS1VSTDsKK2NsYXNzIFJlc291
cmNlRXJyb3I7CitjbGFzcyBSZXNvdXJjZUhhbmRsZUNsaWVudDsKK2NsYXNzIFJlc291cmNlSGFu
ZGxlSW50ZXJuYWw7CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOworY2xhc3MgU2hhcmVkQnVmZmVyOworY2xhc3MgU3VicmVzb3VyY2VMb2FkZXI7CitjbGFz
cyBTdWJyZXNvdXJjZUxvYWRlckNsaWVudDsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNz
IFRpbWVyOworCitjbGFzcyBSZXNvdXJjZUhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc291
cmNlSGFuZGxlPiB7Citwcml2YXRlOgorICAgIFJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29s
IHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSk7CisKK3B1
YmxpYzoKKyAgICAvLyBGSVhNRTogc2hvdWxkIG5vdCBuZWVkIHRoZSBGcmFtZQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqLCBGcmFtZSosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9v
bCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUgPSBmYWxz
ZSk7CisKKyAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9y
PGNoYXI+JiBkYXRhLCBGcmFtZSogZnJhbWUpOworICAgIHN0YXRpYyBib29sIHdpbGxMb2FkRnJv
bUNhY2hlKFJlc291cmNlUmVxdWVzdCYpOworICAgIAorICAgIH5SZXNvdXJjZUhhbmRsZSgpOwor
CisjaWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRXT1JLKQorICAgIHZvaWQgZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7
CisgICAgdm9pZCByZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmLCBjb25zdCBDcmVkZW50aWFsJik7CisgICAgdm9pZCByZWNlaXZlZFJlcXVlc3RUb0NvbnRp
bnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAg
ICB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Jik7CisjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBkaWRDYW5jZWxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworICAgIE5T
VVJMQ29ubmVjdGlvbiAqY29ubmVjdGlvbigpIGNvbnN0OworICAgIFdlYkNvcmVSZXNvdXJjZUhh
bmRsZUFzRGVsZWdhdGUgKmRlbGVnYXRlKCk7CisgICAgdm9pZCByZWxlYXNlRGVsZWdhdGUoKTsK
KyNlbGlmIFVTRShDRk5FVFdPUkspCisgICAgc3RhdGljIENGUnVuTG9vcFJlZiBsb2FkZXJSdW5M
b29wKCk7CisgICAgQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm5lY3Rpb24oKSBjb25zdDsKKyAgICBD
RlVSTENvbm5lY3Rpb25SZWYgcmVsZWFzZUNvbm5lY3Rpb25Gb3JEb3dubG9hZCgpOworCisgICAg
c3RhdGljIHZvaWQgc2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5n
Jik7CisjZW5kaWYKKyAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyZWREYXRhKCk7
CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNCdWZmZXJlZERhdGEoKTsKKyAgICAKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgaWQgcmVsZWFzZVByb3h5KCk7CisjZW5kaWYKKworI2lmIFVTRShXSU5J
TkVUKQorICAgIHZvaWQgc2V0SGFzUmVjZWl2ZWRSZXNwb25zZShib29sID0gdHJ1ZSk7CisgICAg
Ym9vbCBoYXNSZWNlaXZlZFJlc3BvbnNlKCkgY29uc3Q7CisgICAgdm9pZCBmaWxlTG9hZFRpbWVy
KFRpbWVyPFJlc291cmNlSGFuZGxlPiopOworICAgIHZvaWQgb25IYW5kbGVDcmVhdGVkKExQQVJB
TSk7CisgICAgdm9pZCBvblJlcXVlc3RSZWRpcmVjdGVkKExQQVJBTSk7CisgICAgdm9pZCBvblJl
cXVlc3RDb21wbGV0ZShMUEFSQU0pOworICAgIGZyaWVuZCB2b2lkIF9fc3RkY2FsbCB0cmFuc2Zl
ckpvYlN0YXR1c0NhbGxiYWNrKEhJTlRFUk5FVCwgRFdPUkRfUFRSLCBEV09SRCwgTFBWT0lELCBE
V09SRCk7CisgICAgZnJpZW5kIExSRVNVTFQgX19zdGRjYWxsIFJlc291cmNlSGFuZGxlV25kUHJv
YyhIV05ELCB1bnNpZ25lZCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKQorICAgIFJlc291
cmNlSGFuZGxlSW50ZXJuYWwqIGdldEludGVybmFsKCkgeyByZXR1cm4gZC5nZXQoKTsgfQorI2Vu
ZGlmCisKKyAgICAvLyBVc2VkIHRvIHdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgeW91IGRvbid0
IGdldCBhbnkgbW9yZSBOU1VSTENvbm5lY3Rpb24gY2FsbGJhY2tzIHVudGlsIHlvdSByZXR1cm4g
ZnJvbSB0aGUgb25lIHlvdSdyZSBpbi4KKyAgICBzdGF0aWMgYm9vbCBsb2Fkc0Jsb2NrZWQoKTsg
ICAgCisgICAgCisgICAgdm9pZCBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CisgICAgdm9pZCBjYW5j
ZWwoKTsKKworICAgIC8vIFRoZSBjbGllbnQgbWF5IGJlIDAsIGluIHdoaWNoIGNhc2Ugbm8gY2Fs
bGJhY2tzIHdpbGwgYmUgbWFkZS4KKyAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRDbGllbnQoUmVzb3VyY2VIYW5kbGVDbGllbnQqKTsKKworICAg
IHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKKyAgICAgIAorICAgIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCgpIGNvbnN0OworCisgICAgdm9pZCBmaXJlQmxvY2tlZEZhaWx1cmUo
VGltZXI8UmVzb3VyY2VIYW5kbGU+Kik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgcG9y
dEFsbG93ZWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgCisgICAgdm9pZCBzY2hlZHVs
ZUJsb2NrZWRGYWlsdXJlKCk7CisKKyAgICBib29sIHN0YXJ0KEZyYW1lKik7CisgICAgICAgIAor
ICAgIE93blB0cjxSZXNvdXJjZUhhbmRsZUludGVybmFsPiBkOworfTsKKworfQorCisjZW5kaWYg
Ly8gUmVzb3VyY2VIYW5kbGVfaApJbmRleDogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRs
ZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQmFz
ZS5oCShyZXZpc2lvbiAyOTcyMSkKKysrIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVC
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcxICsyMywyMyBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CiAgKi8KIAotI2lmbmRlZiBSZXNvdXJjZUhhbmRsZV9oCi0jZGVmaW5lIFJlc291cmNlSGFuZGxl
X2gKKyNpZm5kZWYgUmVzb3VyY2VIYW5kbGVCYXNlX2gKKyNkZWZpbmUgUmVzb3VyY2VIYW5kbGVC
YXNlX2gKIAotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCi0jaW5jbHVkZSAi
SFRUUEhlYWRlck1hcC5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotCi0jaWYgUExBVEZP
Uk0oV0lOKQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIERXT1JEOwotdHlwZWRlZiB1bnNpZ25lZCBs
b25nIERXT1JEX1BUUjsKLXR5cGVkZWYgdm9pZCogTFBWT0lEOwotdHlwZWRlZiBMUFZPSUQgSElO
VEVSTkVUOwotdHlwZWRlZiB1bnNpZ25lZCBXUEFSQU07Ci10eXBlZGVmIGxvbmcgTFBBUkFNOwot
dHlwZWRlZiBzdHJ1Y3QgSFdORF9fKiBIV05EOwotdHlwZWRlZiBfVzY0IGxvbmcgTE9OR19QVFI7
Ci10eXBlZGVmIExPTkdfUFRSIExSRVNVTFQ7Ci0jZW5kaWYKLQotCi0jaWYgUExBVEZPUk0oTUFD
KQotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpZmRlZiBfX09CSkNfXwotQGNsYXNzIE5T
RGF0YTsKLUBjbGFzcyBOU0Vycm9yOwotQGNsYXNzIE5TVVJMQ29ubmVjdGlvbjsKLUBjbGFzcyBX
ZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlOwotI2Vsc2UKLWNsYXNzIE5TRGF0YTsKLWNs
YXNzIE5TRXJyb3I7Ci1jbGFzcyBOU1VSTENvbm5lY3Rpb247Ci1jbGFzcyBXZWJDb3JlUmVzb3Vy
Y2VIYW5kbGVBc0RlbGVnYXRlOwotdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QgKmlkOwotI2Vu
ZGlmCi0jZW5kaWYKLQotI2lmIFVTRShDRk5FVFdPUkspCi10eXBlZGVmIHN0cnVjdCBfQ0ZVUkxD
b25uZWN0aW9uKiBDRlVSTENvbm5lY3Rpb25SZWY7Ci10eXBlZGVmIGludCBDRkhUVFBDb29raWVT
dG9yYWdlQWNjZXB0UG9saWN5OwotdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ0ZIVFRQQ29va2llU3Rv
cmFnZSogQ0ZIVFRQQ29va2llU3RvcmFnZVJlZjsKLSNlbmRpZgorI2luY2x1ZGUgIlJlc291cmNl
UmVxdWVzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlOwotY2xhc3MgQ3JlZGVudGlhbDsKLWNsYXNzIEZvcm1EYXRhOwogY2xhc3MgRnJh
bWU7Ci1jbGFzcyBLVVJMOwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlSGFu
ZGxlOwogY2xhc3MgUmVzb3VyY2VIYW5kbGVDbGllbnQ7Ci1jbGFzcyBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKLWNsYXNzIFN1YnJlc291cmNlTG9hZGVyOwotY2xhc3MgU3Vi
cmVzb3VyY2VMb2FkZXJDbGllbnQ7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBUaW1l
cjsKIAotY2xhc3MgUmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNvdXJjZUhh
bmRsZT4gewotcHJpdmF0ZToKLSAgICBSZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91
bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpOwotCitjbGFzcyBS
ZXNvdXJjZUhhbmRsZUJhc2UgewogcHVibGljOgogICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IG5l
ZWQgdGhlIEZyYW1lCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0
ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIEZyYW1lKiwg
Ym9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBtaWdodERv
d25sb2FkRnJvbUhhbmRsZSA9IGZhbHNlKTsKQEAgLTk1LDQ4ICs0Nyw5IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBk
YXRhLCBGcmFtZSogZnJhbWUpOwogICAgIHN0YXRpYyBib29sIHdpbGxMb2FkRnJvbUNhY2hlKFJl
c291cmNlUmVxdWVzdCYpOwogICAgIAotICAgIH5SZXNvdXJjZUhhbmRsZSgpOwotCi0jaWYgUExB
VEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRXT1JLKQotICAgIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0gICAgdm9p
ZCByZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25z
dCBDcmVkZW50aWFsJik7Ci0gICAgdm9pZCByZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91
dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSAgICB2b2lkIHJl
Y2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0jZW5k
aWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwotICAgIE5TVVJMQ29ubmVj
dGlvbiAqY29ubmVjdGlvbigpIGNvbnN0OwotICAgIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVs
ZWdhdGUgKmRlbGVnYXRlKCk7Ci0gICAgdm9pZCByZWxlYXNlRGVsZWdhdGUoKTsKLSNlbGlmIFVT
RShDRk5FVFdPUkspCi0gICAgc3RhdGljIENGUnVuTG9vcFJlZiBsb2FkZXJSdW5Mb29wKCk7Ci0g
ICAgQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm5lY3Rpb24oKSBjb25zdDsKLSAgICBDRlVSTENvbm5l
Y3Rpb25SZWYgcmVsZWFzZUNvbm5lY3Rpb25Gb3JEb3dubG9hZCgpOwotCi0gICAgc3RhdGljIHZv
aWQgc2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJik7Ci0jZW5k
aWYKICAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyZWREYXRhKCk7CiAgICAgc3Rh
dGljIGJvb2wgc3VwcG9ydHNCdWZmZXJlZERhdGEoKTsKICAgICAKLSNpZiBQTEFURk9STShNQUMp
Ci0gICAgaWQgcmVsZWFzZVByb3h5KCk7Ci0jZW5kaWYKLQotI2lmIFVTRShXSU5JTkVUKQotICAg
IHZvaWQgc2V0SGFzUmVjZWl2ZWRSZXNwb25zZShib29sID0gdHJ1ZSk7Ci0gICAgYm9vbCBoYXNS
ZWNlaXZlZFJlc3BvbnNlKCkgY29uc3Q7Ci0gICAgdm9pZCBmaWxlTG9hZFRpbWVyKFRpbWVyPFJl
c291cmNlSGFuZGxlPiopOwotICAgIHZvaWQgb25IYW5kbGVDcmVhdGVkKExQQVJBTSk7Ci0gICAg
dm9pZCBvblJlcXVlc3RSZWRpcmVjdGVkKExQQVJBTSk7Ci0gICAgdm9pZCBvblJlcXVlc3RDb21w
bGV0ZShMUEFSQU0pOwotICAgIGZyaWVuZCB2b2lkIF9fc3RkY2FsbCB0cmFuc2ZlckpvYlN0YXR1
c0NhbGxiYWNrKEhJTlRFUk5FVCwgRFdPUkRfUFRSLCBEV09SRCwgTFBWT0lELCBEV09SRCk7Ci0g
ICAgZnJpZW5kIExSRVNVTFQgX19zdGRjYWxsIFJlc291cmNlSGFuZGxlV25kUHJvYyhIV05ELCB1
bnNpZ25lZCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKQotICAgIFJlc291cmNlSGFuZGxl
SW50ZXJuYWwqIGdldEludGVybmFsKCkgeyByZXR1cm4gZC5nZXQoKTsgfQotI2VuZGlmCi0KICAg
ICAvLyBVc2VkIHRvIHdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgeW91IGRvbid0IGdldCBhbnkg
bW9yZSBOU1VSTENvbm5lY3Rpb24gY2FsbGJhY2tzIHVudGlsIHlvdSByZXR1cm4gZnJvbSB0aGUg
b25lIHlvdSdyZSBpbi4KICAgICBzdGF0aWMgYm9vbCBsb2Fkc0Jsb2NrZWQoKTsgICAgCiAgICAg
CkBAIC0xNDQsMjUgKzU3LDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbmNlbCgpOwogCiAgICAg
Ly8gVGhlIGNsaWVudCBtYXkgYmUgMCwgaW4gd2hpY2ggY2FzZSBubyBjYWxsYmFja3Mgd2lsbCBi
ZSBtYWRlLgotICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQoKSBjb25zdDsKLSAgICB2
b2lkIHNldENsaWVudChSZXNvdXJjZUhhbmRsZUNsaWVudCopOworICAgIFJlc291cmNlSGFuZGxl
Q2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorICAgIHZvaWQgc2V0
Q2xpZW50KFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7
IH0KIAogICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKICAgICAgIAotICAgIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCgpIGNvbnN0OworICAgIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdDsgfQogCi0gICAgdm9pZCBm
aXJlQmxvY2tlZEZhaWx1cmUoVGltZXI8UmVzb3VyY2VIYW5kbGU+Kik7CisgICAgdm9pZCBmaXJl
QmxvY2tlZEZhaWx1cmUoVGltZXI8UmVzb3VyY2VIYW5kbGVCYXNlPiopOwogCi1wcml2YXRlOgor
cHJvdGVjdGVkOgogICAgIHN0YXRpYyBib29sIHBvcnRBbGxvd2VkKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYpOworCisgICAgUmVzb3VyY2VIYW5kbGVCYXNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCk7CiAgICAgCiAgICAgdm9pZCBz
Y2hlZHVsZUJsb2NrZWRGYWlsdXJlKCk7CiAKLSAgICBib29sIHN0YXJ0KEZyYW1lKik7Ci0gICAg
ICAgIAotICAgIE93blB0cjxSZXNvdXJjZUhhbmRsZUludGVybmFsPiBkOworICAgIFJlc291cmNl
SGFuZGxlJiBhc1Jlc291cmNlSGFuZGxlKCk7CisKKyAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXF1
ZXN0OworICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBtX2NsaWVudDsKIH07CiAKIH0KIAotI2Vu
ZGlmIC8vIFJlc291cmNlSGFuZGxlX2gKKyNlbmRpZiAvLyBSZXNvdXJjZUhhbmRsZUJhc2VfaApJ
bmRleDogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgJKHJldmlzaW9u
IDI5NzIxKQorKysgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTgyICswLDAgQEAKLS8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMt
b2Zmc2V0OiA0IC0qLQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBSZXNvdXJj
ZUhhbmRsZUludGVybmFsX2gKLSNkZWZpbmUgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbF9oCi0KLSNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5oIgotCi0jaWYgVVNFKENGTkVUV09SSykKLSNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxD
b25uZWN0aW9uUHJpdi5oPgotI2VuZGlmCi0KLSNpZiBVU0UoV0lOSU5FVCkKLSNpbmNsdWRlIDx3
aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlICJUaW1lci5oIgotI2Vu
ZGlmCi0KLSNpZiBVU0UoQ1VSTCkKLSNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KLSNlbmRpZgotCi0j
aWYgUExBVEZPUk0oUVQpCi1jbGFzcyBRV2ViRnJhbWU7Ci1jbGFzcyBRV2ViTmV0d29ya0pvYjsK
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFFOZXR3b3JrUmVwbHlIYW5kbGVyOwotfQotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi0jaWZkZWYgX19PQkpDX18KLUBjbGFzcyBOU1VSTENv
bm5lY3Rpb247Ci0jZWxzZQotY2xhc3MgTlNVUkxDb25uZWN0aW9uOwotI2VuZGlmCi0jZW5kaWYK
LQotLy8gVGhlIGFsbG9jYXRpb25zIGFuZCByZWxlYXNlcyBpbiBSZXNvdXJjZUhhbmRsZUludGVy
bmFsIGFyZQotLy8gQ29jb2EtZXhjZXB0aW9uLWZyZWUgKGVpdGhlciBzaW1wbGUgRm91bmRhdGlv
biBjbGFzc2VzIG9yCi0vLyBXZWJDb3JlUmVzb3VyY2VMb2FkZXJJbXAgd2hpY2ggYXZvaWRzIGRv
aW5nIHdvcmsgaW4gZGVhbGxvYykuCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBS
ZXNvdXJjZUhhbmRsZUNsaWVudDsKLQotICAgIGNsYXNzIFJlc291cmNlSGFuZGxlSW50ZXJuYWwg
OiBOb25jb3B5YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAgICBSZXNvdXJjZUhhbmRsZUludGVy
bmFsKFJlc291cmNlSGFuZGxlKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGMsIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91
bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpCi0gICAgICAgICAg
ICA6IG1fY2xpZW50KGMpCi0gICAgICAgICAgICAsIG1fcmVxdWVzdChyZXF1ZXN0KQotICAgICAg
ICAgICAgLCBzdGF0dXMoMCkKLSAgICAgICAgICAgICwgbV9kZWZlcnNMb2FkaW5nKGRlZmVyc0xv
YWRpbmcpCi0gICAgICAgICAgICAsIG1fc2hvdWxkQ29udGVudFNuaWZmKHNob3VsZENvbnRlbnRT
bmlmZikKLSAgICAgICAgICAgICwgbV9taWdodERvd25sb2FkRnJvbUhhbmRsZShtaWdodERvd25s
b2FkRnJvbUhhbmRsZSkKLSNpZiBVU0UoQ0ZORVRXT1JLKQotICAgICAgICAgICAgLCBtX2Nvbm5l
Y3Rpb24oMCkKLSNlbmRpZgotI2lmIFVTRShXSU5JTkVUKQotICAgICAgICAgICAgLCBtX2ZpbGVI
YW5kbGUoSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgICAgICAsIG1fZmlsZUxvYWRUaW1l
cihsb2FkZXIsICZSZXNvdXJjZUhhbmRsZTo6ZmlsZUxvYWRUaW1lcikKLSAgICAgICAgICAgICwg
bV9yZXNvdXJjZUhhbmRsZSgwKQotICAgICAgICAgICAgLCBtX3NlY29uZGFyeUhhbmRsZSgwKQot
ICAgICAgICAgICAgLCBtX2pvYklkKDApCi0gICAgICAgICAgICAsIG1fdGhyZWFkSWQoMCkKLSAg
ICAgICAgICAgICwgbV93cml0aW5nKGZhbHNlKQotICAgICAgICAgICAgLCBtX2Zvcm1EYXRhU3Ry
aW5nKDApCi0gICAgICAgICAgICAsIG1fZm9ybURhdGFMZW5ndGgoMCkKLSAgICAgICAgICAgICwg
bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUoMCkKLSAgICAgICAgICAgICwgbV9oYXNSZWNlaXZlZFJl
c3BvbnNlKGZhbHNlKQotICAgICAgICAgICAgLCBtX3Jlc2VuZChmYWxzZSkKLSNlbmRpZgotI2lm
IFVTRShDVVJMKQotICAgICAgICAgICAgLCBtX2hhbmRsZSgwKQotICAgICAgICAgICAgLCBtX3Vy
bCgwKQotICAgICAgICAgICAgLCBtX2N1c3RvbUhlYWRlcnMoMCkKLSAgICAgICAgICAgICwgbV9j
YW5jZWxsZWQoZmFsc2UpCi0gICAgICAgICAgICAsIG1fZmlsZSgwKQotICAgICAgICAgICAgLCBt
X2Zvcm1EYXRhRWxlbWVudEluZGV4KDApCi0gICAgICAgICAgICAsIG1fZm9ybURhdGFFbGVtZW50
RGF0YU9mZnNldCgwKQotI2VuZGlmCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgICAgICAgICAsIG1f
am9iKDApCi0gICAgICAgICAgICAsIG1fZnJhbWUoMCkKLSNlbmRpZgotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICAgICAgICAgICwgbV9jdXJyZW50TWFjQ2hhbGxlbmdlKG5pbCkKLSNlbGlmIFVTRShD
Rk5FVFdPUkspCi0gICAgICAgICAgICAsIG1fY3VycmVudENGQ2hhbGxlbmdlKDApCi0jZW5kaWYK
LSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB+UmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbCgpOwotCi0gICAgICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQoKSB7IHJl
dHVybiBtX2NsaWVudDsgfQotICAgICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogbV9jbGllbnQ7
Ci0gICAgICAgIAotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwotICAgICAgICAK
LSAgICAgICAgaW50IHN0YXR1czsKLQotICAgICAgICBib29sIG1fZGVmZXJzTG9hZGluZzsKLSAg
ICAgICAgYm9vbCBtX3Nob3VsZENvbnRlbnRTbmlmZjsKLSAgICAgICAgYm9vbCBtX21pZ2h0RG93
bmxvYWRGcm9tSGFuZGxlOwotI2lmIFVTRShDRk5FVFdPUkspCi0gICAgICAgIFJldGFpblB0cjxD
RlVSTENvbm5lY3Rpb25SZWY+IG1fY29ubmVjdGlvbjsKLSNlbGlmIFBMQVRGT1JNKE1BQykKLSAg
ICAgICAgUmV0YWluUHRyPE5TVVJMQ29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwotICAgICAgICBS
ZXRhaW5QdHI8V2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZT4gbV9kZWxlZ2F0ZTsKLSAg
ICAgICAgUmV0YWluUHRyPGlkPiBtX3Byb3h5OwotI2VuZGlmCi0jaWYgVVNFKFdJTklORVQpCi0g
ICAgICAgIEhBTkRMRSBtX2ZpbGVIYW5kbGU7Ci0gICAgICAgIFRpbWVyPFJlc291cmNlSGFuZGxl
PiBtX2ZpbGVMb2FkVGltZXI7Ci0gICAgICAgIEhJTlRFUk5FVCBtX3Jlc291cmNlSGFuZGxlOwot
ICAgICAgICBISU5URVJORVQgbV9zZWNvbmRhcnlIYW5kbGU7Ci0gICAgICAgIHVuc2lnbmVkIG1f
am9iSWQ7Ci0gICAgICAgIERXT1JEIG1fdGhyZWFkSWQ7Ci0gICAgICAgIGJvb2wgbV93cml0aW5n
OwotICAgICAgICBjaGFyKiBtX2Zvcm1EYXRhU3RyaW5nOwotICAgICAgICBpbnQgbV9mb3JtRGF0
YUxlbmd0aDsKLSAgICAgICAgaW50IG1fYnl0ZXNSZW1haW5pbmdUb1dyaXRlOwotICAgICAgICBT
dHJpbmcgbV9wb3N0UmVmZXJyZXI7Ci0gICAgICAgIGJvb2wgbV9oYXNSZWNlaXZlZFJlc3BvbnNl
OwotICAgICAgICBib29sIG1fcmVzZW5kOwotI2VuZGlmCi0jaWYgVVNFKENVUkwpCi0gICAgICAg
IENVUkwqIG1faGFuZGxlOwotICAgICAgICBjaGFyKiBtX3VybDsKLSAgICAgICAgc3RydWN0IGN1
cmxfc2xpc3QqIG1fY3VzdG9tSGVhZGVyczsgICAgICAgIAotICAgICAgICBSZXNvdXJjZVJlc3Bv
bnNlIG1fcmVzcG9uc2U7Ci0gICAgICAgIGJvb2wgbV9jYW5jZWxsZWQ7Ci0KLSAgICAgICAgRklM
RSogbV9maWxlOwotICAgICAgICBzaXplX3QgbV9mb3JtRGF0YUVsZW1lbnRJbmRleDsKLSAgICAg
ICAgc2l6ZV90IG1fZm9ybURhdGFFbGVtZW50RGF0YU9mZnNldDsKLSAgICAgICAgVmVjdG9yPGNo
YXI+IG1fcG9zdEJ5dGVzOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oUVQpCi0jaWYgUVRfVkVSU0lP
TiA8IDB4MDQwNDAwCi0gICAgICAgIFFXZWJOZXR3b3JrSm9iKiBtX2pvYjsKLSNlbHNlCi0gICAg
ICAgIFFOZXR3b3JrUmVwbHlIYW5kbGVyKiBtX2pvYjsKLSNlbmRpZgotICAgICAgICBRV2ViRnJh
bWUqIG1fZnJhbWU7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIE5TVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgKm1fY3VycmVudE1hY0NoYWxsZW5nZTsKLSNlbmRpZgotI2lm
IFVTRShDRk5FVFdPUkspCi0gICAgICAgIENGVVJMQXV0aENoYWxsZW5nZVJlZiBtX2N1cnJlbnRD
RkNoYWxsZW5nZTsKLSNlbmRpZgotICAgICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBtX2N1
cnJlbnRXZWJDaGFsbGVuZ2U7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gUmVzb3VyY2VIYW5kbGVJbnRlcm5hbF9oCkluZGV4OiBwbGF0Zm9ybS9uZXR3b3Jr
L21hYy9SZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL25ldHdvcmsvbWFj
L1Jlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDI5NzIxKQkoZnJvbSBwbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmg6Mjk3MjEpCisrKyBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJj
ZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFJlc291cmNlSGFuZGxlX2gKKyNkZWZpbmUgUmVzb3VyY2VI
YW5kbGVfaAorCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNsdWRl
ICJIVFRQSGVhZGVyTWFwLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCisKKyNpZiBQTEFU
Rk9STShXSU4pCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgRFdPUkQ7Cit0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgRFdPUkRfUFRSOwordHlwZWRlZiB2b2lkKiBMUFZPSUQ7Cit0eXBlZGVmIExQVk9JRCBI
SU5URVJORVQ7Cit0eXBlZGVmIHVuc2lnbmVkIFdQQVJBTTsKK3R5cGVkZWYgbG9uZyBMUEFSQU07
Cit0eXBlZGVmIHN0cnVjdCBIV05EX18qIEhXTkQ7Cit0eXBlZGVmIF9XNjQgbG9uZyBMT05HX1BU
UjsKK3R5cGVkZWYgTE9OR19QVFIgTFJFU1VMVDsKKyNlbmRpZgorCisKKyNpZiBQTEFURk9STShN
QUMpCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2lmZGVmIF9fT0JKQ19fCitAY2xhc3Mg
TlNEYXRhOworQGNsYXNzIE5TRXJyb3I7CitAY2xhc3MgTlNVUkxDb25uZWN0aW9uOworQGNsYXNz
IFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGU7CisjZWxzZQorY2xhc3MgTlNEYXRhOwor
Y2xhc3MgTlNFcnJvcjsKK2NsYXNzIE5TVVJMQ29ubmVjdGlvbjsKK2NsYXNzIFdlYkNvcmVSZXNv
dXJjZUhhbmRsZUFzRGVsZWdhdGU7Cit0eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7Cisj
ZW5kaWYKKyNlbmRpZgorCisjaWYgVVNFKENGTkVUV09SSykKK3R5cGVkZWYgc3RydWN0IF9DRlVS
TENvbm5lY3Rpb24qIENGVVJMQ29ubmVjdGlvblJlZjsKK3R5cGVkZWYgaW50IENGSFRUUENvb2tp
ZVN0b3JhZ2VBY2NlcHRQb2xpY3k7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVDRkhUVFBDb29raWVT
dG9yYWdlKiBDRkhUVFBDb29raWVTdG9yYWdlUmVmOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CitjbGFzcyBDcmVkZW50aWFs
OworY2xhc3MgRm9ybURhdGE7CitjbGFzcyBGcmFtZTsKK2NsYXNzIEtVUkw7CitjbGFzcyBSZXNv
dXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VIYW5kbGVDbGllbnQ7CitjbGFzcyBSZXNvdXJjZUhh
bmRsZUludGVybmFsOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgUmVzb3VyY2VSZXNw
b25zZTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKK2NsYXNzIFN1YnJlc291cmNlTG9hZGVyOworY2xh
c3MgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQ7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFz
cyBUaW1lcjsKKworY2xhc3MgUmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNv
dXJjZUhhbmRsZT4geworcHJpdmF0ZToKKyAgICBSZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9v
bCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpOworCitw
dWJsaWM6CisgICAgLy8gRklYTUU6IHNob3VsZCBub3QgbmVlZCB0aGUgRnJhbWUKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlKGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KiwgRnJhbWUqLCBib29sIGRlZmVyc0xvYWRpbmcsIGJv
b2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlID0gZmFs
c2UpOworCisgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rv
cjxjaGFyPiYgZGF0YSwgRnJhbWUqIGZyYW1lKTsKKyAgICBzdGF0aWMgYm9vbCB3aWxsTG9hZEZy
b21DYWNoZShSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICAKKyAgICB+UmVzb3VyY2VIYW5kbGUoKTsK
KworI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09SSykKKyAgICB2b2lkIGRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
OworICAgIHZvaWQgcmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiwgY29uc3QgQ3JlZGVudGlhbCYpOworICAgIHZvaWQgcmVjZWl2ZWRSZXF1ZXN0VG9Db250
aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Cisg
ICAgdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYpOworI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgZGlkQ2FuY2VsQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICBO
U1VSTENvbm5lY3Rpb24gKmNvbm5lY3Rpb24oKSBjb25zdDsKKyAgICBXZWJDb3JlUmVzb3VyY2VI
YW5kbGVBc0RlbGVnYXRlICpkZWxlZ2F0ZSgpOworICAgIHZvaWQgcmVsZWFzZURlbGVnYXRlKCk7
CisjZWxpZiBVU0UoQ0ZORVRXT1JLKQorICAgIHN0YXRpYyBDRlJ1bkxvb3BSZWYgbG9hZGVyUnVu
TG9vcCgpOworICAgIENGVVJMQ29ubmVjdGlvblJlZiBjb25uZWN0aW9uKCkgY29uc3Q7CisgICAg
Q0ZVUkxDb25uZWN0aW9uUmVmIHJlbGVhc2VDb25uZWN0aW9uRm9yRG93bmxvYWQoKTsKKworICAg
IHN0YXRpYyB2b2lkIHNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmlu
ZyYpOworI2VuZGlmCisgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcmVkRGF0YSgp
OworICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQnVmZmVyZWREYXRhKCk7CisgICAgCisjaWYgUExB
VEZPUk0oTUFDKQorICAgIGlkIHJlbGVhc2VQcm94eSgpOworI2VuZGlmCisKKyNpZiBVU0UoV0lO
SU5FVCkKKyAgICB2b2lkIHNldEhhc1JlY2VpdmVkUmVzcG9uc2UoYm9vbCA9IHRydWUpOworICAg
IGJvb2wgaGFzUmVjZWl2ZWRSZXNwb25zZSgpIGNvbnN0OworICAgIHZvaWQgZmlsZUxvYWRUaW1l
cihUaW1lcjxSZXNvdXJjZUhhbmRsZT4qKTsKKyAgICB2b2lkIG9uSGFuZGxlQ3JlYXRlZChMUEFS
QU0pOworICAgIHZvaWQgb25SZXF1ZXN0UmVkaXJlY3RlZChMUEFSQU0pOworICAgIHZvaWQgb25S
ZXF1ZXN0Q29tcGxldGUoTFBBUkFNKTsKKyAgICBmcmllbmQgdm9pZCBfX3N0ZGNhbGwgdHJhbnNm
ZXJKb2JTdGF0dXNDYWxsYmFjayhISU5URVJORVQsIERXT1JEX1BUUiwgRFdPUkQsIExQVk9JRCwg
RFdPUkQpOworICAgIGZyaWVuZCBMUkVTVUxUIF9fc3RkY2FsbCBSZXNvdXJjZUhhbmRsZVduZFBy
b2MoSFdORCwgdW5zaWduZWQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOworI2VuZGlmCisKKyNp
ZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkKKyAgICBSZXNv
dXJjZUhhbmRsZUludGVybmFsKiBnZXRJbnRlcm5hbCgpIHsgcmV0dXJuIGQuZ2V0KCk7IH0KKyNl
bmRpZgorCisgICAgLy8gVXNlZCB0byB3b3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0IHlvdSBkb24n
dCBnZXQgYW55IG1vcmUgTlNVUkxDb25uZWN0aW9uIGNhbGxiYWNrcyB1bnRpbCB5b3UgcmV0dXJu
IGZyb20gdGhlIG9uZSB5b3UncmUgaW4uCisgICAgc3RhdGljIGJvb2wgbG9hZHNCbG9ja2VkKCk7
ICAgIAorICAgIAorICAgIHZvaWQgY2xlYXJBdXRoZW50aWNhdGlvbigpOworICAgIHZvaWQgY2Fu
Y2VsKCk7CisKKyAgICAvLyBUaGUgY2xpZW50IG1heSBiZSAwLCBpbiB3aGljaCBjYXNlIG5vIGNh
bGxiYWNrcyB3aWxsIGJlIG1hZGUuCisgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCgp
IGNvbnN0OworICAgIHZvaWQgc2V0Q2xpZW50KFJlc291cmNlSGFuZGxlQ2xpZW50Kik7CisKKyAg
ICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CisgICAgICAKKyAgICBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QoKSBjb25zdDsKKworICAgIHZvaWQgZmlyZUJsb2NrZWRGYWlsdXJl
KFRpbWVyPFJlc291cmNlSGFuZGxlPiopOworCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHBv
cnRBbGxvd2VkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworICAgIAorICAgIHZvaWQgc2NoZWR1
bGVCbG9ja2VkRmFpbHVyZSgpOworCisgICAgYm9vbCBzdGFydChGcmFtZSopOworICAgICAgICAK
KyAgICBPd25QdHI8UmVzb3VyY2VIYW5kbGVJbnRlcm5hbD4gZDsKK307CisKK30KKworI2VuZGlm
IC8vIFJlc291cmNlSGFuZGxlX2gKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNl
SGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5k
bGUuaAkocmV2aXNpb24gMjk3MjEpCisrKyBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhh
bmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNDEgKzI2LDYwIEBACiAjaWZuZGVmIFJlc291
cmNlSGFuZGxlX2gKICNkZWZpbmUgUmVzb3VyY2VIYW5kbGVfaAogCisjaW5jbHVkZSAiUmVzb3Vy
Y2VIYW5kbGVCYXNlLmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKLSNp
bmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgogCi0KLSNp
ZiBQTEFURk9STShXSU4pCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgRFdPUkQ7Ci10eXBlZGVmIHVu
c2lnbmVkIGxvbmcgRFdPUkRfUFRSOwotdHlwZWRlZiB2b2lkKiBMUFZPSUQ7Ci10eXBlZGVmIExQ
Vk9JRCBISU5URVJORVQ7Ci10eXBlZGVmIHVuc2lnbmVkIFdQQVJBTTsKLXR5cGVkZWYgbG9uZyBM
UEFSQU07Ci10eXBlZGVmIHN0cnVjdCBIV05EX18qIEhXTkQ7Ci10eXBlZGVmIF9XNjQgbG9uZyBM
T05HX1BUUjsKLXR5cGVkZWYgTE9OR19QVFIgTFJFU1VMVDsKLSNlbmRpZgotCi0KLSNpZiBQTEFU
Rk9STShNQUMpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCiAjaWZkZWYgX19PQkpDX18K
LUBjbGFzcyBOU0RhdGE7Ci1AY2xhc3MgTlNFcnJvcjsKIEBjbGFzcyBOU1VSTENvbm5lY3Rpb247
CiBAY2xhc3MgV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZTsKICNlbHNlCi1jbGFzcyBO
U0RhdGE7Ci1jbGFzcyBOU0Vycm9yOwogY2xhc3MgTlNVUkxDb25uZWN0aW9uOwogY2xhc3MgV2Vi
Q29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZTsKIHR5cGVkZWYgc3RydWN0IG9iamNfb2JqZWN0
ICppZDsKICNlbmRpZgotI2VuZGlmCi0KLSNpZiBVU0UoQ0ZORVRXT1JLKQotdHlwZWRlZiBzdHJ1
Y3QgX0NGVVJMQ29ubmVjdGlvbiogQ0ZVUkxDb25uZWN0aW9uUmVmOwotdHlwZWRlZiBpbnQgQ0ZI
VFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeTsKLXR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRU
UENvb2tpZVN0b3JhZ2UqIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7Ci0jZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKIGNsYXNzIENy
ZWRlbnRpYWw7Ci1jbGFzcyBGb3JtRGF0YTsKIGNsYXNzIEZyYW1lOwotY2xhc3MgS1VSTDsKLWNs
YXNzIFJlc291cmNlRXJyb3I7CiBjbGFzcyBSZXNvdXJjZUhhbmRsZUNsaWVudDsKLWNsYXNzIFJl
c291cmNlSGFuZGxlSW50ZXJuYWw7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci1jbGFzcyBSZXNv
dXJjZVJlc3BvbnNlOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU3VicmVzb3VyY2VMb2Fk
ZXI7Ci1jbGFzcyBTdWJyZXNvdXJjZUxvYWRlckNsaWVudDsKLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGNsYXNzIFRpbWVyOwotCi1jbGFzcyBSZXNvdXJjZUhhbmRsZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFJlc291cmNlSGFuZGxlPiB7Ci1wcml2YXRlOgotICAgIFJlc291cmNlSGFuZGxlKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBkZWZlcnNMb2Fk
aW5nLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBtaWdodERvd25sb2FkRnJvbUhhbmRs
ZSk7CiAKK2NsYXNzIFJlc291cmNlSGFuZGxlIDogcHVibGljIFJlc291cmNlSGFuZGxlQmFzZSwg
cHVibGljIFJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5kbGU+IHsKIHB1YmxpYzoKLSAgICAvLyBGSVhN
RTogc2hvdWxkIG5vdCBuZWVkIHRoZSBGcmFtZQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlc291
cmNlSGFuZGxlPiBjcmVhdGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVD
bGllbnQqLCBGcmFtZSosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50U25p
ZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUgPSBmYWxzZSk7Ci0KLSAgICBzdGF0aWMg
dm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJl
c291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhLCBGcmFt
ZSogZnJhbWUpOwotICAgIHN0YXRpYyBib29sIHdpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVx
dWVzdCYpOwotICAgIAogICAgIH5SZXNvdXJjZUhhbmRsZSgpOwogCi0jaWYgUExBVEZPUk0oTUFD
KSB8fCBVU0UoQ0ZORVRXT1JLKQogICAgIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAgICAgdm9pZCByZWNlaXZl
ZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDcmVkZW50
aWFsJik7CiAgICAgdm9pZCByZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRp
YWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICB2b2lkIHJlY2VpdmVkQ2Fu
Y2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0jZW5kaWYKLSNpZiBQ
TEFURk9STShNQUMpCisKICAgICB2b2lkIGRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAgICAgTlNVUkxDb25uZWN0aW9uICpj
b25uZWN0aW9uKCkgY29uc3Q7CiAgICAgV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSAq
ZGVsZWdhdGUoKTsKICAgICB2b2lkIHJlbGVhc2VEZWxlZ2F0ZSgpOwotI2VsaWYgVVNFKENGTkVU
V09SSykKLSAgICBzdGF0aWMgQ0ZSdW5Mb29wUmVmIGxvYWRlclJ1bkxvb3AoKTsKLSAgICBDRlVS
TENvbm5lY3Rpb25SZWYgY29ubmVjdGlvbigpIGNvbnN0OwotICAgIENGVVJMQ29ubmVjdGlvblJl
ZiByZWxlYXNlQ29ubmVjdGlvbkZvckRvd25sb2FkKCk7CiAKLSAgICBzdGF0aWMgdm9pZCBzZXRI
b3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmKTsKLSNlbmRpZgotICAg
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXJlZERhdGEoKTsKLSAgICBzdGF0aWMgYm9v
bCBzdXBwb3J0c0J1ZmZlcmVkRGF0YSgpOwotICAgIAotI2lmIFBMQVRGT1JNKE1BQykKICAgICBp
ZCByZWxlYXNlUHJveHkoKTsKLSNlbmRpZgotCi0jaWYgVVNFKFdJTklORVQpCi0gICAgdm9pZCBz
ZXRIYXNSZWNlaXZlZFJlc3BvbnNlKGJvb2wgPSB0cnVlKTsKLSAgICBib29sIGhhc1JlY2VpdmVk
UmVzcG9uc2UoKSBjb25zdDsKLSAgICB2b2lkIGZpbGVMb2FkVGltZXIoVGltZXI8UmVzb3VyY2VI
YW5kbGU+Kik7Ci0gICAgdm9pZCBvbkhhbmRsZUNyZWF0ZWQoTFBBUkFNKTsKLSAgICB2b2lkIG9u
UmVxdWVzdFJlZGlyZWN0ZWQoTFBBUkFNKTsKLSAgICB2b2lkIG9uUmVxdWVzdENvbXBsZXRlKExQ
QVJBTSk7Ci0gICAgZnJpZW5kIHZvaWQgX19zdGRjYWxsIHRyYW5zZmVySm9iU3RhdHVzQ2FsbGJh
Y2soSElOVEVSTkVULCBEV09SRF9QVFIsIERXT1JELCBMUFZPSUQsIERXT1JEKTsKLSAgICBmcmll
bmQgTFJFU1VMVCBfX3N0ZGNhbGwgUmVzb3VyY2VIYW5kbGVXbmRQcm9jKEhXTkQsIHVuc2lnbmVk
IG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKLSNlbmRpZgogCi0jaWYgUExBVEZPUk0oR1RLKSB8
fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bCogZ2V0SW50ZXJuYWwoKSB7IHJldHVybiBkLmdldCgpOyB9Ci0jZW5kaWYKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIFJlc291cmNlSGFuZGxlQmFzZTsKIAotICAgIC8vIFVzZWQgdG8gd29y
ayBhcm91bmQgdGhlIGZhY3QgdGhhdCB5b3UgZG9uJ3QgZ2V0IGFueSBtb3JlIE5TVVJMQ29ubmVj
dGlvbiBjYWxsYmFja3MgdW50aWwgeW91IHJldHVybiBmcm9tIHRoZSBvbmUgeW91J3JlIGluLgot
ICAgIHN0YXRpYyBib29sIGxvYWRzQmxvY2tlZCgpOyAgICAKLSAgICAKLSAgICB2b2lkIGNsZWFy
QXV0aGVudGljYXRpb24oKTsKLSAgICB2b2lkIGNhbmNlbCgpOwotCi0gICAgLy8gVGhlIGNsaWVu
dCBtYXkgYmUgMCwgaW4gd2hpY2ggY2FzZSBubyBjYWxsYmFja3Mgd2lsbCBiZSBtYWRlLgotICAg
IFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQoKSBjb25zdDsKLSAgICB2b2lkIHNldENsaWVu
dChSZXNvdXJjZUhhbmRsZUNsaWVudCopOwotCi0gICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJv
b2wpOwotICAgICAgCi0gICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3Q7
CisgICAgUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5k
bGVDbGllbnQqLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBi
b29sIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKTsKIAotICAgIHZvaWQgZmlyZUJsb2NrZWRGYWls
dXJlKFRpbWVyPFJlc291cmNlSGFuZGxlPiopOworICAgIGJvb2wgc3RhcnQoRnJhbWUqKTsKIAot
cHJpdmF0ZToKLSAgICBzdGF0aWMgYm9vbCBwb3J0QWxsb3dlZChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmKTsKLSAgICAKLSAgICB2b2lkIHNjaGVkdWxlQmxvY2tlZEZhaWx1cmUoKTsKKyAgICBib29s
IG1fZGVmZXJzTG9hZGluZzsKKyAgICBib29sIG1fc2hvdWxkQ29udGVudFNuaWZmOworICAgIGJv
b2wgbV9taWdodERvd25sb2FkRnJvbUhhbmRsZTsKKworICAgIFJldGFpblB0cjxOU1VSTENvbm5l
Y3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICBSZXRhaW5QdHI8V2ViQ29yZVJlc291cmNlSGFuZGxl
QXNEZWxlZ2F0ZT4gbV9kZWxlZ2F0ZTsKKyAgICBSZXRhaW5QdHI8aWQ+IG1fcHJveHk7CiAKLSAg
ICBib29sIHN0YXJ0KEZyYW1lKik7Ci0gICAgICAgIAotICAgIE93blB0cjxSZXNvdXJjZUhhbmRs
ZUludGVybmFsPiBkOworICAgIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKm1fY3VycmVu
dE1hY0NoYWxsZW5nZTsKKyAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBtX2N1cnJlbnRXZWJD
aGFsbGVuZ2U7CiB9OwogCiB9CkluZGV4OiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhh
bmRsZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhh
bmRsZU1hYy5tbQkocmV2aXNpb24gMjk3MjEpCisrKyBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNv
dXJjZUhhbmRsZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogCiAjaW1w
b3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlJlc291cmNlSGFuZGxlLmgiCi0jaW1wb3J0ICJSZXNv
dXJjZUhhbmRsZUludGVybmFsLmgiCiAKICNpbXBvcnQgIkF1dGhlbnRpY2F0aW9uTWFjLmgiCiAj
aW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKQEAgLTgyLDExICs4MSwyMCBAQCBzdGF0aWMgYm9v
bCBOU1VSTENvbm5lY3Rpb25TdXBwb3J0c0J1ZmZlCiAjaWZuZGVmIE5ERUJVRwogc3RhdGljIGJv
b2wgaXNJbml0aWFsaXppbmdDb25uZWN0aW9uOwogI2VuZGlmCi0gICAgCi1SZXNvdXJjZUhhbmRs
ZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpCisKK1Jlc291cmNlSGFuZGxlOjpS
ZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlZmVyc0xvYWRpbmcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRDb250ZW50U25pZmYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSkKKyAgICA6
IFJlc291cmNlSGFuZGxlQmFzZShyZXF1ZXN0LCBjbGllbnQpCisgICAgLCBtX2RlZmVyc0xvYWRp
bmcoZGVmZXJzTG9hZGluZykKKyAgICAsIG1fc2hvdWxkQ29udGVudFNuaWZmKHNob3VsZENvbnRl
bnRTbmlmZikKKyAgICAsIG1fbWlnaHREb3dubG9hZEZyb21IYW5kbGUobWlnaHREb3dubG9hZEZy
b21IYW5kbGUpCisgICAgLCBtX2N1cnJlbnRNYWNDaGFsbGVuZ2UobmlsKQogewogfQotCisgICAg
CiBSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKCkKIHsKICAgICByZWxlYXNlRGVsZWdh
dGUoKTsKQEAgLTEwOSwyMyArMTE3LDIzIEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZy
YW1lKiBmcmFtZSkKICNlbmRpZgogICAgIGlkIGRlbGVnYXRlOwogICAgIAotICAgIGlmIChkLT5t
X21pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKSB7Ci0gICAgICAgIEFTU0VSVCghZC0+bV9wcm94eSk7
Ci0gICAgICAgIGQtPm1fcHJveHkgPSB3a0NyZWF0ZU5TVVJMQ29ubmVjdGlvbkRlbGVnYXRlUHJv
eHkoKTsKLSAgICAgICAgW2QtPm1fcHJveHkuZ2V0KCkgc2V0RGVsZWdhdGU6UmVzb3VyY2VIYW5k
bGU6OmRlbGVnYXRlKCldOwotICAgICAgICBbZC0+bV9wcm94eS5nZXQoKSByZWxlYXNlXTsKKyAg
ICBpZiAobV9taWdodERvd25sb2FkRnJvbUhhbmRsZSkgeworICAgICAgICBBU1NFUlQoIW1fcHJv
eHkpOworICAgICAgICBtX3Byb3h5ID0gd2tDcmVhdGVOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZVBy
b3h5KCk7CisgICAgICAgIFttX3Byb3h5LmdldCgpIHNldERlbGVnYXRlOlJlc291cmNlSGFuZGxl
OjpkZWxlZ2F0ZSgpXTsKKyAgICAgICAgW21fcHJveHkuZ2V0KCkgcmVsZWFzZV07CiAgICAgICAg
IAotICAgICAgICBkZWxlZ2F0ZSA9IGQtPm1fcHJveHkuZ2V0KCk7CisgICAgICAgIGRlbGVnYXRl
ID0gbV9wcm94eS5nZXQoKTsKICAgICB9IGVsc2UgCiAgICAgICAgIGRlbGVnYXRlID0gUmVzb3Vy
Y2VIYW5kbGU6OmRlbGVnYXRlKCk7CiAgICAgCiAKICAgICBOU1VSTENvbm5lY3Rpb24gKmNvbm5l
Y3Rpb247CiAgICAgCi0gICAgaWYgKGQtPm1fc2hvdWxkQ29udGVudFNuaWZmKSAKLSAgICAgICAg
Y29ubmVjdGlvbiA9IFtbTlNVUkxDb25uZWN0aW9uIGFsbG9jXSBpbml0V2l0aFJlcXVlc3Q6ZC0+
bV9yZXF1ZXN0Lm5zVVJMUmVxdWVzdCgpIGRlbGVnYXRlOmRlbGVnYXRlXTsKKyAgICBpZiAobV9z
aG91bGRDb250ZW50U25pZmYpIAorICAgICAgICBjb25uZWN0aW9uID0gW1tOU1VSTENvbm5lY3Rp
b24gYWxsb2NdIGluaXRXaXRoUmVxdWVzdDptX3JlcXVlc3QubnNVUkxSZXF1ZXN0KCkgZGVsZWdh
dGU6ZGVsZWdhdGVdOwogICAgIGVsc2UgewotICAgICAgICBOU011dGFibGVVUkxSZXF1ZXN0ICpy
ZXF1ZXN0ID0gW2QtPm1fcmVxdWVzdC5uc1VSTFJlcXVlc3QoKSBtdXRhYmxlQ29weV07CisgICAg
ICAgIE5TTXV0YWJsZVVSTFJlcXVlc3QgKnJlcXVlc3QgPSBbbV9yZXF1ZXN0Lm5zVVJMUmVxdWVz
dCgpIG11dGFibGVDb3B5XTsKICAgICAgICAgd2tTZXROU1VSTFJlcXVlc3RTaG91bGRDb250ZW50
U25pZmYocmVxdWVzdCwgTk8pOwogICAgICAgICBjb25uZWN0aW9uID0gW1tOU1VSTENvbm5lY3Rp
b24gYWxsb2NdIGluaXRXaXRoUmVxdWVzdDpyZXF1ZXN0IGRlbGVnYXRlOmRlbGVnYXRlXTsKICAg
ICAgICAgW3JlcXVlc3QgcmVsZWFzZV07CkBAIC0xMzUsMTIgKzE0MywxMiBAQCBib29sIFJlc291
cmNlSGFuZGxlOjpzdGFydChGcmFtZSogZnJhbWUpCiAjaWZuZGVmIE5ERUJVRwogICAgIGlzSW5p
dGlhbGl6aW5nQ29ubmVjdGlvbiA9IE5POwogI2VuZGlmCi0gICAgZC0+bV9jb25uZWN0aW9uID0g
Y29ubmVjdGlvbjsKKyAgICBtX2Nvbm5lY3Rpb24gPSBjb25uZWN0aW9uOwogICAgIFtjb25uZWN0
aW9uIHJlbGVhc2VdOwotICAgIGlmIChkLT5tX2RlZmVyc0xvYWRpbmcpCi0gICAgICAgIHdrU2V0
TlNVUkxDb25uZWN0aW9uRGVmZXJzQ2FsbGJhY2tzKGQtPm1fY29ubmVjdGlvbi5nZXQoKSwgWUVT
KTsKKyAgICBpZiAobV9kZWZlcnNMb2FkaW5nKQorICAgICAgICB3a1NldE5TVVJMQ29ubmVjdGlv
bkRlZmVyc0NhbGxiYWNrcyhtX2Nvbm5lY3Rpb24uZ2V0KCksIFlFUyk7CiAgICAgCi0gICAgaWYg
KGQtPm1fY29ubmVjdGlvbikKKyAgICBpZiAobV9jb25uZWN0aW9uKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CkBAIC0xNDgsMzggKzE1Niw1
MCBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChGcmFtZSogZnJhbWUpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQordm9pZCBSZXNvdXJj
ZUhhbmRsZUJhc2U6OmNsZWFyQXV0aGVudGljYXRpb24oKQogewotICAgIFtkLT5tX2Nvbm5lY3Rp
b24uZ2V0KCkgY2FuY2VsXTsKKyAgICBSZXNvdXJjZUhhbmRsZSYgaCA9IGFzUmVzb3VyY2VIYW5k
bGUoKTsKKworICAgIGgubV9jdXJyZW50TWFjQ2hhbGxlbmdlID0gbmlsOworICAgIGgubV9jdXJy
ZW50V2ViQ2hhbGxlbmdlLm51bGxpZnkoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0
RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKK3ZvaWQgUmVzb3VyY2VIYW5kbGVCYXNlOjpjYW5j
ZWwoKQogewotICAgIGQtPm1fZGVmZXJzTG9hZGluZyA9IGRlZmVyczsKLSAgICB3a1NldE5TVVJM
Q29ubmVjdGlvbkRlZmVyc0NhbGxiYWNrcyhkLT5tX2Nvbm5lY3Rpb24uZ2V0KCksIGRlZmVycyk7
CisgICAgUmVzb3VyY2VIYW5kbGUmIGggPSBhc1Jlc291cmNlSGFuZGxlKCk7CisgICAgCisgICAg
W2gubV9jb25uZWN0aW9uLmdldCgpIGNhbmNlbF07Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVC
YXNlOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQoreworICAgIFJlc291cmNlSGFuZGxl
JiBoID0gYXNSZXNvdXJjZUhhbmRsZSgpOworCisgICAgaC5tX2RlZmVyc0xvYWRpbmcgPSBkZWZl
cnM7CisgICAgd2tTZXROU1VSTENvbm5lY3Rpb25EZWZlcnNDYWxsYmFja3MoaC5tX2Nvbm5lY3Rp
b24uZ2V0KCksIGRlZmVycyk7CiB9CiAKIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUg
KlJlc291cmNlSGFuZGxlOjpkZWxlZ2F0ZSgpCiB7Ci0gICAgaWYgKCFkLT5tX2RlbGVnYXRlKSB7
CisgICAgaWYgKCFtX2RlbGVnYXRlKSB7CiAgICAgICAgIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFz
RGVsZWdhdGUgKmRlbGVnYXRlID0gW1tXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGFs
bG9jXSBpbml0V2l0aEhhbmRsZTp0aGlzXTsKLSAgICAgICAgZC0+bV9kZWxlZ2F0ZSA9IGRlbGVn
YXRlOworICAgICAgICBtX2RlbGVnYXRlID0gZGVsZWdhdGU7CiAgICAgICAgIFtkZWxlZ2F0ZSBy
ZWxlYXNlXTsKICAgICB9Ci0gICAgcmV0dXJuIGQtPm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgcmV0
dXJuIG1fZGVsZWdhdGUuZ2V0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlbGVhc2VE
ZWxlZ2F0ZSgpCiB7Ci0gICAgaWYgKCFkLT5tX2RlbGVnYXRlKQorICAgIGlmICghbV9kZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChkLT5tX3Byb3h5KQotICAgICAgICBbZC0+bV9w
cm94eS5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFtkLT5tX2RlbGVnYXRlLmdldCgpIGRl
dGFjaEhhbmRsZV07Ci0gICAgZC0+bV9kZWxlZ2F0ZSA9IG5pbDsKKyAgICBpZiAobV9wcm94eSkK
KyAgICAgICAgW21fcHJveHkuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbbV9kZWxlZ2F0
ZS5nZXQoKSBkZXRhY2hIYW5kbGVdOworICAgIG1fZGVsZWdhdGUgPSBuaWw7CiB9CiAKLWJvb2wg
UmVzb3VyY2VIYW5kbGU6OnN1cHBvcnRzQnVmZmVyZWREYXRhKCkKK2Jvb2wgUmVzb3VyY2VIYW5k
bGVCYXNlOjpzdXBwb3J0c0J1ZmZlcmVkRGF0YSgpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlh
bGl6ZWQgPSBmYWxzZTsKICAgICBpZiAoIWluaXRpYWxpemVkKSB7CkBAIC0xOTAsNDcgKzIxMCw0
OSBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdXBwb3J0c0J1ZmZlcmVkRGF0CiAgICAgcmV0dXJu
IE5TVVJMQ29ubmVjdGlvblN1cHBvcnRzQnVmZmVyZWREYXRhOwogfQogCi1QYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gUmVzb3VyY2VIYW5kbGU6OmJ1ZmZlcmVkRGF0YSgpCitQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gUmVzb3VyY2VIYW5kbGVCYXNlOjpidWZmZXJlZERhdGEoKQogewogICAgIGlm
IChSZXNvdXJjZUhhbmRsZTo6c3VwcG9ydHNCdWZmZXJlZERhdGEoKSkKLSAgICAgICAgcmV0dXJu
IFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShbZC0+bV9jb25uZWN0aW9uLmdldCgpIF9idWZmZXJl
ZERhdGFdKTsKKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShbYXNSZXNv
dXJjZUhhbmRsZSgpLm1fY29ubmVjdGlvbi5nZXQoKSBfYnVmZmVyZWREYXRhXSk7CiAKICAgICBy
ZXR1cm4gMDsKIH0KIAogaWQgUmVzb3VyY2VIYW5kbGU6OnJlbGVhc2VQcm94eSgpCiB7Ci0gICAg
aWQgcHJveHkgPSBbW2QtPm1fcHJveHkuZ2V0KCkgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0gICAg
ZC0+bV9wcm94eSA9IG5pbDsKKyAgICBpZCBwcm94eSA9IFtbbV9wcm94eS5nZXQoKSByZXRhaW5d
IGF1dG9yZWxlYXNlXTsKKyAgICBtX3Byb3h5ID0gbmlsOwogICAgIFtwcm94eSBzZXREZWxlZ2F0
ZTpuaWxdOwogICAgIHJldHVybiBwcm94eTsKIH0KIAogTlNVUkxDb25uZWN0aW9uICpSZXNvdXJj
ZUhhbmRsZTo6Y29ubmVjdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGQtPm1fY29ubmVjdGlv
bi5nZXQoKTsKKyAgICByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOwogfQogCi1ib29sIFJlc291
cmNlSGFuZGxlOjpsb2Fkc0Jsb2NrZWQoKQorYm9vbCBSZXNvdXJjZUhhbmRsZUJhc2U6OmxvYWRz
QmxvY2tlZCgpCiB7CiAgICAgcmV0dXJuIGluTlNVUkxDb25uZWN0aW9uQ2FsbGJhY2sgIT0gMDsK
IH0KIAotYm9vbCBSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQorYm9vbCBSZXNvdXJjZUhhbmRsZUJhc2U6OndpbGxMb2FkRnJvbUNhY2hl
KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5
KFJldHVybkNhY2hlRGF0YURvbnRMb2FkKTsKICAgICBOU1VSTFJlc3BvbnNlICpuc1VSTFJlc3Bv
bnNlID0gbmlsOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKLSAgIFtO
U1VSTENvbm5lY3Rpb24gc2VuZFN5bmNocm9ub3VzUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVz
dCgpIHJldHVybmluZ1Jlc3BvbnNlOiZuc1VSTFJlc3BvbnNlIGVycm9yOm5pbF07CisgICAgW05T
VVJMQ29ubmVjdGlvbiBzZW5kU3luY2hyb25vdXNSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0
KCkgcmV0dXJuaW5nUmVzcG9uc2U6Jm5zVVJMUmVzcG9uc2UgZXJyb3I6bmlsXTsKICAgICAKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIAogICAgIHJldHVybiBuc1VSTFJlc3Bv
bnNlOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEsIEZyYW1lKikKK3Zv
aWQgUmVzb3VyY2VIYW5kbGVCYXNlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEsIEZyYW1lKikKIHsKKyAgICAvLyBG
SVhNRTogc2hvdWxkbid0IHdlIGNoZWNrIGZvciBiYW5uZWQgcG9ydHM/CisKICAgICBOU0Vycm9y
ICpuc0Vycm9yID0gbmlsOwogICAgIAogICAgIE5TVVJMUmVzcG9uc2UgKm5zVVJMUmVzcG9uc2Ug
PSBuaWw7CkBAIC0yNzIsMzkgKzI5NCwzOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkUmVz
b3VyY2VTeW5jaHJvCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQog
ewotICAgIEFTU0VSVCghZC0+bV9jdXJyZW50TWFjQ2hhbGxlbmdlKTsKLSAgICBBU1NFUlQoZC0+
bV9jdXJyZW50V2ViQ2hhbGxlbmdlLmlzTnVsbCgpKTsKKyAgICBBU1NFUlQoIW1fY3VycmVudE1h
Y0NoYWxsZW5nZSk7CisgICAgQVNTRVJUKG1fY3VycmVudFdlYkNoYWxsZW5nZS5pc051bGwoKSk7
CiAgICAgLy8gU2luY2UgTlNVUkxDb25uZWN0aW9uIG5ldHdvcmtpbmcgcmVsaWVzIG9uIGtlZXBp
bmcgYSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UsCiAgICAgLy8gd2UgbWFrZSBzdXJlIHRoYXQgaXMgYWN0dWFsbHkgcHJlc2VudAogICAgIEFT
U0VSVChjaGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpKTsKICAgICAgICAg
Ci0gICAgZC0+bV9jdXJyZW50TWFjQ2hhbGxlbmdlID0gY2hhbGxlbmdlLm5zVVJMQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoKTsKLSAgICBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICp3ZWJD
aGFsbGVuZ2UgPSBbW05TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgYWxsb2NdIGluaXRXaXRo
QXV0aGVudGljYXRpb25DaGFsbGVuZ2U6ZC0+bV9jdXJyZW50TWFjQ2hhbGxlbmdlIAorICAgIG1f
Y3VycmVudE1hY0NoYWxsZW5nZSA9IGNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKCk7CisgICAgTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqd2ViQ2hhbGxlbmdlID0g
W1tOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGFsbG9jXSBpbml0V2l0aEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlOm1fY3VycmVudE1hY0NoYWxsZW5nZSAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbmRlcjooaWQ8TlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRlcj4p
ZGVsZWdhdGUoKV07Ci0gICAgZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlID0gY29yZSh3ZWJDaGFs
bGVuZ2UpOworICAgIG1fY3VycmVudFdlYkNoYWxsZW5nZSA9IGNvcmUod2ViQ2hhbGxlbmdlKTsK
ICAgICBbd2ViQ2hhbGxlbmdlIHJlbGVhc2VdOwogCiAgICAgaWYgKGNsaWVudCgpKQotICAgICAg
ICBjbGllbnQoKS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHRoaXMsIGQtPm1f
Y3VycmVudFdlYkNoYWxsZW5nZSk7CisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UodGhpcywgbV9jdXJyZW50V2ViQ2hhbGxlbmdlKTsKIH0KIAogdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3Qg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKIHsKLSAgICBBU1NFUlQoZC0+bV9j
dXJyZW50TWFjQ2hhbGxlbmdlKTsKLSAgICBBU1NFUlQoIWQtPm1fY3VycmVudFdlYkNoYWxsZW5n
ZS5pc051bGwoKSk7Ci0gICAgQVNTRVJUKGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZSA9PSBjaGFs
bGVuZ2UpOworICAgIEFTU0VSVChtX2N1cnJlbnRNYWNDaGFsbGVuZ2UpOworICAgIEFTU0VSVCgh
bV9jdXJyZW50V2ViQ2hhbGxlbmdlLmlzTnVsbCgpKTsKKyAgICBBU1NFUlQobV9jdXJyZW50V2Vi
Q2hhbGxlbmdlID09IGNoYWxsZW5nZSk7CiAKICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNs
aWVudCgpLT5kaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSh0aGlzLCBkLT5tX2N1cnJl
bnRXZWJDaGFsbGVuZ2UpOworICAgICAgICBjbGllbnQoKS0+ZGlkQ2FuY2VsQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UodGhpcywgbV9jdXJyZW50V2ViQ2hhbGxlbmdlKTsKIH0KIAogdm9pZCBSZXNv
dXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiBjaGFsbGVuZ2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7CiAgICAgQVNT
RVJUKCFjaGFsbGVuZ2UuaXNOdWxsKCkpOwotICAgIGlmIChjaGFsbGVuZ2UgIT0gZC0+bV9jdXJy
ZW50V2ViQ2hhbGxlbmdlKQorICAgIGlmIChjaGFsbGVuZ2UgIT0gbV9jdXJyZW50V2ViQ2hhbGxl
bmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbW2QtPm1fY3VycmVudE1hY0NoYWxsZW5nZSBz
ZW5kZXJdIHVzZUNyZWRlbnRpYWw6bWFjKGNyZWRlbnRpYWwpIGZvckF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOmQtPm1fY3VycmVudE1hY0NoYWxsZW5nZV07CisgICAgW1ttX2N1cnJlbnRNYWNDaGFs
bGVuZ2Ugc2VuZGVyXSB1c2VDcmVkZW50aWFsOm1hYyhjcmVkZW50aWFsKSBmb3JBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZTptX2N1cnJlbnRNYWNDaGFsbGVuZ2VdOwogCiAgICAgY2xlYXJBdXRoZW50
aWNhdGlvbigpOwogfQpAQCAtMzEyLDE3ICszMzQsMTcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6
cmVjZWl2ZWRDcmVkZW50aWFsKAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRSZXF1ZXN0
VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiBjaGFsbGVuZ2UpCiB7CiAgICAgQVNTRVJUKCFjaGFsbGVuZ2UuaXNOdWxsKCkpOwotICAgIGlm
IChjaGFsbGVuZ2UgIT0gZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlKQorICAgIGlmIChjaGFsbGVu
Z2UgIT0gbV9jdXJyZW50V2ViQ2hhbGxlbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbW2Qt
Pm1fY3VycmVudE1hY0NoYWxsZW5nZSBzZW5kZXJdIGNvbnRpbnVlV2l0aG91dENyZWRlbnRpYWxG
b3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpkLT5tX2N1cnJlbnRNYWNDaGFsbGVuZ2VdOworICAg
IFtbbV9jdXJyZW50TWFjQ2hhbGxlbmdlIHNlbmRlcl0gY29udGludWVXaXRob3V0Q3JlZGVudGlh
bEZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOm1fY3VycmVudE1hY0NoYWxsZW5nZV07CiAKICAg
ICBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2Vp
dmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2Up
CiB7Ci0gICAgaWYgKGNoYWxsZW5nZSAhPSBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UpCisgICAg
aWYgKGNoYWxsZW5nZSAhPSBtX2N1cnJlbnRXZWJDaGFsbGVuZ2UpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChjbGllbnQoKSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>