<?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>196056</bug_id>
          
          <creation_ts>2019-03-20 22:22:39 -0700</creation_ts>
          <short_desc>Stop using LegacySync messages in WebPageProxy</short_desc>
          <delta_ts>2019-03-21 14:07:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>cdumez</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1519471</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-20 22:22:39 -0700</bug_when>
    <thetext>Stop using LegacySync messages in WebPageProxy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519472</commentid>
    <comment_count>1</comment_count>
      <attachid>365485</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-20 22:23:01 -0700</bug_when>
    <thetext>Created attachment 365485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519499</commentid>
    <comment_count>2</comment_count>
      <attachid>365496</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-20 23:34:31 -0700</bug_when>
    <thetext>Created attachment 365496
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519522</commentid>
    <comment_count>3</comment_count>
      <attachid>365506</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-21 00:06:15 -0700</bug_when>
    <thetext>Created attachment 365506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519927</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-21 14:06:56 -0700</bug_when>
    <thetext>http://trac.webkit.org/r243327</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519929</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-21 14:07:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/49123202&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365485</attachid>
            <date>2019-03-20 22:23:01 -0700</date>
            <delta_ts>2019-03-20 23:34:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196056-20190320222300.patch</filename>
            <type>text/plain</type>
            <size>55994</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDMyNzYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE5LTAzLTIwICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3RvcCB1c2luZyBM
ZWdhY3lTeW5jIG1lc3NhZ2VzIGluIFdlYlBhZ2VQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2MDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5
Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9hZFJlY2VudFNlYXJj
aGVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6YmFja0ZvcndhcmRHb1RvSXRlbSk6
CisgICAgICAgIChXZWJLaXQ6OlByb3Zpc2lvbmFsUGFnZVByb3h5OjpkaWRSZWNlaXZlU3luY01l
c3NhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6aGFzSW5zZWN1cmVDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjphY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6cm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnByaW50RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmJhY2tGb3J3YXJkR29Ub0l0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmJhY2tGb3J3YXJkR29Ub0l0ZW1TaGFyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmJhY2tGb3J3YXJkSXRlbUF0SW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmJhY2tGb3J3YXJkQmFja0xpc3RDb3VudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6YmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpjYW5VbmRvUmVkbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6ZXhlY3V0ZVVuZG9SZWRvKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpj
aGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2hl
Y2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjaGVj
a0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3BlbGxp
bmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0R3Vlc3Nl
c0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN1YnN0aXR1dGlvbnNQ
YW5lbElzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvd0NvcnJl
Y3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbFNvb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY29yZEF1
dG9jb3JyZWN0aW9uUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRp
Y3RhdGlvbkFsdGVybmF0aXZlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6d3Jh
cENyeXB0b0tleSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dW53cmFwQ3J5cHRv
S2V5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaWduZWRQdWJsaWNLZXlBbmRD
aGFsbGVuZ2VTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlcmlhbGl6
ZWRBdHRhY2htZW50RGF0YUZvcklkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpzcGVlY2hTeW50aGVzaXNWb2ljZUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnByaW50TWFpbkZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y3JlYXRlUGx1Z2luQ29udGFpbmVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjppbnRlcnByZXRLZXlFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL21h
Yy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0
SXNTcGVha2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZXhlY3V0ZVNhdmVk
Q29tbWFuZEJ5U2VsZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3dQ
REZDb250ZXh0TWVudSk6CisKIDIwMTktMDMtMjAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBw
bGUuY29tPgogCiAgICAgICAgIENvbXB1dGUgcXVvdGEgYWZ0ZXIgbmV0d29yayBwcm9jZXNzIHJl
c3RhcnQgYmFzZWQgb24gZGVmYXVsdCBxdW90YSBhbmQgc3BhY2UgdXNlZApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmNwcAkocmV2aXNp
b24gMjQzMTgwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsOSArMzAzLDkgQEAgdm9pZCBQcm92aXNpb25h
bFBhZ2VQcm94eTo6c3RhcnRVUkxTY2hlbQogICAgIG1fcGFnZS5zdGFydFVSTFNjaGVtZVRhc2tT
aGFyZWQobV9wcm9jZXNzLmNvcHlSZWYoKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiB9CiAKLXZv
aWQgUHJvdmlzaW9uYWxQYWdlUHJveHk6OmJhY2tGb3J3YXJkR29Ub0l0ZW0oY29uc3QgV2ViQ29y
ZTo6QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYgaWRlbnRpZmllciwgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlJiBoYW5kbGUpCit2b2lkIFByb3Zpc2lvbmFsUGFnZVByb3h5OjpiYWNrRm9yd2Fy
ZEdvVG9JdGVtKGNvbnN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGlkZW50
aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fcGFnZS5iYWNrRm9yd2FyZEdvVG9JdGVt
U2hhcmVkKG1fcHJvY2Vzcy5jb3B5UmVmKCksIGlkZW50aWZpZXIsIGhhbmRsZSk7CisgICAgbV9w
YWdlLmJhY2tGb3J3YXJkR29Ub0l0ZW1TaGFyZWQobV9wcm9jZXNzLmNvcHlSZWYoKSwgaWRlbnRp
ZmllciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFByb3Zpc2lvbmFs
UGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uU3luYyh1aW50NjRfdCBm
cmFtZUlELCBib29sIGlzTWFpbkZyYW1lLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiBm
cmFtZVNlY3VyaXR5T3JpZ2luLCBXZWJDb3JlOjpQb2xpY3lDaGVja0lkZW50aWZpZXIgaWRlbnRp
ZmllciwKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIFByb3Zpc2lvbmFsUGFnZVByb3h5OjpkaWRS
ZWNlaXZlTWVzCiB2b2lkIFByb3Zpc2lvbmFsUGFnZVByb3h5OjpkaWRSZWNlaXZlU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0
ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCiB7CiAgICAgaWYgKGRl
Y29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2Fy
ZEdvVG9JdGVtOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlTGVnYWN5U3lu
YzxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEdvVG9JdGVtPihkZWNvZGVyLCAq
cmVwbHlFbmNvZGVyLCB0aGlzLCAmUHJvdmlzaW9uYWxQYWdlUHJveHk6OmJhY2tGb3J3YXJkR29U
b0l0ZW0pOworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2VEZWxheWVkPE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkJhY2tGb3J3YXJkR29Ub0l0ZW0+KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5
RW5jb2RlciwgdGhpcywgJlByb3Zpc2lvbmFsUGFnZVByb3h5OjpiYWNrRm9yd2FyZEdvVG9JdGVt
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNDMxODApCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDIsNyArMTAyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZENvbW1pdExvYWRGb3JG
cmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlkZXIsIHVpbnQzMl90
IGZyYW1lTG9hZFR5cGUsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYsIGJvb2wgY29u
dGFpbnNQbHVnaW5Eb2N1bWVudCwgT3B0aW9uYWw8V2ViQ29yZTo6SGFzSW5zZWN1cmVDb250ZW50
PiBmb3JjZWRIYXNJbnNlY3VyZUNvbnRlbnQsIGNvbnN0IFVzZXJEYXRhJik7CiAgICAgdm9pZCBk
aWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBmcmFtZVNlY3VyaXR5T3JpZ2luLCB1aW50NjRfdCBu
YXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmluZyYgcHJvdmlzaW9uYWxVUkwsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlRXJyb3ImLCBjb25zdCBVc2VyRGF0YSYpOwogICAgIHZvaWQgc3RhcnRVUkxTY2hl
bWVUYXNrKFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzJiYpOwotICAgIHZvaWQgYmFja0ZvcndhcmRH
b1RvSXRlbShjb25zdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiwgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlJik7CisgICAgdm9pZCBiYWNrRm9yd2FyZEdvVG9JdGVtKGNvbnN0
IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKT4mJik7CiAgICAgdm9pZCBkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uU3luYyh1aW50NjRfdCBmcmFtZUlELCBib29sIGlzTWFpbkZy
YW1lLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgV2ViQ29yZTo6UG9saWN5Q2hlY2tJ
ZGVudGlmaWVyLCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIE5hdmlnYXRpb25BY3Rpb25EYXRhJiYs
CiAgICAgICAgIEZyYW1lSW5mb0RhdGEmJiwgdWludDY0X3Qgb3JpZ2luYXRpbmdQYWdlSUQsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmJiwgSVBDOjpGb3JtRGF0YVJlZmVyZW5jZSYmIHJlcXVlc3RCb2R5LAog
ICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVkaXJlY3RSZXNwb25zZSwgY29u
c3QgVXNlckRhdGEmLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uU3luYzo6RGVsYXllZFJlcGx5JiYpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyNDMxODApCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDQsMTYg
KzcwNCwxNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlTWVzc2FnZShJUEM6OkNvCiAgICAg
bV9pbmplY3RlZEJ1bmRsZUNsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5k
bGUodGhpcywgbWVzc2FnZU5hbWUsIG1fcHJvY2Vzcy0+dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0
cyhtZXNzYWdlQm9keS5vYmplY3QoKSkuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6
aGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBVc2Vy
RGF0YSYgcmV0dXJuVXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlU3luY2hyb25v
dXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFVzZXJEYXRhJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChtX3By
b2Nlc3MtPmNvbm5lY3Rpb24oKSA9PSAmY29ubmVjdGlvbik7CiAKICAgICBpZiAoIW1faW5qZWN0
ZWRCdW5kbGVDbGllbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKHsgfSk7CiAKICAgICBSZWZQdHI8QVBJOjpPYmplY3Q+IHJldHVybkRhdGE7CiAg
ICAgbV9pbmplY3RlZEJ1bmRsZUNsaWVudC0+ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZSh0aGlzLCBtZXNzYWdlTmFtZSwgbV9wcm9jZXNzLT50cmFuc2Zvcm1I
YW5kbGVzVG9PYmplY3RzKG1lc3NhZ2VCb2R5Lm9iamVjdCgpKS5nZXQoKSwgcmV0dXJuRGF0YSk7
Ci0gICAgcmV0dXJuVXNlckRhdGEgPSBVc2VyRGF0YShtX3Byb2Nlc3MtPnRyYW5zZm9ybU9iamVj
dHNUb0hhbmRsZXMocmV0dXJuRGF0YS5nZXQoKSkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFVz
ZXJEYXRhKG1fcHJvY2Vzcy0+dHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyhyZXR1cm5EYXRhLmdl
dCgpKSkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6bGF1bmNoUHJvY2Vzcyhjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgcmVnaXN0cmFibGVEb21haW4pCkBAIC0zODYxLDkgKzM4NjEsOSBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6c2V0TmV0d29ya1JlcXVlc3RzSW5QCiAgICAgbV9wYWdlTG9hZFN0
YXRlLnNldE5ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3ModHJhbnNhY3Rpb24sIG5ldHdvcmtSZXF1
ZXN0c0luUHJvZ3Jlc3MpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6aGFzSW5zZWN1cmVDb250
ZW50KEhhc0luc2VjdXJlQ29udGVudCYgaGFzSW5zZWN1cmVDb250ZW50KQordm9pZCBXZWJQYWdl
UHJveHk6Omhhc0luc2VjdXJlQ29udGVudChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6
Okhhc0luc2VjdXJlQ29udGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaGFzSW5z
ZWN1cmVDb250ZW50ID0gbV9wYWdlTG9hZFN0YXRlLmNvbW1pdHRlZEhhc0luc2VjdXJlQ29udGVu
dCgpID8gSGFzSW5zZWN1cmVDb250ZW50OjpZZXMgOiBIYXNJbnNlY3VyZUNvbnRlbnQ6Ok5vOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcGFnZUxvYWRTdGF0ZS5jb21taXR0ZWRIYXNJbnNlY3Vy
ZUNvbnRlbnQoKSA/IEhhc0luc2VjdXJlQ29udGVudDo6WWVzIDogSGFzSW5zZWN1cmVDb250ZW50
OjpObyk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWREZXN0cm95TmF2aWdhdGlvbih1aW50
NjRfdCBuYXZpZ2F0aW9uSUQpCkBAIC01MjE4LDE0ICs1MjE4LDE0IEBAIEludFJlY3QgV2ViUGFn
ZVByb3h5OjpzeW5jUm9vdFZpZXdUb1NjcmUKICAgICByZXR1cm4gcGFnZUNsaWVudCgpLnJvb3RW
aWV3VG9TY3JlZW4odmlld1JlY3QpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6YWNjZXNzaWJp
bGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHNjcmVlblBvaW50LCBJbnRQb2lu
dCYgd2luZG93UG9pbnQpCit2b2lkIFdlYlBhZ2VQcm94eTo6YWNjZXNzaWJpbGl0eVNjcmVlblRv
Um9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHNjcmVlblBvaW50LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKEludFBvaW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICB3aW5kb3dQb2ludCA9
IHBhZ2VDbGllbnQoKS5hY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290VmlldyhzY3JlZW5Qb2ludCk7
CisgICAgY29tcGxldGlvbkhhbmRsZXIocGFnZUNsaWVudCgpLmFjY2Vzc2liaWxpdHlTY3JlZW5U
b1Jvb3RWaWV3KHNjcmVlblBvaW50KSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpyb290Vmll
d1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBJbnRSZWN0JiB2aWV3UmVjdCwgSW50UmVjdCYg
cmVzdWx0KQordm9pZCBXZWJQYWdlUHJveHk6OnJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVu
KGNvbnN0IEludFJlY3QmIHZpZXdSZWN0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEludFJlY3Qp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIHJlc3VsdCA9IHBhZ2VDbGllbnQoKS5yb290
Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbih2aWV3UmVjdCk7CisgICAgY29tcGxldGlvbkhhbmRs
ZXIocGFnZUNsaWVudCgpLnJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKHZpZXdSZWN0KSk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwodWlu
dDY0X3QgZnJhbWVJRCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbiwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5CZWZvcmVV
bmxvYWRDb25maXJtUGFuZWw6OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQpAQCAtNTMwNyw3ICs1MzA3
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNob3dTaGFyZVNoZWV0KGNvbnN0IAogICAgIHBhZ2VD
bGllbnQoKS5zaG93U2hhcmVTaGVldChzaGFyZURhdGEsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KICAgICAKLXZvaWQgV2ViUGFnZVByb3h5OjpwcmludEZyYW1lKHVpbnQ2NF90IGZy
YW1lSUQpCit2b2lkIFdlYlBhZ2VQcm94eTo6cHJpbnRGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKCFtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uKTsKICAgICBtX2lzUGVyZm9ybWlu
Z0RPTVByaW50T3BlcmF0aW9uID0gdHJ1ZTsKQEAgLTUzMTksMTEgKzUzMTksOCBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6cHJpbnRGcmFtZSh1aW50NjRfdCBmCiAKICAgICBlbmRQcmludGluZygpOyAv
LyBTZW5kIGEgbWVzc2FnZSBzeW5jaHJvbm91c2x5IHdoaWxlIG1faXNQZXJmb3JtaW5nRE9NUHJp
bnRPcGVyYXRpb24gaXMgc3RpbGwgdHJ1ZS4KICAgICBtX2lzUGVyZm9ybWluZ0RPTVByaW50T3Bl
cmF0aW9uID0gZmFsc2U7Ci19CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpwcmludE1haW5GcmFtZSgp
Ci17Ci0gICAgcHJpbnRGcmFtZShtX21haW5GcmFtZS0+ZnJhbWVJRCgpKTsKKyAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0TWVkaWFWb2x1bWUoZmxv
YXQgdm9sdW1lKQpAQCAtNTYwNiw0NiArNTYwMyw0OCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6YmFj
a0ZvcndhcmRBZGRJdGVtKEJhCiAgICAgbV9iYWNrRm9yd2FyZExpc3QtPmFkZEl0ZW0oV1RGTW92
ZShpdGVtKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZEdvVG9JdGVtKGNv
bnN0IEJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGl0ZW1JRCwgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQordm9pZCBXZWJQYWdlUHJveHk6OmJhY2tG
b3J3YXJkR29Ub0l0ZW0oY29uc3QgQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYgaXRlbUlELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICAvLyBPbiBwcm9jZXNzIHN3YXAsIHdlIHRlbGwgdGhlIHBy
ZXZpb3VzIHByb2Nlc3MgdG8gaWdub3JlIHRoZSBsb2FkLCB3aGljaCBjYXVzZXMgaXQgc28gcmVz
dG9yZSBpdHMgY3VycmVudCBiYWNrIGZvcndhcmQgaXRlbSB0byBpdHMgcHJldmlvdXMKICAgICAv
LyB2YWx1ZS4gU2luY2UgdGhlIGxvYWQgaXMgcmVhbGx5IGdvaW5nIG9uIGluIGEgbmV3IHByb3Zp
c2lvbmFsIHByb2Nlc3MsIHdlIHdhbnQgdG8gaWdub3JlIHN1Y2ggcmVxdWVzdHMgZnJvbSB0aGUg
Y29tbWl0dGVkIHByb2Nlc3MuCiAgICAgLy8gQW55IHJlYWwgbmV3IGxvYWQgaW4gdGhlIGNvbW1p
dHRlZCBwcm9jZXNzIHdvdWxkIGhhdmUgY2xlYXJlZCBtX3Byb3Zpc2lvbmFsUGFnZS4KICAgICBp
ZiAobV9wcm92aXNpb25hbFBhZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBiYWNrRm9yd2FyZEdvVG9JdGVtU2hhcmVkKG1f
cHJvY2Vzcy5jb3B5UmVmKCksIGl0ZW1JRCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CisgICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CisgICAgYmFj
a0ZvcndhcmRHb1RvSXRlbVNoYXJlZChtX3Byb2Nlc3MuY29weVJlZigpLCBpdGVtSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3
YXJkR29Ub0l0ZW1TaGFyZWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzLCBjb25zdCBC
YWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiBpdGVtSUQsIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2Fy
ZEdvVG9JdGVtU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzcywgY29uc3QgQmFj
a0ZvcndhcmRJdGVtSWRlbnRpZmllciYgaXRlbUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtID0gbV9iYWNrRm9yd2FyZExpc3QtPml0ZW1Gb3JJ
RChpdGVtSUQpOworICAgIGF1dG8qIGl0ZW0gPSBtX2JhY2tGb3J3YXJkTGlzdC0+aXRlbUZvcklE
KGl0ZW1JRCk7CiAgICAgaWYgKCFpdGVtKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgYm9vbCBjcmVhdGVkRXh0ZW5zaW9uID0gbWF5
YmVJbml0aWFsaXplU2FuZGJveEV4dGVuc2lvbkhhbmRsZShwcm9jZXNzLCBVUkwoVVJMKCksIGl0
ZW0tPnVybCgpKSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAgICAgaWYgKGNyZWF0ZWRFeHRl
bnNpb24pCiAgICAgICAgIHdpbGxBY3F1aXJlVW5pdmVyc2FsRmlsZVJlYWRTYW5kYm94RXh0ZW5z
aW9uKHByb2Nlc3MpOwogICAgIG1fYmFja0ZvcndhcmRMaXN0LT5nb1RvSXRlbSgqaXRlbSk7Cisg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZEl0ZW1BdEluZGV4KGludDMyX3QgaW5k
ZXgsIE9wdGlvbmFsPEJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXI+JiBpdGVtSUQpCit2b2lkIFdl
YlBhZ2VQcm94eTo6YmFja0ZvcndhcmRJdGVtQXRJbmRleChpbnQzMl90IGluZGV4LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPEJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXI+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0g
PSBtX2JhY2tGb3J3YXJkTGlzdC0+aXRlbUF0SW5kZXgoaW5kZXgpOwotICAgIGlmIChpdGVtKQot
ICAgICAgICBpdGVtSUQgPSBpdGVtLT5pdGVtSUQoKTsKKyAgICBpZiAoYXV0byogaXRlbSA9IG1f
YmFja0ZvcndhcmRMaXN0LT5pdGVtQXRJbmRleChpbmRleCkpCisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKGl0ZW0tPml0ZW1JRCgpKTsKICAgICBlbHNlCi0gICAgICAgIGl0ZW1JRCA9IFdURjo6
bnVsbG9wdDsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0KTsKIH0KIAot
dm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkQmFja0xpc3RDb3VudCh1aW50MzJfdCYgY291
bnQpCit2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRCYWNrTGlzdENvdW50KENvbXBsZXRp
b25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNv
dW50ID0gbV9iYWNrRm9yd2FyZExpc3QtPmJhY2tMaXN0Q291bnQoKTsKKyAgICBjb21wbGV0aW9u
SGFuZGxlcihtX2JhY2tGb3J3YXJkTGlzdC0+YmFja0xpc3RDb3VudCgpKTsKIH0KIAotdm9pZCBX
ZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3VudCh1aW50MzJfdCYgY291bnQp
Cit2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50KENvbXBsZXRp
b25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNv
dW50ID0gbV9iYWNrRm9yd2FyZExpc3QtPmZvcndhcmRMaXN0Q291bnQoKTsKKyAgICBjb21wbGV0
aW9uSGFuZGxlcihtX2JhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZExpc3RDb3VudCgpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmNvbXBvc2l0aW9uV2FzQ2FuY2VsZWQoKQpAQCAtNTY2OSwxNCAr
NTY2OCwxNSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJJbnNlcnRpb25VbmRvCiAjZW5k
aWYKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmNhblVuZG9SZWRvKFVuZG9PclJlZG8gYWN0aW9u
LCBib29sJiByZXN1bHQpCit2b2lkIFdlYlBhZ2VQcm94eTo6Y2FuVW5kb1JlZG8oVW5kb09yUmVk
byBhY3Rpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgcmVzdWx0ID0gcGFnZUNsaWVudCgpLmNhblVuZG9SZWRvKGFjdGlvbik7Cisg
ICAgY29tcGxldGlvbkhhbmRsZXIocGFnZUNsaWVudCgpLmNhblVuZG9SZWRvKGFjdGlvbikpOwog
fQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZVVuZG9SZWRvKFVuZG9PclJlZG8gYWN0aW9u
KQordm9pZCBXZWJQYWdlUHJveHk6OmV4ZWN1dGVVbmRvUmVkbyhVbmRvT3JSZWRvIGFjdGlvbiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIHBh
Z2VDbGllbnQoKS5leGVjdXRlVW5kb1JlZG8oYWN0aW9uKTsKKyAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQpAQCAt
NjA2OSwyNSArNjA2OSwzMiBAQCBTcGVsbERvY3VtZW50VGFnIFdlYlBhZ2VQcm94eTo6c3BlbGxE
b2N1CiB9CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotdm9pZCBXZWJQYWdlUHJv
eHk6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uU2V0PFRl
eHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQsIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQordm9pZCBXZWJQYWdlUHJveHk6OmNo
ZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uU2V0PFRleHRDaGVj
a2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgcmVzdWx0cyA9IFRleHRDaGVja2VyOjpjaGVja1Rl
eHRPZlBhcmFncmFwaChzcGVsbERvY3VtZW50VGFnKCksIHRleHQsIGluc2VydGlvblBvaW50LCBj
aGVja2luZ1R5cGVzLCBtX2luaXRpYWxDYXBpdGFsaXphdGlvbkVuYWJsZWQpOworICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChzcGVsbERvY3Vt
ZW50VGFnKCksIHRleHQsIGluc2VydGlvblBvaW50LCBjaGVja2luZ1R5cGVzLCBtX2luaXRpYWxD
YXBpdGFsaXphdGlvbkVuYWJsZWQpKTsKIH0KICNlbmRpZgogCi12b2lkIFdlYlBhZ2VQcm94eTo6
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgaW50MzJfdCYgbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCit2b2lkIFdlYlBhZ2VQ
cm94eTo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChpbnQzMl90IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QgbWlzc3Bl
bGxpbmdMZW5ndGgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIGludDMyX3QgbWlzc3Bl
bGxpbmdMb2NhdGlvbiA9IDA7CisgICAgaW50MzJfdCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7CiAg
ICAgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnKCks
IHRleHQsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICBjb21w
bGV0aW9uSGFuZGxlcihtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBTdHJpbmcm
IHRleHQsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3QmIGJh
ZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiYsIGludDMyX3Qg
YmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90IGJhZEdyYW1tYXJMZW5ndGgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogeworICAgIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiBncmFtbWFyRGV0YWlsczsK
KyAgICBpbnQzMl90IGJhZEdyYW1tYXJMb2NhdGlvbiA9IDA7CisgICAgaW50MzJfdCBiYWRHcmFt
bWFyTGVuZ3RoID0gMDsKICAgICBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoc3Bl
bGxEb2N1bWVudFRhZygpLCB0ZXh0LCBncmFtbWFyRGV0YWlscywgYmFkR3JhbW1hckxvY2F0aW9u
LCBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGdyYW1t
YXJEZXRhaWxzKSwgYmFkR3JhbW1hckxvY2F0aW9uLCBiYWRHcmFtbWFyTGVuZ3RoKTsKIH0KIAot
dm9pZCBXZWJQYWdlUHJveHk6OnNwZWxsaW5nVUlJc1Nob3dpbmcoYm9vbCYgaXNTaG93aW5nKQor
dm9pZCBXZWJQYWdlUHJveHk6OnNwZWxsaW5nVUlJc1Nob3dpbmcoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpc1Nob3dpbmcgPSBUZXh0
Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZygpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFRl
eHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3Nw
ZWxsZWRXb3JkKQpAQCAtNjEwMCw5ICs2MTA3LDExIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRh
dGVTcGVsbGluZ1VJV2l0aEcKICAgICBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcoKSwgYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1h
ckRldGFpbCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpnZXRHdWVzc2VzRm9yV29yZChjb25z
dCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50MzJfdCBpbnNlcnRpb25Q
b2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0R3Vl
c3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGlu
dDMyX3QgaW5zZXJ0aW9uUG9pbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmlu
Zz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nl
czsKICAgICBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZygp
LCB3b3JkLCBjb250ZXh0LCBpbnNlcnRpb25Qb2ludCwgZ3Vlc3NlcywgbV9pbml0aWFsQ2FwaXRh
bGl6YXRpb25FbmFibGVkKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGd1ZXNzZXMp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmIHdvcmQp
CkBAIC03NjAxLDI4ICs3NjEwLDMyIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp0b2dnbGVBdXRvbWF0
aWNUZXh0UmUKIAogI2lmIFBMQVRGT1JNKE1BQykKIAotdm9pZCBXZWJQYWdlUHJveHk6OnN1YnN0
aXR1dGlvbnNQYW5lbElzU2hvd2luZyhib29sJiBpc1Nob3dpbmcpCit2b2lkIFdlYlBhZ2VQcm94
eTo6c3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaXNTaG93aW5nID0gVGV4dENoZWNrZXI6
OnN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZygpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFRl
eHRDaGVja2VyOjpzdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmcoKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBlLCBjb25zdCBG
bG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogeworICAgIC8vIEZJWE1F
OiBNYWtlIEFsdGVybmF0aXZlVGV4dFR5cGUgYW4gZW51bSBjbGFzcyB3aXRoIEVudW1UcmFpdHMg
YW5kIHNlcmlhbGl6ZSBpdCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8vZnJvbSBhbiBpbnQzMl90Lgog
ICAgIHBhZ2VDbGllbnQoKS5zaG93Q29ycmVjdGlvblBhbmVsKChBbHRlcm5hdGl2ZVRleHRUeXBl
KXBhbmVsVHlwZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0cmluZywg
cmVwbGFjZW1lbnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCByZWFzb24p
CiB7CisgICAgLy8gRklYTUU6IE1ha2UgUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4
dCBhbiBlbnVtIGNsYXNzIHdpdGggRW51bVRyYWl0cyBhbmQgc2VyaWFsaXplIGl0IGluc3RlYWQg
b2YgY2FzdGluZyB0by9mcm9tIGFuIGludDMyX3QuCiAgICAgcGFnZUNsaWVudCgpLmRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpcmVhc29u
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKGlu
dDMyX3QgcmVhc29uLCBTdHJpbmcmIHJlc3VsdCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaXNtaXNz
Q29ycmVjdGlvblBhbmVsU29vbihpbnQzMl90IHJlYXNvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChTdHJpbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIHJlc3VsdCA9IHBhZ2VDbGll
bnQoKS5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbigoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVy
bmF0aXZlVGV4dClyZWFzb24pOworICAgIC8vIEZJWE1FOiBNYWtlIFJlYXNvbkZvckRpc21pc3Np
bmdBbHRlcm5hdGl2ZVRleHQgYW4gZW51bSBjbGFzcyB3aXRoIEVudW1UcmFpdHMgYW5kIHNlcmlh
bGl6ZSBpdCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8vZnJvbSBhbiBpbnQzMl90LgorICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHBhZ2VDbGllbnQoKS5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbigoUmVh
c29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dClyZWFzb24pKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoaW50MzJfdCByZXNwb25zZSwg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZykKIHsKKyAgICAvLyBGSVhNRTogTWFrZSBBdXRvY29ycmVjdGlvblJlc3BvbnNlIGFuIGVu
dW0gY2xhc3Mgd2l0aCBFbnVtVHJhaXRzIGFuZCBzZXJpYWxpemUgaXQgaW5zdGVhZCBvZiBjYXN0
aW5nIHRvL2Zyb20gYW4gaW50MzJfdC4KICAgICBwYWdlQ2xpZW50KCkucmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZShzdGF0aWNfY2FzdDxBdXRvY29ycmVjdGlvblJlc3BvbnNlPihyZXNwb25z
ZSksIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFN0cmluZyk7CiB9CiAKQEAgLTc2NDMsOSAr
NzY1Niw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZW1vdmVEaWN0YXRpb25BbHRlcm4KICAgICBw
YWdlQ2xpZW50KCkucmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGRpY3RhdGlvbkNvbnRleHQp
OwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90
IGRpY3RhdGlvbkNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpCit2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgcmVzdWx0ID0gcGFnZUNsaWVudCgpLmRpY3RhdGlvbkFsdGVybmF0aXZlcyhk
aWN0YXRpb25Db250ZXh0KTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihwYWdlQ2xpZW50KCkuZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKGRpY3RhdGlvbkNvbnRleHQpKTsKIH0KICNlbmRpZgogCkBAIC03
NzI1LDcgKzc3MzgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0T3ZlcmxheVNjcm9sbGJhclN0
CiB9CiAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKLXZvaWQgV2ViUGFnZVByb3h5Ojp3cmFwQ3J5
cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBib29sJiBzdWNjZWVkZWQsIFZlY3Rv
cjx1aW50OF90PiYgd3JhcHBlZEtleSkKK3ZvaWQgV2ViUGFnZVByb3h5Ojp3cmFwQ3J5cHRvS2V5
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2ws
IFZlY3Rvcjx1aW50OF90PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBQYWdlQ2xp
ZW50UHJvdGVjdG9yIHByb3RlY3RvcihwYWdlQ2xpZW50KCkpOwogCkBAIC03NzM0LDEwICs3NzQ3
LDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp3cmFwQ3J5cHRvS2V5KGNvbnN0IFYKICAgICBpZiAo
YXV0byBrZXlEYXRhID0gbV9uYXZpZ2F0aW9uQ2xpZW50LT53ZWJDcnlwdG9NYXN0ZXJLZXkoKnRo
aXMpKQogICAgICAgICBtYXN0ZXJLZXkgPSBrZXlEYXRhLT5kYXRhUmVmZXJlbmNlKCkudmVjdG9y
KCk7CiAKLSAgICBzdWNjZWVkZWQgPSB3cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXks
IGtleSwgd3JhcHBlZEtleSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHdyYXBwZWRLZXk7CisgICAg
Ym9vbCBzdWNjZWVkZWQgPSB3cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIGtleSwg
d3JhcHBlZEtleSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoc3VjY2VlZGVkLCBXVEZNb3ZlKHdy
YXBwZWRLZXkpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnVud3JhcENyeXB0b0tleShjb25z
dCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXksIGJvb2wmIHN1Y2NlZWRlZCwgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXkpCit2b2lkIFdlYlBhZ2VQcm94eTo6dW53cmFwQ3J5cHRvS2V5KGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sLCBW
ZWN0b3I8dWludDhfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgUGFnZUNsaWVu
dFByb3RlY3RvciBwcm90ZWN0b3IocGFnZUNsaWVudCgpKTsKIApAQCAtNzc0NiwxNiArNzc2MSwy
MCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dW53cmFwQ3J5cHRvS2V5KGNvbnN0CiAgICAgaWYgKGF1
dG8ga2V5RGF0YSA9IG1fbmF2aWdhdGlvbkNsaWVudC0+d2ViQ3J5cHRvTWFzdGVyS2V5KCp0aGlz
KSkKICAgICAgICAgbWFzdGVyS2V5ID0ga2V5RGF0YS0+ZGF0YVJlZmVyZW5jZSgpLnZlY3Rvcigp
OwogCi0gICAgc3VjY2VlZGVkID0gdW53cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXks
IHdyYXBwZWRLZXksIGtleSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleTsKKyAgICBib29sIHN1
Y2NlZWRlZCA9IHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCB3cmFwcGVkS2V5
LCBrZXkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKHN1Y2NlZWRlZCwgV1RGTW92ZShrZXkpKTsK
IH0KICNlbmRpZgogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nJiBjaGFsbGVuZ2VT
dHJpbmcsIGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcmIHJlc3VsdCkKK3ZvaWQgV2ViUGFnZVByb3h5
OjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4
LCBjb25zdCBTdHJpbmcmIGNoYWxsZW5nZVN0cmluZywgY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBQYWdl
Q2xpZW50UHJvdGVjdG9yIHByb3RlY3RvcihwYWdlQ2xpZW50KCkpOwogCiAgICAgaWYgKGF1dG8g
YXBpU3RyaW5nID0gbV9uYXZpZ2F0aW9uQ2xpZW50LT5zaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2VTdHJpbmcoKnRoaXMsIGtleVNpemVJbmRleCwgQVBJOjpTdHJpbmc6OmNyZWF0ZShjaGFsbGVu
Z2VTdHJpbmcpLCB1cmwpKQotICAgICAgICByZXN1bHQgPSBhcGlTdHJpbmctPnN0cmluZygpOwor
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoYXBpU3RyaW5nLT5zdHJpbmcoKSk7Cisg
ICAgCisgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OmFkZE1JTUVUeXBlV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcihjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQpAQCAtODU5Niw4ICs4NjE1LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmludmFsaWRhdGVB
bGxBdHRhY2htZQogICAgIG1fYXR0YWNobWVudElkZW50aWZpZXJUb0F0dGFjaG1lbnRNYXAuY2xl
YXIoKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YUZv
cklkZW50aWZpZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpZGVudGlmaWVycywgVmVjdG9yPFdl
YkNvcmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YT4mIHNlcmlhbGl6ZWREYXRhKQordm9pZCBX
ZWJQYWdlUHJveHk6OnNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YUZvcklkZW50aWZpZXJzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBpZGVudGlmaWVycywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8V2ViQ29yZTo6U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKKyAgICBWZWN0b3I8V2ViQ29yZTo6U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiBz
ZXJpYWxpemVkRGF0YTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGlkZW50aWZpZXIgOiBpZGVudGlm
aWVycykgewogICAgICAgICBhdXRvIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50Rm9ySWRlbnRpZmll
cihpZGVudGlmaWVyKTsKICAgICAgICAgaWYgKCFhdHRhY2htZW50KQpAQCAtODYwOSw2ICs4NjI5
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNlcmlhbGl6ZWRBdHRhY2htZW50RAogCiAgICAgICAg
IHNlcmlhbGl6ZWREYXRhLmFwcGVuZCh7IGlkZW50aWZpZXIsIGF0dGFjaG1lbnQtPm1pbWVUeXBl
KCksIGRhdGEucmVsZWFzZU5vbk51bGwoKSB9KTsKICAgICB9CisgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShzZXJpYWxpemVkRGF0YSkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlk
SW52YWxpZGF0ZURhdGFGb3JBdHRhY2htZW50KEFQSTo6QXR0YWNobWVudCYgYXR0YWNobWVudCkK
QEAgLTg4MzksMTMgKzg4NjAsMTQgQEAgV2ViUGFnZVByb3h5OjpTcGVlY2hTeW50aGVzaXNEYXRh
JiBXZWJQYQogICAgIHJldHVybiAqbV9zcGVlY2hTeW50aGVzaXNEYXRhOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6c3BlZWNoU3ludGhlc2lzVm9pY2VMaXN0KFZlY3RvcjxXZWJTcGVlY2hTeW50
aGVzaXNWb2ljZT4mIHJlc3VsdCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzcGVlY2hTeW50aGVzaXNW
b2ljZUxpc3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViU3BlZWNoU3ludGhlc2lz
Vm9pY2U+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8mIHZvaWNlTGlzdCA9
IHNwZWVjaFN5bnRoZXNpc0RhdGEoKS5zeW50aGVzaXplci0+dm9pY2VMaXN0KCk7Ci0gICAgZm9y
IChhdXRvJiB2b2ljZSA6IHZvaWNlTGlzdCkgewotICAgICAgICBXZWJTcGVlY2hTeW50aGVzaXNW
b2ljZSB2IHsgdm9pY2UtPnZvaWNlVVJJKCksIHZvaWNlLT5uYW1lKCksIHZvaWNlLT5sYW5nKCks
IHZvaWNlLT5sb2NhbFNlcnZpY2UoKSwgdm9pY2UtPmlzRGVmYXVsdCgpIH07Ci0gICAgICAgIHJl
c3VsdC5hcHBlbmQoV1RGTW92ZSh2KSk7Ci0gICAgfQorICAgIFZlY3RvcjxXZWJTcGVlY2hTeW50
aGVzaXNWb2ljZT4gcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZv
aWNlTGlzdC5zaXplKCkpOworICAgIGZvciAoYXV0byYgdm9pY2UgOiB2b2ljZUxpc3QpCisgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV2ViU3BlZWNoU3ludGhlc2lzVm9pY2UgeyB2b2lj
ZS0+dm9pY2VVUkkoKSwgdm9pY2UtPm5hbWUoKSwgdm9pY2UtPmxhbmcoKSwgdm9pY2UtPmxvY2Fs
U2VydmljZSgpLCB2b2ljZS0+aXNEZWZhdWx0KCkgfSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShyZXN1bHQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNwZWVjaFN5bnRoZXNp
c1NwZWFrKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBsYW5nLCBmbG9hdCB2b2x1
bWUsIGZsb2F0IHJhdGUsIGZsb2F0IHBpdGNoLCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSwgY29u
c3QgU3RyaW5nJiB2b2ljZVVSSSwgY29uc3QgU3RyaW5nJiB2b2ljZU5hbWUsIGNvbnN0IFN0cmlu
ZyYgdm9pY2VMYW5nLCBib29sIGxvY2FsU2VydmljZSwgYm9vbCBkZWZhdWx0Vm9pY2UsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNDMxODApCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1Mywx
NCArMTE1MywxMiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lO
KQotICAgIHZvaWQgc2hvd1BERkNvbnRleHRNZW51KGNvbnN0IFdlYktpdDo6UERGQ29udGV4dE1l
bnUmLCBPcHRpb25hbDxpbnQzMl90PiYgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBzaG93UERG
Q29udGV4dE1lbnUoY29uc3QgV2ViS2l0OjpQREZDb250ZXh0TWVudSYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoT3B0aW9uYWw8aW50MzJfdD4mJik+JiYpOwogI2VuZGlmCiAgICAgV2ViQ29yZTo6
SW50UmVjdCB2aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Zpc2li
bGVTY3JvbGxlclRodW1iUmVjdDsgfQogCiAgICAgdWludDY0X3QgcmVuZGVyVHJlZVNpemUoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlclRyZWVTaXplOyB9CiAKLSAgICB2b2lkIHByaW50TWFpbkZy
YW1lKCk7Ci0gICAgCiAgICAgdm9pZCBzZXRNZWRpYVZvbHVtZShmbG9hdCk7CiAgICAgdm9pZCBz
ZXRNdXRlZChXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNdXRlZFN0YXRlRmxhZ3MpOwogICAgIHZv
aWQgc2V0TWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdyhib29sKTsKQEAgLTEyNTgsMTEgKzEyNTYs
MTEgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKLSAgICB2b2lk
IHdyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgYm9vbCYgc3VjY2VlZGVkLCBW
ZWN0b3I8dWludDhfdD4mKTsKLSAgICB2b2lkIHVud3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8
dWludDhfdD4mLCBib29sJiBzdWNjZWVkZWQsIFZlY3Rvcjx1aW50OF90PiYpOworICAgIHZvaWQg
d3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wsIFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CisgICAgdm9pZCB1bndyYXBDcnlwdG9L
ZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sLCBW
ZWN0b3I8dWludDhfdD4mJik+JiYpOwogI2VuZGlmCiAKLSAgICB2b2lkIHNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyYg
Y2hhbGxlbmdlU3RyaW5nLCBjb25zdCBVUkwmLCBTdHJpbmcmIHJlc3VsdCk7CisgICAgdm9pZCBz
aWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4LCBj
b25zdCBTdHJpbmcmIGNoYWxsZW5nZVN0cmluZywgY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTdHJpbmcpPiYmKTsKIAogICAgIHZvaWQgdGFrZVNuYXBzaG90KFdlYkNvcmU6Oklu
dFJlY3QsIFdlYkNvcmU6OkludFNpemUgYml0bWFwU2l6ZSwgU25hcHNob3RPcHRpb25zLCBXVEY6
OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgQ2FsbGJhY2tC
YXNlOjpFcnJvcik+JiYpOwogCkBAIC0xMzIyLDkgKzEzMjAsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBpbnN0YWxsQWN0aXZpdHlTdGF0ZUNoYW5nZUNvbXBsZXRpb25IYW5kbGVyKEZ1bmN0aW9uPHZv
aWQoKT4mJik7CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZvaWQgY2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25TZXQ8V2ViQ29yZTo6
VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgaW50MzJfdCBpbnNlcnRpb25Qb2ludCwg
VmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpOworICAgIHZvaWQg
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25TZXQ8V2ViQ29y
ZTo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgaW50MzJfdCBpbnNlcnRpb25Qb2lu
dCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVz
dWx0PiYmKT4mJik7CiAjZW5kaWYKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0
cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBpbnQzMl90IGluc2VydGlvblBvaW50
LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlcyk7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChj
b25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50MzJfdCBpbnNlcnRp
b25Qb2ludCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJik7CiAK
ICAgICB2b2lkIHNldFNob3VsZERpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50cyhib29sKTsKIApA
QCAtMTQzMiw3ICsxNDMwLDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxBUEk6OkF0dGFjaG1lbnQ+
IGF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikgY29uc3Q7
CiAgICAgdm9pZCBpbnNlcnRBdHRhY2htZW50KFJlZjxBUEk6OkF0dGFjaG1lbnQ+JiYsIEZ1bmN0
aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgdXBkYXRlQXR0YWNo
bWVudEF0dHJpYnV0ZXMoY29uc3QgQVBJOjpBdHRhY2htZW50JiwgRnVuY3Rpb248dm9pZChDYWxs
YmFja0Jhc2U6OkVycm9yKT4mJik7Ci0gICAgdm9pZCBzZXJpYWxpemVkQXR0YWNobWVudERhdGFG
b3JJZGVudGlmaWVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIFZlY3RvcjxXZWJDb3JlOjpTZXJp
YWxpemVkQXR0YWNobWVudERhdGE+Jik7CisgICAgdm9pZCBzZXJpYWxpemVkQXR0YWNobWVudERh
dGFGb3JJZGVudGlmaWVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPFdlYkNvcmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YT4mJik+JiYpOwog
ICAgIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIGRpZEludmFsaWRhdGVEYXRhRm9yQXR0YWNobWVudChBUEk6OkF0dGFjaG1lbnQmKTsK
IApAQCAtMTQ4Miw3ICsxNDgwLDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnRVUkxTY2hlbWVU
YXNrU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJz
JiYpOwogICAgIHZvaWQgbG9hZERhdGFXaXRoTmF2aWdhdGlvblNoYXJlZChSZWY8V2ViUHJvY2Vz
c1Byb3h5PiYmLCBBUEk6Ok5hdmlnYXRpb24mLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBj
b25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJp
bmcmIGJhc2VVUkwsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSwgV2ViQ29yZTo6U2hvdWxkVHJlYXRB
c0NvbnRpbnVpbmdMb2FkLCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiYmID0gV1RGOjpu
dWxsb3B0KTsKICAgICB2b2lkIGxvYWRSZXF1ZXN0V2l0aE5hdmlnYXRpb25TaGFyZWQoUmVmPFdl
YlByb2Nlc3NQcm94eT4mJiwgQVBJOjpOYXZpZ2F0aW9uJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiYsIFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3ksIEFQSTo6T2JqZWN0
KiB1c2VyRGF0YSwgV2ViQ29yZTo6U2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkLCBPcHRpb25h
bDxXZWJzaXRlUG9saWNpZXNEYXRhPiYmID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lkIGJhY2tG
b3J3YXJkR29Ub0l0ZW1TaGFyZWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgY29uc3QgV2ViQ29y
ZTo6QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYp
OworICAgIHZvaWQgYmFja0ZvcndhcmRHb1RvSXRlbVNoYXJlZChSZWY8V2ViUHJvY2Vzc1Byb3h5
PiYmLCBjb25zdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik+JiYpOwogICAgIHZvaWQg
ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblN5bmNTaGFyZWQoUmVmPFdlYlByb2Nlc3NQ
cm94eT4mJiwgdWludDY0X3QgZnJhbWVJRCwgYm9vbCBpc01haW5GcmFtZSwgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhJiYsIFdlYkNvcmU6OlBvbGljeUNoZWNrSWRlbnRpZmllciwgdWludDY0
X3QgbmF2aWdhdGlvbklELCBOYXZpZ2F0aW9uQWN0aW9uRGF0YSYmLAogICAgICAgICBGcmFtZUlu
Zm9EYXRhJiYsIHVpbnQ2NF90IG9yaWdpbmF0aW5nUGFnZUlELCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYs
IElQQzo6Rm9ybURhdGFSZWZlcmVuY2UmJiByZXF1ZXN0Qm9keSwKICAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYmIHJlZGlyZWN0UmVzcG9uc2UsIGNvbnN0IFVzZXJEYXRhJiwgTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblN5bmM6
OkRlbGF5ZWRSZXBseSYmKTsKQEAgLTE0OTQsNyArMTQ5Miw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAK
ICNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKLSAgICB2b2lkIHNwZWVjaFN5bnRoZXNpc1Zv
aWNlTGlzdChWZWN0b3I8V2ViU3BlZWNoU3ludGhlc2lzVm9pY2U+JiByZXN1bHQpOworICAgIHZv
aWQgc3BlZWNoU3ludGhlc2lzVm9pY2VMaXN0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PFdlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlPiYmKT4mJik7CiAgICAgdm9pZCBzcGVlY2hTeW50aGVz
aXNTcGVhayhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBmbG9hdCB2b2x1bWUsIGZsb2F0
IHJhdGUsIGZsb2F0IHBpdGNoLCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSwgY29uc3QgU3RyaW5n
JiB2b2ljZVVSSSwgY29uc3QgU3RyaW5nJiB2b2ljZU5hbWUsIGNvbnN0IFN0cmluZyYgdm9pY2VM
YW5nLCBib29sIGxvY2FsU2VydmljZSwgYm9vbCBkZWZhdWx0Vm9pY2UsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBzcGVlY2hTeW50aGVzaXNDYW5jZWwoKTsKICAgICB2
b2lkIHNwZWVjaFN5bnRoZXNpc1BhdXNlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBA
IC0xNTg1LDcgKzE1ODMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkRmluaXNoUHJvZ3Jlc3Mo
KTsKICAgICB2b2lkIHNldE5ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3MoYm9vbCk7CiAKLSAgICB2
b2lkIGhhc0luc2VjdXJlQ29udGVudChXZWJDb3JlOjpIYXNJbnNlY3VyZUNvbnRlbnQmKTsKKyAg
ICB2b2lkIGhhc0luc2VjdXJlQ29udGVudChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6
Okhhc0luc2VjdXJlQ29udGVudCk+JiYpOwogCiAgICAgdm9pZCBkaWREZXN0cm95TmF2aWdhdGlv
bih1aW50NjRfdCBuYXZpZ2F0aW9uSUQpOwogCkBAIC0xNjQxLDE0ICsxNjM5LDE0IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzZXRJc1Jlc2l6YWJsZShib29sIGlzUmVzaXphYmxlKTsKICAgICB2b2lk
IHNjcmVlblRvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNjcmVlblBvaW50LCBN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTY3JlZW5Ub1Jvb3RWaWV3OjpEZWxheWVkUmVwbHkmJik7
CiAgICAgdm9pZCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdS
ZWN0LCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSb290Vmlld1RvU2NyZWVuOjpEZWxheWVkUmVw
bHkmJik7Ci0gICAgdm9pZCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgc2NyZWVuUG9pbnQsIFdlYkNvcmU6OkludFBvaW50JiB3aW5kb3dQb2lu
dCk7Ci0gICAgdm9pZCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiB2aWV3UmVjdCwgV2ViQ29yZTo6SW50UmVjdCYgcmVzdWx0KTsKKyAgICB2b2lk
IGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBz
Y3JlZW5Qb2ludCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpJbnRQb2ludCk+JiYp
OworICAgIHZvaWQgcm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4oY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgdmlld1JlY3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SW50UmVj
dCk+JiYpOwogICAgIHZvaWQgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKHVpbnQ2NF90IGZy
YW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBh
bmVsOjpEZWxheWVkUmVwbHkmJik7CiAgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRp
ZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7CiAgICAgdm9pZCBwYWdlRGlk
U2Nyb2xsKCk7CiAgICAgdm9pZCBydW5PcGVuUGFuZWwodWludDY0X3QgZnJhbWVJRCwgY29uc3Qg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgV2ViQ29yZTo6RmlsZUNob29zZXJT
ZXR0aW5ncyYpOwogICAgIHZvaWQgc2hvd1NoYXJlU2hlZXQoY29uc3QgV2ViQ29yZTo6U2hhcmVE
YXRhV2l0aFBhcnNlZFVSTCYsIFNoYXJlU2hlZXRDYWxsYmFja0lEKTsKLSAgICB2b2lkIHByaW50
RnJhbWUodWludDY0X3QgZnJhbWVJRCk7CisgICAgdm9pZCBwcmludEZyYW1lKHVpbnQ2NF90IGZy
YW1lSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBleGNlZWRlZERh
dGFiYXNlUXVvdGEodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50T3JpZ2luVXNhZ2UsIHVp
bnQ2NF90IGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1aW50NjRfdCBleHBlY3RlZFVzYWdlLCBNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpFeGNlZWRlZERhdGFiYXNlUXVvdGE6OkRlbGF5ZWRSZXBseSYm
KTsKICAgICB2b2lkIHJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoY29uc3QgU3Ry
aW5nJiBvcmlnaW5JZGVudGlmaWVyLCB1aW50NjRfdCBjdXJyZW50UXVvdGEsIHVpbnQ2NF90IHRv
dGFsQnl0ZXNOZWVkZWQsIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlYWNoZWRBcHBsaWNhdGlv
bkNhY2hlT3JpZ2luUXVvdGE6OkRlbGF5ZWRSZXBseSYmKTsKICAgICB2b2lkIHJlcXVlc3RHZW9s
b2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSh1aW50NjRfdCBnZW9sb2NhdGlvbklELCB1aW50NjRf
dCBmcmFtZUlELCBTdHJpbmcgb3JpZ2luSWRlbnRpZmllcik7CkBAIC0xNzE1LDIyICsxNzEzLDIy
IEBAIHByaXZhdGU6CiAKICAgICAvLyBCYWNrL0ZvcndhcmQgbGlzdCBtYW5hZ2VtZW50CiAgICAg
dm9pZCBiYWNrRm9yd2FyZEFkZEl0ZW0oQmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlJiYpOwotICAg
IHZvaWQgYmFja0ZvcndhcmRHb1RvSXRlbShjb25zdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1J
ZGVudGlmaWVyJiwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7Ci0gICAgdm9pZCBiYWNrRm9y
d2FyZEl0ZW1BdEluZGV4KGludDMyX3QgaW5kZXgsIE9wdGlvbmFsPFdlYkNvcmU6OkJhY2tGb3J3
YXJkSXRlbUlkZW50aWZpZXI+Jik7Ci0gICAgdm9pZCBiYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQo
dWludDMyX3QmIGNvdW50KTsKLSAgICB2b2lkIGJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3VudCh1
aW50MzJfdCYgY291bnQpOworICAgIHZvaWQgYmFja0ZvcndhcmRHb1RvSXRlbShjb25zdCBXZWJD
b3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik+JiYpOworICAgIHZvaWQgYmFja0ZvcndhcmRJdGVt
QXRJbmRleChpbnQzMl90IGluZGV4LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdl
YkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXI+JiYpPiYmKTsKKyAgICB2b2lkIGJhY2tG
b3J3YXJkQmFja0xpc3RDb3VudChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJik7
CisgICAgdm9pZCBiYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCh1aW50MzJfdCk+JiYpOwogICAgIHZvaWQgYmFja0ZvcndhcmRDbGVhcigpOwogCiAgICAg
Ly8gVW5kbyBtYW5hZ2VtZW50CiAgICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyhX
ZWJVbmRvU3RlcElEIGNvbW1hbmRJRCwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CiAgICAgdm9pZCBy
ZWdpc3Rlckluc2VydGlvblVuZG9Hcm91cGluZygpOwogICAgIHZvaWQgY2xlYXJBbGxFZGl0Q29t
bWFuZHMoKTsKLSAgICB2b2lkIGNhblVuZG9SZWRvKFVuZG9PclJlZG8sIGJvb2wmIHJlc3VsdCk7
Ci0gICAgdm9pZCBleGVjdXRlVW5kb1JlZG8oVW5kb09yUmVkbyk7CisgICAgdm9pZCBjYW5VbmRv
UmVkbyhVbmRvT3JSZWRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2
b2lkIGV4ZWN1dGVVbmRvUmVkbyhVbmRvT3JSZWRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogCiAgICAgLy8gS2V5Ym9hcmQgaGFuZGxpbmcKICNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICB2b2lkIGV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IsIGJvb2wmIGhhbmRsZWQpOworICAgIHZvaWQgZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0
b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
Jik7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTE3NTQsMTEgKzE3NTIsMTEgQEAg
cHJpdmF0ZToKIAogICAgIC8vIFNlYXJjaCBwb3B1cCByZXN1bHRzCiAgICAgdm9pZCBzYXZlUmVj
ZW50U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlJlY2VudFNl
YXJjaD4mKTsKLSAgICB2b2lkIGxvYWRSZWNlbnRTZWFyY2hlcyhjb25zdCBTdHJpbmcmLCBWZWN0
b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiYpOworICAgIHZvaWQgbG9hZFJlY2VudFNlYXJjaGVz
KGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OlJl
Y2VudFNlYXJjaD4mJik+JiYpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gU3BlZWNo
LgotICAgIHZvaWQgZ2V0SXNTcGVha2luZyhib29sJik7CisgICAgdm9pZCBnZXRJc1NwZWFraW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgc3BlYWsoY29uc3Qg
U3RyaW5nJik7CiAgICAgdm9pZCBzdG9wU3BlYWtpbmcoKTsKIApAQCAtMTc4MSw5ICsxNzc5LDkg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgLy8gU3BlbGxpbmcgYW5kIGdyYW1tYXIuCi0gICAg
dm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBpbnQzMl90JiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgdm9p
ZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJDb3Jl
OjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYg
YmFkR3JhbW1hckxlbmd0aCk7Ci0gICAgdm9pZCBzcGVsbGluZ1VJSXNTaG93aW5nKGJvb2wmKTsK
KyAgICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoaW50MzJfdCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90IG1p
c3NwZWxsaW5nTGVuZ3RoKT4mJik7CisgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25z
dCBTdHJpbmcmIHRleHQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6Okdy
YW1tYXJEZXRhaWw+JiYsIGludDMyX3QgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90IGJhZEdy
YW1tYXJMZW5ndGgpPiYmKTsKKyAgICB2b2lkIHNwZWxsaW5nVUlJc1Nob3dpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOwogICAgIHZvaWQgdXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBo
cmFzZSwgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpOwogICAgIHZvaWQgbGVhcm5Xb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCk7CkBAIC0xODI0LDcgKzE4MjIsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgYXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2soY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZs
b2F0UmVjdD4mLCBjb25zdCBTdHJpbmcmIGZvbnROYW1lLCBmbG9hdCBmb250U2l6ZSwgdWludDY0
X3QgZm9udFRyYWl0cywgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBhdXRvY29ycmVjdGlvbkNvbnRl
eHRDYWxsYmFjayhjb25zdCBXZWJBdXRvY29ycmVjdGlvbkNvbnRleHQmLCBDYWxsYmFja0lEKTsK
ICAgICB2b2lkIHNlbGVjdGlvbkNvbnRleHRDYWxsYmFjayhjb25zdCBTdHJpbmcmIHNlbGVjdGVk
VGV4dCwgY29uc3QgU3RyaW5nJiBiZWZvcmVUZXh0LCBjb25zdCBTdHJpbmcmIGFmdGVyVGV4dCwg
Q2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBFZGl0b3JTdGF0
ZSYsIGJvb2wgaXNDaGFyRXZlbnQsIGJvb2wmIGhhbmRsZWQpOworICAgIHZvaWQgaW50ZXJwcmV0
S2V5RXZlbnQoY29uc3QgRWRpdG9yU3RhdGUmLCBib29sIGlzQ2hhckV2ZW50LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tl
cihib29sIGhhc1ZpZGVvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBlbGVtZW50UmVjdCwgV2Vi
Q29yZTo6Um91dGVTaGFyaW5nUG9saWN5LCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNlbGVj
dGlvblJlY3RzQ2FsbGJhY2soY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+Jiwg
Q2FsbGJhY2tJRCk7CiAKQEAgLTE4NTUsMTYgKzE4NTMsMTYgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgc3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5n
KGJvb2wmKTsKKyAgICB2b2lkIHN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoaW50
MzJfdCBwYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBs
YWNlbWVudFN0cmluZ3MpOwogICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChpbnQzMl90
IHJlYXNvbik7Ci0gICAgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihpbnQzMl90IHJl
YXNvbiwgU3RyaW5nJiByZXN1bHQpOworICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNv
b24oaW50MzJfdCByZWFzb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJik7CiAg
ICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKGludDMyX3QgcmVzcG9uc2VUeXBl
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nKTsKIAogI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQogICAgIHZvaWQgc2hv
d0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGlu
Z0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsKICAgICB2b2lk
IHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsK
LSAgICB2b2lkIGRpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0
LCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KTsKKyAgICB2b2lkIGRpY3RhdGlvbkFsdGVybmF0aXZl
cyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxTdHJpbmc+JiYpPiYmKTsKICNlbmRpZgogCiAgICAgdm9pZCBzZXRFZGl0YWJsZUVsZW1lbnRJ
c0ZvY3VzZWQoYm9vbCk7CkBAIC0xOTA4LDcgKzE5MDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
c2V0UmVuZGVyVHJlZVNpemUodWludDY0X3QgdHJlZVNpemUpIHsgbV9yZW5kZXJUcmVlU2l6ZSA9
IHRyZWVTaXplOyB9CiAKICNpZiBQTEFURk9STShYMTEpCi0gICAgdm9pZCBjcmVhdGVQbHVnaW5D
b250YWluZXIodWludDY0X3QmIHdpbmRvd0lEKTsKKyAgICB2b2lkIGNyZWF0ZVBsdWdpbkNvbnRh
aW5lcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4mJik7CiAgICAgdm9pZCB3aW5k
b3dlZFBsdWdpbkdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZyYW1l
UmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIHVpbnQ2NF90IHdpbmRvd0lE
KTsKICAgICB2b2lkIHdpbmRvd2VkUGx1Z2luVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlz
aWJsZSwgdWludDY0X3Qgd2luZG93SUQpOwogI2VuZGlmCkBAIC0xOTczLDcgKzE5NzEsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZGlkUmVzaWduSW5wdXRFbGVtZW50U3Ryb25nUGFzc3dvcmRBcHBl
YXJhbmNlKGNvbnN0IFVzZXJEYXRhJik7CiAKICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1l
c3NhZ2VCb2R5KTsKLSAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2Fn
ZUJvZHksIFVzZXJEYXRhJiByZXR1cm5Vc2VyRGF0YSk7CisgICAgdm9pZCBoYW5kbGVTeW5jaHJv
bm91c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwg
Y29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJE
YXRhJiYpPiYmKTsKIAogICAgIHZvaWQgdmlld0lzQmVjb21pbmdWaXNpYmxlKCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4J
KHJldmlzaW9uIDI0MzE4MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNjEsOCArNjEsOCBAQCBtZXNzYWdlcyAt
PiBXZWJQYWdlUHJveHkgewogICAgIEdldFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNvcmU6OkZsb2F0
UmVjdCB3aW5kb3dGcmFtZSkgRGVsYXllZAogICAgIFNjcmVlblRvUm9vdFZpZXcoV2ViQ29yZTo6
SW50UG9pbnQgc2NyZWVuUG9pbnQpIC0+IChXZWJDb3JlOjpJbnRQb2ludCB3aW5kb3dQb2ludCkg
RGVsYXllZAogICAgIFJvb3RWaWV3VG9TY3JlZW4oV2ViQ29yZTo6SW50UmVjdCByZWN0KSAtPiAo
V2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFtZSkgRGVsYXllZAotICAgIEFjY2Vzc2liaWxpdHlT
Y3JlZW5Ub1Jvb3RWaWV3KFdlYkNvcmU6OkludFBvaW50IHNjcmVlblBvaW50KSAtPiAoV2ViQ29y
ZTo6SW50UG9pbnQgd2luZG93UG9pbnQpIExlZ2FjeVN5bmMKLSAgICBSb290Vmlld1RvQWNjZXNz
aWJpbGl0eVNjcmVlbihXZWJDb3JlOjpJbnRSZWN0IHJlY3QpIC0+IChXZWJDb3JlOjpJbnRSZWN0
IHNjcmVlbkZyYW1lKSBMZWdhY3lTeW5jCisgICAgQWNjZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZp
ZXcoV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuUG9pbnQpIC0+IChXZWJDb3JlOjpJbnRQb2ludCB3
aW5kb3dQb2ludCkgRGVsYXllZAorICAgIFJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKFdl
YkNvcmU6OkludFJlY3QgcmVjdCkgLT4gKFdlYkNvcmU6OkludFJlY3Qgc2NyZWVuRnJhbWUpIERl
bGF5ZWQKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFNob3dWYWxpZGF0aW9uTWVzc2FnZShX
ZWJDb3JlOjpJbnRSZWN0IGFuY2hvclJlY3QsIFN0cmluZyBtZXNzYWdlKQpAQCAtNzMsNyArNzMs
NyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIFBhZ2VEaWRTY3JvbGwoKQogICAg
IFJ1bk9wZW5QYW5lbCh1aW50NjRfdCBmcmFtZUlELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhIGZyYW1lU2VjdXJpdHlPcmlnaW4sIHN0cnVjdCBXZWJDb3JlOjpGaWxlQ2hvb3Nl
clNldHRpbmdzIHBhcmFtZXRlcnMpCiAgICAgU2hvd1NoYXJlU2hlZXQoc3RydWN0IFdlYkNvcmU6
OlNoYXJlRGF0YVdpdGhQYXJzZWRVUkwgc2hhcmVEYXRhLCB1aW50NjRfdCBjYWxsYmFja0lEKQot
ICAgIFByaW50RnJhbWUodWludDY0X3QgZnJhbWVJRCkgLT4gKCkgTGVnYWN5U3luYworICAgIFBy
aW50RnJhbWUodWludDY0X3QgZnJhbWVJRCkgLT4gKCkgRGVsYXllZAogICAgIFJ1bk1vZGFsKCkK
ICAgICBOb3RpZnlTY3JvbGxlclRodW1iSXNWaXNpYmxlSW5SZWN0KFdlYkNvcmU6OkludFJlY3Qg
c2Nyb2xsZXJUaHVtYikKICAgICBSZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKGlu
dDMyX3QgbmV3U3R5bGUpCkBAIC0xNDMsNyArMTQzLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVBy
b3h5IHsKICAgICBEaWRDaGFuZ2VNYWluRG9jdW1lbnQodWludDY0X3QgZnJhbWVJRCk7CiAgICAg
RGlkRGVzdHJveU5hdmlnYXRpb24odWludDY0X3QgbmF2aWdhdGlvbklEKQogCi0gICAgSGFzSW5z
ZWN1cmVDb250ZW50KCkgLT4gKGVudW06Ym9vbCBXZWJDb3JlOjpIYXNJbnNlY3VyZUNvbnRlbnQg
aGFzSW5zZWN1cmVDb250ZW50KSBMZWdhY3lTeW5jCisgICAgSGFzSW5zZWN1cmVDb250ZW50KCkg
LT4gKGVudW06Ym9vbCBXZWJDb3JlOjpIYXNJbnNlY3VyZUNvbnRlbnQgaGFzSW5zZWN1cmVDb250
ZW50KSBEZWxheWVkCiAKICAgICBNYWluRnJhbWVQbHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVy
ZURpZENoYW5nZShib29sIG1haW5GcmFtZVBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlKQog
CkBAIC0xODcsNyArMTg3LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBBdXRv
Y29ycmVjdGlvbkRhdGFDYWxsYmFjayhWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiB0ZXh0UmVj
dHMsIFN0cmluZyBmb250TmFtZSwgZG91YmxlIGZvbnRTaXplLCB1aW50NjRfdCB0cmFpdHMsIFdl
YktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIEF1dG9jb3JyZWN0aW9uQ29udGV4dENh
bGxiYWNrKHN0cnVjdCBXZWJLaXQ6OldlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCBjb250ZXh0LCBX
ZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBTZWxlY3Rpb25Db250ZXh0Q2FsbGJh
Y2soU3RyaW5nIHNlbGVjdGVkVGV4dCwgU3RyaW5nIGJlZm9yZVRleHQsIFN0cmluZyBhZnRlclRl
eHQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQotICAgIEludGVycHJldEtleUV2ZW50
KHN0cnVjdCBXZWJLaXQ6OkVkaXRvclN0YXRlIHN0YXRlLCBib29sIGlzQ2hhckV2ZW50KSAtPiAo
Ym9vbCBoYW5kbGVkKSBMZWdhY3lTeW5jCisgICAgSW50ZXJwcmV0S2V5RXZlbnQoc3RydWN0IFdl
YktpdDo6RWRpdG9yU3RhdGUgc3RhdGUsIGJvb2wgaXNDaGFyRXZlbnQpIC0+IChib29sIGhhbmRs
ZWQpIERlbGF5ZWQKICAgICBEaWRSZWNlaXZlUG9zaXRpb25JbmZvcm1hdGlvbihzdHJ1Y3QgV2Vi
S2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiBpbmZvcm1hdGlvbikKICAgICBT
YXZlSW1hZ2VUb0xpYnJhcnkoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGUsIHVp
bnQ2NF90IHNpemUpCiAgICAgU2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGJvb2wgaGFzVmlkZW8s
IFdlYkNvcmU6OkludFJlY3QgZWxlbWVudFJlY3QsIGVudW06dWludDhfdCBXZWJDb3JlOjpSb3V0
ZVNoYXJpbmdQb2xpY3kgcG9saWN5LCBTdHJpbmcgcm91dGluZ0NvbnRleHRVSUQpCkBAIC0yMjMs
MTAgKzIyMywxMCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgIyBCYWNrRm9y
d2FyZCBtZXNzYWdlcwogICAgIEJhY2tGb3J3YXJkQWRkSXRlbShzdHJ1Y3QgV2ViS2l0OjpCYWNr
Rm9yd2FyZExpc3RJdGVtU3RhdGUgaXRlbVN0YXRlKQotICAgIEJhY2tGb3J3YXJkR29Ub0l0ZW0o
c3RydWN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXIgaXRlbUlEKSAtPiAoV2Vi
S2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkgTGVn
YWN5U3luYwotICAgIEJhY2tGb3J3YXJkSXRlbUF0SW5kZXgoaW50MzJfdCBpdGVtSW5kZXgpIC0+
IChPcHRpb25hbDxXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyPiBpdGVtSUQpIExl
Z2FjeVN5bmMKLSAgICBCYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQoKSAtPiAodWludDMyX3QgY291
bnQpIExlZ2FjeVN5bmMKLSAgICBCYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQoKSAtPiAodWlu
dDMyX3QgY291bnQpIExlZ2FjeVN5bmMKKyAgICBCYWNrRm9yd2FyZEdvVG9JdGVtKHN0cnVjdCBX
ZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyIGl0ZW1JRCkgLT4gKFdlYktpdDo6U2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpIERlbGF5ZWQKKyAg
ICBCYWNrRm9yd2FyZEl0ZW1BdEluZGV4KGludDMyX3QgaXRlbUluZGV4KSAtPiAoT3B0aW9uYWw8
V2ViQ29yZTo6QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllcj4gaXRlbUlEKSBEZWxheWVkCisgICAg
QmFja0ZvcndhcmRCYWNrTGlzdENvdW50KCkgLT4gKHVpbnQzMl90IGNvdW50KSBEZWxheWVkCisg
ICAgQmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50KCkgLT4gKHVpbnQzMl90IGNvdW50KSBEZWxh
eWVkCiAgICAgQmFja0ZvcndhcmRDbGVhcigpCiAgICAgV2lsbEdvVG9CYWNrRm9yd2FyZExpc3RJ
dGVtKHN0cnVjdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwgYm9v
bCBpblBhZ2VDYWNoZSkKIApAQCAtMjM0LDggKzIzNCw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQ
cm94eSB7CiAgICAgUmVnaXN0ZXJFZGl0Q29tbWFuZEZvclVuZG8odWludDY0X3QgY29tbWFuZElE
LCBTdHJpbmcgbGFiZWwpCiAgICAgQ2xlYXJBbGxFZGl0Q29tbWFuZHMoKQogICAgIFJlZ2lzdGVy
SW5zZXJ0aW9uVW5kb0dyb3VwaW5nKCkKLSAgICBDYW5VbmRvUmVkbyhlbnVtOmJvb2wgV2ViS2l0
OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pIC0+IChib29sIHJlc3VsdCkgTGVnYWN5U3luYwotICAg
IEV4ZWN1dGVVbmRvUmVkbyhlbnVtOmJvb2wgV2ViS2l0OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8p
IC0+ICgpIExlZ2FjeVN5bmMKKyAgICBDYW5VbmRvUmVkbyhlbnVtOmJvb2wgV2ViS2l0OjpVbmRv
T3JSZWRvIHVuZG9PclJlZG8pIC0+IChib29sIHJlc3VsdCkgRGVsYXllZAorICAgIEV4ZWN1dGVV
bmRvUmVkbyhlbnVtOmJvb2wgV2ViS2l0OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pIC0+ICgpIERl
bGF5ZWQKIAogICAgICMgRGlhZ25vc3RpYyBtZXNzYWdlcyBsb2dnaW5nCiAgICAgTG9nRGlhZ25v
c3RpY01lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBkZXNjcmlwdGlvbiwgZW51bTpib29s
IFdlYkNvcmU6OlNob3VsZFNhbXBsZSBzaG91bGRTYW1wbGUpCkBAIC0yOTYsMTQgKzI5NiwxNCBA
QCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgIyBTcGVsbGluZyBhbmQgZ3JhbW1h
ciBtZXNzYWdlcwogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpICAKLSAgICBDaGVja1Rl
eHRPZlBhcmFncmFwaChTdHJpbmcgdGV4dCwgT3B0aW9uU2V0PFdlYkNvcmU6OlRleHRDaGVja2lu
Z1R5cGU+IGNoZWNraW5nVHlwZXMsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQpIC0+IChWZWN0b3I8
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzKSBMZWdhY3lTeW5jCisgICAgQ2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nIHRleHQsIE9wdGlvblNldDxXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzLCBpbnQzMl90IGluc2VydGlvblBvaW50KSAtPiAoVmVj
dG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0cykgRGVsYXllZAogI2VuZGlm
Ci0gICAgQ2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZyB0ZXh0KSAtPiAoaW50MzJfdCBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90IG1pc3NwZWxsaW5nTGVuZ3RoKSBMZWdhY3lTeW5jCi0g
ICAgQ2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nIHRleHQpIC0+IChWZWN0b3I8V2ViQ29yZTo6
R3JhbW1hckRldGFpbD4gcmVzdWx0cywgaW50MzJfdCBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMy
X3QgYmFkR3JhbW1hckxlbmd0aCkgTGVnYWN5U3luYwotICAgIFNwZWxsaW5nVUlJc1Nob3dpbmco
KSAtPiAoYm9vbCBpc1Nob3dpbmcpIExlZ2FjeVN5bmMKKyAgICBDaGVja1NwZWxsaW5nT2ZTdHJp
bmcoU3RyaW5nIHRleHQpIC0+IChpbnQzMl90IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3Qg
bWlzc3BlbGxpbmdMZW5ndGgpIERlbGF5ZWQKKyAgICBDaGVja0dyYW1tYXJPZlN0cmluZyhTdHJp
bmcgdGV4dCkgLT4gKFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiByZXN1bHRzLCBpbnQz
Ml90IGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCBiYWRHcmFtbWFyTGVuZ3RoKSBEZWxheWVk
CisgICAgU3BlbGxpbmdVSUlzU2hvd2luZygpIC0+IChib29sIGlzU2hvd2luZykgRGVsYXllZAog
ICAgIFVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoU3RyaW5nIG1pc3NwZWxsZWRX
b3JkKQogICAgIFVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhTdHJpbmcgYmFkR3Jh
bW1hclBocmFzZSwgc3RydWN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwgZ3JhbW1hckRldGFpbCkK
LSAgICBHZXRHdWVzc2VzRm9yV29yZChTdHJpbmcgd29yZCwgU3RyaW5nIGNvbnRleHQsIGludDMy
X3QgaW5zZXJ0aW9uUG9pbnQpIC0+IChWZWN0b3I8U3RyaW5nPiBndWVzc2VzKSBMZWdhY3lTeW5j
CisgICAgR2V0R3Vlc3Nlc0ZvcldvcmQoU3RyaW5nIHdvcmQsIFN0cmluZyBjb250ZXh0LCBpbnQz
Ml90IGluc2VydGlvblBvaW50KSAtPiAoVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcykgRGVsYXllZAog
ICAgIExlYXJuV29yZChTdHJpbmcgd29yZCkKICAgICBJZ25vcmVXb3JkKFN0cmluZyB3b3JkKQog
ICAgIFJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCwgV2ViQ29yZTo6
VGV4dENoZWNraW5nUmVxdWVzdERhdGEgcmVxdWVzdCwgaW50MzJfdCBpbnNlcnRpb25Qb2ludCkK
QEAgLTMzNiw3ICszMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIERpZFBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwKHN0cnVjdCBXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZv
IGRpY3Rpb25hcnlQb3B1cEluZm8pCiAKICAgICAjIEtleWJvYXJkIGlucHV0IHN1cHBvcnQgbWVz
c2FnZXMKLSAgICBFeGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcihTdHJpbmcgc2VsZWN0b3Ip
IC0+IChib29sIGhhbmRsZWQpIExlZ2FjeVN5bmMKKyAgICBFeGVjdXRlU2F2ZWRDb21tYW5kQnlT
ZWxlY3RvcihTdHJpbmcgc2VsZWN0b3IpIC0+IChib29sIGhhbmRsZWQpIERlbGF5ZWQKIAogICAg
ICMgUmVtb3RlIGFjY2Vzc2liaWxpdHkgbWVzc2FnZXMKICAgICBSZWdpc3RlcldlYlByb2Nlc3NB
Y2Nlc3NpYmlsaXR5VG9rZW4oSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCkBAIC0zNDYsNyArMzQ2
LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBTZXRQbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIHVp
bnQ2NF90IGNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkKIAogICAgICMgU3BlZWNoIG1lc3NhZ2VzCi0g
ICAgR2V0SXNTcGVha2luZygpIC0+IChib29sIGlzU3BlYWtpbmcpIExlZ2FjeVN5bmMKKyAgICBH
ZXRJc1NwZWFraW5nKCkgLT4gKGJvb2wgaXNTcGVha2luZykgRGVsYXllZAogICAgIFNwZWFrKFN0
cmluZyBzdHJpbmcpCiAgICAgU3RvcFNwZWFraW5nKCkKIApAQCAtMzY0LDcgKzM2NCw3IEBAIG1l
c3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAjZW5kaWYKIAogI2lmIFVTRShBUFBLSVQpCi0gICAg
U3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKCkgLT4gKGJvb2wgaXNTaG93aW5nKSBMZWdhY3lT
eW5jCisgICAgU3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKCkgLT4gKGJvb2wgaXNTaG93aW5n
KSBEZWxheWVkCiAjZW5kaWYKICNpZiBVU0UoQVVUT01BVElDX1RFWFRfUkVQTEFDRU1FTlQpCiAg
ICAgdG9nZ2xlU21hcnRJbnNlcnREZWxldGUoKQpAQCAtMzc3LDcgKzM3Nyw3IEBAIG1lc3NhZ2Vz
IC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgIyBBdXRvY29ycmVjdGlvbiBtZXNzYWdlcwogICAgIFNo
b3dDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCBwYW5lbFR5cGUsIFdlYkNvcmU6OkZsb2F0UmVjdCBi
b3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIFN0cmluZyByZXBsYWNlZFN0cmluZywgU3RyaW5n
IHJlcGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50
U3RyaW5ncykKICAgICBEaXNtaXNzQ29ycmVjdGlvblBhbmVsKGludDMyX3QgcmVhc29uKQotICAg
IERpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKGludDMyX3QgcmVhc29uKSAtPiAoU3RyaW5nIHJl
c3VsdCkgTGVnYWN5U3luYworICAgIERpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKGludDMyX3Qg
cmVhc29uKSAtPiAoU3RyaW5nIHJlc3VsdCkgRGVsYXllZAogICAgIFJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UoaW50MzJfdCByZXNwb25zZSwgU3RyaW5nIHJlcGxhY2VkU3RyaW5nLCBTdHJp
bmcgcmVwbGFjZW1lbnRTdHJpbmcpOwogCiAgICAgU2V0RWRpdGFibGVFbGVtZW50SXNGb2N1c2Vk
KGJvb2wgZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKQpAQCAtMzg2LDEyICszODYsMTIgQEAgbWVz
c2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykK
ICAgICBTaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRp
bmdCb3hPZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKICAgICBSZW1v
dmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKLSAgICBE
aWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkgLT4gKFZlY3Rv
cjxTdHJpbmc+IGFsdGVybmF0aXZlcykgTGVnYWN5U3luYworICAgIERpY3RhdGlvbkFsdGVybmF0
aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSAtPiAoVmVjdG9yPFN0cmluZz4gYWx0ZXJu
YXRpdmVzKSBEZWxheWVkCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFgxMSkKICAgICAjIFgxMSB3
aW5kb3dlZCBwbHVnaW4gbWVzc2FnZXMKLSAgICBDcmVhdGVQbHVnaW5Db250YWluZXIoKSAtPiAo
dWludDY0X3Qgd2luZG93SUQpIExlZ2FjeVN5bmMKKyAgICBDcmVhdGVQbHVnaW5Db250YWluZXIo
KSAtPiAodWludDY0X3Qgd2luZG93SUQpIERlbGF5ZWQKICAgICBXaW5kb3dlZFBsdWdpbkdlb21l
dHJ5RGlkQ2hhbmdlKFdlYkNvcmU6OkludFJlY3QgZnJhbWVSZWN0LCBXZWJDb3JlOjpJbnRSZWN0
IGNsaXBSZWN0LCB1aW50NjRfdCB3aW5kb3dJRCkKICAgICBXaW5kb3dlZFBsdWdpblZpc2liaWxp
dHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUsIHVpbnQ2NF90IHdpbmRvd0lEKQogI2VuZGlmCkBA
IC00MjksNyArNDI5LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAogICAgICMgU2Vh
cmNoIHBvcHVwIG1lbnVzCiAgICAgU2F2ZVJlY2VudFNlYXJjaGVzKFN0cmluZyBuYW1lLCBWZWN0
b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiBzZWFyY2hJdGVtcykKLSAgICBMb2FkUmVjZW50U2Vh
cmNoZXMoU3RyaW5nIG5hbWUpIC0+IChWZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiByZXN1
bHQpIExlZ2FjeVN5bmMKKyAgICBMb2FkUmVjZW50U2VhcmNoZXMoU3RyaW5nIG5hbWUpIC0+IChW
ZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiByZXN1bHQpIERlbGF5ZWQKIAogICAgIFNhdmVQ
REZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCBv
cmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCiAKQEAgLTQzOSw3ICs0Mzks
NyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogI2VuZGlmCiAKICNpZiBFTkFCTEUoUERG
S0lUX1BMVUdJTikKLSAgICBTaG93UERGQ29udGV4dE1lbnUoc3RydWN0IFdlYktpdDo6UERGQ29u
dGV4dE1lbnUgY29udGV4dE1lbnUpIC0+IChPcHRpb25hbDxpbnQzMl90PiBzZWxlY3RlZEl0ZW0p
IExlZ2FjeVN5bmMKKyAgICBTaG93UERGQ29udGV4dE1lbnUoc3RydWN0IFdlYktpdDo6UERGQ29u
dGV4dE1lbnUgY29udGV4dE1lbnUpIC0+IChPcHRpb25hbDxpbnQzMl90PiBzZWxlY3RlZEl0ZW0p
IERlbGF5ZWQKICNlbmRpZgogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC00
NTEsOCArNDUxLDggQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBEaWRTYXZlVG9Q
YWdlQ2FjaGUoKQogCiAjaWYgRU5BQkxFKFdFQl9DUllQVE8pCi0gICAgV3JhcENyeXB0b0tleShW
ZWN0b3I8dWludDhfdD4ga2V5KSAtPiAoYm9vbCBzdWNjZWVkZWQsIFZlY3Rvcjx1aW50OF90PiB3
cmFwcGVkS2V5KSBMZWdhY3lTeW5jCi0gICAgVW53cmFwQ3J5cHRvS2V5KFZlY3Rvcjx1aW50OF90
PiB3cmFwcGVkS2V5KSAtPiAoYm9vbCBzdWNjZWVkZWQsIFZlY3Rvcjx1aW50OF90PiBrZXkpIExl
Z2FjeVN5bmMKKyAgICBXcmFwQ3J5cHRvS2V5KFZlY3Rvcjx1aW50OF90PiBrZXkpIC0+IChib29s
IHN1Y2NlZWRlZCwgVmVjdG9yPHVpbnQ4X3Q+IHdyYXBwZWRLZXkpIERlbGF5ZWQKKyAgICBVbndy
YXBDcnlwdG9LZXkoVmVjdG9yPHVpbnQ4X3Q+IHdyYXBwZWRLZXkpIC0+IChib29sIHN1Y2NlZWRl
ZCwgVmVjdG9yPHVpbnQ4X3Q+IGtleSkgRGVsYXllZAogI2VuZGlmCiAKIApAQCAtNDg1LDcgKzQ4
NSw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgRGlkUGVyZm9ybUltbWVkaWF0
ZUFjdGlvbkhpdFRlc3Qoc3RydWN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEgcmVzdWx0
LCBib29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEp
CiAjZW5kaWYKICAgICBIYW5kbGVNZXNzYWdlKFN0cmluZyBtZXNzYWdlTmFtZSwgV2ViS2l0OjpV
c2VyRGF0YSBtZXNzYWdlQm9keSkgV2FudHNDb25uZWN0aW9uCi0gICAgSGFuZGxlU3luY2hyb25v
dXNNZXNzYWdlKFN0cmluZyBtZXNzYWdlTmFtZSwgV2ViS2l0OjpVc2VyRGF0YSBtZXNzYWdlQm9k
eSkgLT4gKFdlYktpdDo6VXNlckRhdGEgcmV0dXJuRGF0YSkgTGVnYWN5U3luYyBXYW50c0Nvbm5l
Y3Rpb24KKyAgICBIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VOYW1lLCBX
ZWJLaXQ6OlVzZXJEYXRhIG1lc3NhZ2VCb2R5KSAtPiAoV2ViS2l0OjpVc2VyRGF0YSByZXR1cm5E
YXRhKSBEZWxheWVkIFdhbnRzQ29ubmVjdGlvbgogCiAgICAgSGFuZGxlQXV0b0ZpbGxCdXR0b25D
bGljayhXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQogCkBAIC01NDYsMTMgKzU0NiwxMyBAQCBt
ZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIENsb25lQXR0YWNobWVudERhdGEoU3RyaW5n
IGZyb21JZGVudGlmaWVyLCBTdHJpbmcgdG9JZGVudGlmaWVyKQogICAgIERpZEluc2VydEF0dGFj
aG1lbnRXaXRoSWRlbnRpZmllcihTdHJpbmcgaWRlbnRpZmllciwgU3RyaW5nIHNvdXJjZSwgYm9v
bCBoYXNFbmNsb3NpbmdJbWFnZSkKICAgICBEaWRSZW1vdmVBdHRhY2htZW50V2l0aElkZW50aWZp
ZXIoU3RyaW5nIGlkZW50aWZpZXIpCi0gICAgU2VyaWFsaXplZEF0dGFjaG1lbnREYXRhRm9ySWRl
bnRpZmllcnMoVmVjdG9yPFN0cmluZz4gaWRlbnRpZmllcnMpIC0+IChWZWN0b3I8V2ViQ29yZTo6
U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiBzZXJhbGl6ZWREYXRhKSBMZWdhY3lTeW5jCisgICAg
U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhRm9ySWRlbnRpZmllcnMoVmVjdG9yPFN0cmluZz4gaWRl
bnRpZmllcnMpIC0+IChWZWN0b3I8V2ViQ29yZTo6U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiBz
ZXJhbGl6ZWREYXRhKSBEZWxheWVkCiAjZW5kaWYKIAotICAgIFNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIFN0cmluZyBjaGFsbGVuZ2VTdHJp
bmcsIFVSTCB1cmwpIC0+IChTdHJpbmcgcmVzdWx0KSBMZWdhY3lTeW5jCisgICAgU2lnbmVkUHVi
bGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgU3RyaW5nIGNo
YWxsZW5nZVN0cmluZywgVVJMIHVybCkgLT4gKFN0cmluZyByZXN1bHQpIERlbGF5ZWQKIAogI2lm
IEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFNwZWVjaFN5bnRoZXNpc1ZvaWNlTGlzdCgp
IC0+IChWZWN0b3I8V2ViS2l0OjpXZWJTcGVlY2hTeW50aGVzaXNWb2ljZT4gdm9pY2VMaXN0KSBM
ZWdhY3lTeW5jCisgICAgU3BlZWNoU3ludGhlc2lzVm9pY2VMaXN0KCkgLT4gKFZlY3RvcjxXZWJL
aXQ6OldlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlPiB2b2ljZUxpc3QpIERlbGF5ZWQKICAgICBTcGVl
Y2hTeW50aGVzaXNTcGVhayhTdHJpbmcgdGV4dCwgU3RyaW5nIGxhbmcsIGZsb2F0IHZvbHVtZSwg
ZmxvYXQgcmF0ZSwgZmxvYXQgcGl0Y2gsIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lLCBTdHJpbmcg
dm9pY2VVUkksIFN0cmluZyB2b2ljZU5hbWUsIFN0cmluZyB2b2ljZUxhbmcsIGJvb2wgbG9jYWxT
ZXJ2aWNlLCBib29sIGRlZmF1bHRWb2ljZSkgLT4gKCkgQXN5bmMKICAgICBTcGVlY2hTeW50aGVz
aXNDYW5jZWwoKQogICAgIFNwZWVjaFN5bnRoZXNpc1BhdXNlKCkgLT4gKCkgQXN5bmMKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29h
Lm1tCShyZXZpc2lvbiAyNDMxODApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQYWdlUHJveHlDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjMsMTQgKzYzLDE0IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpzYXZlUmVjZW50U2VhcmNoZXMoY28KICAgICBXZWJDb3JlOjpzYXZl
UmVjZW50U2VhcmNoZXMobmFtZSwgc2VhcmNoSXRlbXMpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94
eTo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IFN0cmluZyYgbmFtZSwgVmVjdG9yPFdlYkNvcmU6
OlJlY2VudFNlYXJjaD4mIHNlYXJjaEl0ZW1zKQordm9pZCBXZWJQYWdlUHJveHk6OmxvYWRSZWNl
bnRTZWFyY2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPFdlYkNvcmU6OlJlY2VudFNlYXJjaD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgaWYgKCFuYW1lKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3Nh
Z2UgY2hlY2suCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKHsgfSk7CiAgICAgfQogCi0gICAgc2VhcmNoSXRlbXMgPSBXZWJDb3JlOjpsb2FkUmVjZW50
U2VhcmNoZXMobmFtZSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoV2ViQ29yZTo6bG9hZFJlY2Vu
dFNlYXJjaGVzKG5hbWUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmJlZ2luU2FmZUJyb3dz
aW5nQ2hlY2soY29uc3QgVVJMJiB1cmwsIGJvb2wgZm9yTWFpbkZyYW1lTmF2aWdhdGlvbiwgV2Vi
RnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5JiBsaXN0ZW5lcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCShyZXZpc2lvbiAyNDMxODAp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAyLDE1ICsxMDIsMTYgQEAgc3RhdGljIGdib29sZWFuIHBsdWdpbkNv
bnRhaW5lclBsdWdSZW1vdgogICAgIHJldHVybiBGQUxTRTsKIH0KIAotdm9pZCBXZWJQYWdlUHJv
eHk6OmNyZWF0ZVBsdWdpbkNvbnRhaW5lcih1aW50NjRfdCYgd2luZG93SUQpCit2b2lkIFdlYlBh
Z2VQcm94eTo6Y3JlYXRlUGx1Z2luQ29udGFpbmVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWlu
dDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKFdlYkNv
cmU6OlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpLnR5cGUoKSA9PSBXZWJDb3JlOjpQ
bGF0Zm9ybURpc3BsYXk6OlR5cGU6OlgxMSk7CiAgICAgR3RrV2lkZ2V0KiBzb2NrZXQgPSBndGtf
c29ja2V0X25ldygpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc29ja2V0LCAicGx1Zy1yZW1vdmVk
IiwgR19DQUxMQkFDSyhwbHVnaW5Db250YWluZXJQbHVnUmVtb3ZlZCksIDApOwogICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIodmlld1dpZGdldCgpKSwgc29ja2V0KTsKIAotICAg
IHdpbmRvd0lEID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGd0a19zb2NrZXRfZ2V0X2lkKEdUS19T
T0NLRVQoc29ja2V0KSkpOworICAgIHVpbnQ2NF90IHdpbmRvd0lEID0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGd0a19zb2NrZXRfZ2V0X2lkKEdUS19TT0NLRVQoc29ja2V0KSkpOwogICAgIHBsdWdp
bldpbmRvd01hcCgpLnNldCh3aW5kb3dJRCwgc29ja2V0KTsKKyAgICBjb21wbGV0aW9uSGFuZGxl
cih3aW5kb3dJRCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojp3aW5kb3dlZFBsdWdpbkdlb21l
dHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZyYW1lUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIHVpbnQ2NF90IHdpbmRvd0lEKQpJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAy
NDMxODApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC03NDEsMTAgKzc0MSwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0CiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpNb3ZlU2VsZWN0aW9uQnlPZmZzZXQob2Zmc2V0LCBjYWxsYmFja0lEKSwgbV9wYWdlSUQp
OwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6aW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgRWRpdG9y
U3RhdGUmIHN0YXRlLCBib29sIGlzQ2hhckV2ZW50LCBib29sJiBoYW5kbGVkKQordm9pZCBXZWJQ
YWdlUHJveHk6OmludGVycHJldEtleUV2ZW50KGNvbnN0IEVkaXRvclN0YXRlJiBzdGF0ZSwgYm9v
bCBpc0NoYXJFdmVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBtX2VkaXRvclN0YXRlID0gc3RhdGU7Ci0gICAgaGFuZGxlZCA9IHBh
Z2VDbGllbnQoKS5pbnRlcnByZXRLZXlFdmVudChtX2tleUV2ZW50UXVldWUuZmlyc3QoKSwgaXND
aGFyRXZlbnQpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKHBhZ2VDbGllbnQoKS5pbnRlcnByZXRL
ZXlFdmVudChtX2tleUV2ZW50UXVldWUuZmlyc3QoKSwgaXNDaGFyRXZlbnQpKTsKIH0KIAogLy8g
Q29tcGxleCB0ZXh0IGlucHV0IHN1cHBvcnQgZm9yIHBsdWctaW5zLgpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiAyNDMx
ODApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsMTAgKzEzMSwxMCBAQCBTdHJpbmcgV2ViUGFnZVByb3h5Ojpz
dGFuZGFyZFVzZXJBZ2VudChjCiAgICAgcmV0dXJuIHN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxp
Y2F0aW9uTmFtZShhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpOwogfQogCi12b2lkIFdlYlBh
Z2VQcm94eTo6Z2V0SXNTcGVha2luZyhib29sJiBpc1NwZWFraW5nKQordm9pZCBXZWJQYWdlUHJv
eHk6OmdldElzU3BlYWtpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJp
dmlsZWdlOjpDYW5Db21tdW5pY2F0ZVdpdGhXaW5kb3dTZXJ2ZXIpKTsKLSAgICBpc1NwZWFraW5n
ID0gW05TQXBwIGlzU3BlYWtpbmddOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFtOU0FwcCBpc1Nw
ZWFraW5nXSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzcGVhayhjb25zdCBTdHJpbmcmIHN0
cmluZykKQEAgLTQwNCwxMSArNDA0LDExIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQbHVnaW5D
b21wbGV4VGV4dEkKICAgICBwYWdlQ2xpZW50KCkuc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0
YXRlKHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBzdGF0aWNfY2FzdDxQbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGU+KHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkpOwogfQog
Ci12b2lkIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3Qg
U3RyaW5nJiBzZWxlY3RvciwgYm9vbCYgaGFuZGxlZCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpleGVj
dXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIE1FU1NB
R0VfQ0hFQ0soaXNWYWxpZEtleXByZXNzQ29tbWFuZE5hbWUoc2VsZWN0b3IpKTsKIAotICAgIGhh
bmRsZWQgPSBwYWdlQ2xpZW50KCkuZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3Ioc2VsZWN0
b3IpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKHBhZ2VDbGllbnQoKS5leGVjdXRlU2F2ZWRDb21t
YW5kQnlTZWxlY3RvcihzZWxlY3RvcikpOwogfQogCiBib29sIFdlYlBhZ2VQcm94eTo6c2hvdWxk
RGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50KGNvbnN0IFdlYktpdDo6V2ViTW91c2VFdmVudCYg
ZXZlbnQpCkBAIC01NDgsMTAgKzU0OCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6b3BlblBERkZy
b21UZW1wb3JhcnlGCiB9CiAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKLXZvaWQgV2ViUGFn
ZVByb3h5OjpzaG93UERGQ29udGV4dE1lbnUoY29uc3QgV2ViS2l0OjpQREZDb250ZXh0TWVudSYg
Y29udGV4dE1lbnUsIE9wdGlvbmFsPGludDMyX3Q+JiBzZWxlY3RlZEluZGV4KQordm9pZCBXZWJQ
YWdlUHJveHk6OnNob3dQREZDb250ZXh0TWVudShjb25zdCBXZWJLaXQ6OlBERkNvbnRleHRNZW51
JiBjb250ZXh0TWVudSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxpbnQzMl90PiYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWNvbnRleHRNZW51Lm1faXRlbXMu
c2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxl
cihXVEY6Om51bGxvcHQpOwogICAgIAogICAgIFJldGFpblB0cjxXS1BERk1lbnVUYXJnZXQ+IG1l
bnVUYXJnZXQgPSBhZG9wdE5TKFtbV0tQREZNZW51VGFyZ2V0IGFsbG9jXSBpbml0XSk7CiAgICAg
UmV0YWluUHRyPE5TTWVudT4gbnNNZW51ID0gYWRvcHROUyhbW05TTWVudSBhbGxvY10gaW5pdF0p
OwpAQCAtNTg0LDcgKzU4NCw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzaG93UERGQ29udGV4dE1l
bnUoY28KICAgICBbTlNNZW51IHBvcFVwQ29udGV4dE1lbnU6bnNNZW51LmdldCgpIHdpdGhFdmVu
dDpldmVudCBmb3JWaWV3OnZpZXddOwogCiAgICAgaWYgKGF1dG8gc2VsZWN0ZWRNZW51SXRlbSA9
IFttZW51VGFyZ2V0IHNlbGVjdGVkTWVudUl0ZW1dKQotICAgICAgICBzZWxlY3RlZEluZGV4ID0g
W3NlbGVjdGVkTWVudUl0ZW0gdGFnXTsKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KFtzZWxlY3RlZE1lbnVJdGVtIHRhZ10pOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVs
bG9wdCk7CiB9CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365496</attachid>
            <date>2019-03-20 23:34:31 -0700</date>
            <delta_ts>2019-03-21 00:06:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196056-20190320233430.patch</filename>
            <type>text/plain</type>
            <size>58319</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDMyNzgpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE5LTAzLTIwICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3RvcCB1c2luZyBM
ZWdhY3lTeW5jIG1lc3NhZ2VzIGluIFdlYlBhZ2VQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2MDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5
Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9hZFJlY2VudFNlYXJj
aGVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6YmFja0ZvcndhcmRHb1RvSXRlbSk6
CisgICAgICAgIChXZWJLaXQ6OlByb3Zpc2lvbmFsUGFnZVByb3h5OjpkaWRSZWNlaXZlU3luY01l
c3NhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6aGFzSW5zZWN1cmVDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjphY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6cm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnByaW50RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmJhY2tGb3J3YXJkR29Ub0l0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmJhY2tGb3J3YXJkR29Ub0l0ZW1TaGFyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmJhY2tGb3J3YXJkSXRlbUF0SW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmJhY2tGb3J3YXJkQmFja0xpc3RDb3VudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6YmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpjYW5VbmRvUmVkbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6ZXhlY3V0ZVVuZG9SZWRvKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpj
aGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2hl
Y2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjaGVj
a0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3BlbGxp
bmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0R3Vlc3Nl
c0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN1YnN0aXR1dGlvbnNQ
YW5lbElzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvd0NvcnJl
Y3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbFNvb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY29yZEF1
dG9jb3JyZWN0aW9uUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRp
Y3RhdGlvbkFsdGVybmF0aXZlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6d3Jh
cENyeXB0b0tleSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dW53cmFwQ3J5cHRv
S2V5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaWduZWRQdWJsaWNLZXlBbmRD
aGFsbGVuZ2VTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlcmlhbGl6
ZWRBdHRhY2htZW50RGF0YUZvcklkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpzcGVlY2hTeW50aGVzaXNWb2ljZUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnByaW50TWFpbkZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y3JlYXRlUGx1Z2luQ29udGFpbmVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjppbnRlcnByZXRLZXlFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL21h
Yy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0
SXNTcGVha2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZXhlY3V0ZVNhdmVk
Q29tbWFuZEJ5U2VsZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3dQ
REZDb250ZXh0TWVudSk6CisKIDIwMTktMDMtMjAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBw
bGUuY29tPgogCiAgICAgICAgIENvbXB1dGUgcXVvdGEgYWZ0ZXIgbmV0d29yayBwcm9jZXNzIHJl
c3RhcnQgYmFzZWQgb24gZGVmYXVsdCBxdW90YSBhbmQgc3BhY2UgdXNlZApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmNwcAkocmV2aXNp
b24gMjQzMTgwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsOSArMzAzLDkgQEAgdm9pZCBQcm92aXNpb25h
bFBhZ2VQcm94eTo6c3RhcnRVUkxTY2hlbQogICAgIG1fcGFnZS5zdGFydFVSTFNjaGVtZVRhc2tT
aGFyZWQobV9wcm9jZXNzLmNvcHlSZWYoKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiB9CiAKLXZv
aWQgUHJvdmlzaW9uYWxQYWdlUHJveHk6OmJhY2tGb3J3YXJkR29Ub0l0ZW0oY29uc3QgV2ViQ29y
ZTo6QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYgaWRlbnRpZmllciwgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlJiBoYW5kbGUpCit2b2lkIFByb3Zpc2lvbmFsUGFnZVByb3h5OjpiYWNrRm9yd2Fy
ZEdvVG9JdGVtKGNvbnN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGlkZW50
aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fcGFnZS5iYWNrRm9yd2FyZEdvVG9JdGVt
U2hhcmVkKG1fcHJvY2Vzcy5jb3B5UmVmKCksIGlkZW50aWZpZXIsIGhhbmRsZSk7CisgICAgbV9w
YWdlLmJhY2tGb3J3YXJkR29Ub0l0ZW1TaGFyZWQobV9wcm9jZXNzLmNvcHlSZWYoKSwgaWRlbnRp
ZmllciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFByb3Zpc2lvbmFs
UGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uU3luYyh1aW50NjRfdCBm
cmFtZUlELCBib29sIGlzTWFpbkZyYW1lLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiBm
cmFtZVNlY3VyaXR5T3JpZ2luLCBXZWJDb3JlOjpQb2xpY3lDaGVja0lkZW50aWZpZXIgaWRlbnRp
ZmllciwKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIFByb3Zpc2lvbmFsUGFnZVByb3h5OjpkaWRS
ZWNlaXZlTWVzCiB2b2lkIFByb3Zpc2lvbmFsUGFnZVByb3h5OjpkaWRSZWNlaXZlU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0
ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCiB7CiAgICAgaWYgKGRl
Y29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2Fy
ZEdvVG9JdGVtOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlTGVnYWN5U3lu
YzxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEdvVG9JdGVtPihkZWNvZGVyLCAq
cmVwbHlFbmNvZGVyLCB0aGlzLCAmUHJvdmlzaW9uYWxQYWdlUHJveHk6OmJhY2tGb3J3YXJkR29U
b0l0ZW0pOworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2VEZWxheWVkPE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkJhY2tGb3J3YXJkR29Ub0l0ZW0+KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5
RW5jb2RlciwgdGhpcywgJlByb3Zpc2lvbmFsUGFnZVByb3h5OjpiYWNrRm9yd2FyZEdvVG9JdGVt
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNDMxODApCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDIsNyArMTAyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZENvbW1pdExvYWRGb3JG
cmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlkZXIsIHVpbnQzMl90
IGZyYW1lTG9hZFR5cGUsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYsIGJvb2wgY29u
dGFpbnNQbHVnaW5Eb2N1bWVudCwgT3B0aW9uYWw8V2ViQ29yZTo6SGFzSW5zZWN1cmVDb250ZW50
PiBmb3JjZWRIYXNJbnNlY3VyZUNvbnRlbnQsIGNvbnN0IFVzZXJEYXRhJik7CiAgICAgdm9pZCBk
aWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBmcmFtZVNlY3VyaXR5T3JpZ2luLCB1aW50NjRfdCBu
YXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmluZyYgcHJvdmlzaW9uYWxVUkwsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlRXJyb3ImLCBjb25zdCBVc2VyRGF0YSYpOwogICAgIHZvaWQgc3RhcnRVUkxTY2hl
bWVUYXNrKFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzJiYpOwotICAgIHZvaWQgYmFja0ZvcndhcmRH
b1RvSXRlbShjb25zdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiwgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlJik7CisgICAgdm9pZCBiYWNrRm9yd2FyZEdvVG9JdGVtKGNvbnN0
IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKT4mJik7CiAgICAgdm9pZCBkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uU3luYyh1aW50NjRfdCBmcmFtZUlELCBib29sIGlzTWFpbkZy
YW1lLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgV2ViQ29yZTo6UG9saWN5Q2hlY2tJ
ZGVudGlmaWVyLCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIE5hdmlnYXRpb25BY3Rpb25EYXRhJiYs
CiAgICAgICAgIEZyYW1lSW5mb0RhdGEmJiwgdWludDY0X3Qgb3JpZ2luYXRpbmdQYWdlSUQsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmJiwgSVBDOjpGb3JtRGF0YVJlZmVyZW5jZSYmIHJlcXVlc3RCb2R5LAog
ICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVkaXJlY3RSZXNwb25zZSwgY29u
c3QgVXNlckRhdGEmLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uU3luYzo6RGVsYXllZFJlcGx5JiYpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyNDMxODApCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDQsMTYg
KzcwNCwxNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlTWVzc2FnZShJUEM6OkNvCiAgICAg
bV9pbmplY3RlZEJ1bmRsZUNsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5k
bGUodGhpcywgbWVzc2FnZU5hbWUsIG1fcHJvY2Vzcy0+dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0
cyhtZXNzYWdlQm9keS5vYmplY3QoKSkuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6
aGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBVc2Vy
RGF0YSYgcmV0dXJuVXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlU3luY2hyb25v
dXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFVzZXJEYXRhJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChtX3By
b2Nlc3MtPmNvbm5lY3Rpb24oKSA9PSAmY29ubmVjdGlvbik7CiAKICAgICBpZiAoIW1faW5qZWN0
ZWRCdW5kbGVDbGllbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKHsgfSk7CiAKICAgICBSZWZQdHI8QVBJOjpPYmplY3Q+IHJldHVybkRhdGE7CiAg
ICAgbV9pbmplY3RlZEJ1bmRsZUNsaWVudC0+ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZSh0aGlzLCBtZXNzYWdlTmFtZSwgbV9wcm9jZXNzLT50cmFuc2Zvcm1I
YW5kbGVzVG9PYmplY3RzKG1lc3NhZ2VCb2R5Lm9iamVjdCgpKS5nZXQoKSwgcmV0dXJuRGF0YSk7
Ci0gICAgcmV0dXJuVXNlckRhdGEgPSBVc2VyRGF0YShtX3Byb2Nlc3MtPnRyYW5zZm9ybU9iamVj
dHNUb0hhbmRsZXMocmV0dXJuRGF0YS5nZXQoKSkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFVz
ZXJEYXRhKG1fcHJvY2Vzcy0+dHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyhyZXR1cm5EYXRhLmdl
dCgpKSkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6bGF1bmNoUHJvY2Vzcyhjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgcmVnaXN0cmFibGVEb21haW4pCkBAIC0zODYxLDkgKzM4NjEsOSBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6c2V0TmV0d29ya1JlcXVlc3RzSW5QCiAgICAgbV9wYWdlTG9hZFN0
YXRlLnNldE5ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3ModHJhbnNhY3Rpb24sIG5ldHdvcmtSZXF1
ZXN0c0luUHJvZ3Jlc3MpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6aGFzSW5zZWN1cmVDb250
ZW50KEhhc0luc2VjdXJlQ29udGVudCYgaGFzSW5zZWN1cmVDb250ZW50KQordm9pZCBXZWJQYWdl
UHJveHk6Omhhc0luc2VjdXJlQ29udGVudChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6
Okhhc0luc2VjdXJlQ29udGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaGFzSW5z
ZWN1cmVDb250ZW50ID0gbV9wYWdlTG9hZFN0YXRlLmNvbW1pdHRlZEhhc0luc2VjdXJlQ29udGVu
dCgpID8gSGFzSW5zZWN1cmVDb250ZW50OjpZZXMgOiBIYXNJbnNlY3VyZUNvbnRlbnQ6Ok5vOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcGFnZUxvYWRTdGF0ZS5jb21taXR0ZWRIYXNJbnNlY3Vy
ZUNvbnRlbnQoKSA/IEhhc0luc2VjdXJlQ29udGVudDo6WWVzIDogSGFzSW5zZWN1cmVDb250ZW50
OjpObyk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWREZXN0cm95TmF2aWdhdGlvbih1aW50
NjRfdCBuYXZpZ2F0aW9uSUQpCkBAIC01MjE4LDE0ICs1MjE4LDE0IEBAIEludFJlY3QgV2ViUGFn
ZVByb3h5OjpzeW5jUm9vdFZpZXdUb1NjcmUKICAgICByZXR1cm4gcGFnZUNsaWVudCgpLnJvb3RW
aWV3VG9TY3JlZW4odmlld1JlY3QpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6YWNjZXNzaWJp
bGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHNjcmVlblBvaW50LCBJbnRQb2lu
dCYgd2luZG93UG9pbnQpCit2b2lkIFdlYlBhZ2VQcm94eTo6YWNjZXNzaWJpbGl0eVNjcmVlblRv
Um9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHNjcmVlblBvaW50LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKEludFBvaW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICB3aW5kb3dQb2ludCA9
IHBhZ2VDbGllbnQoKS5hY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290VmlldyhzY3JlZW5Qb2ludCk7
CisgICAgY29tcGxldGlvbkhhbmRsZXIocGFnZUNsaWVudCgpLmFjY2Vzc2liaWxpdHlTY3JlZW5U
b1Jvb3RWaWV3KHNjcmVlblBvaW50KSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpyb290Vmll
d1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBJbnRSZWN0JiB2aWV3UmVjdCwgSW50UmVjdCYg
cmVzdWx0KQordm9pZCBXZWJQYWdlUHJveHk6OnJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVu
KGNvbnN0IEludFJlY3QmIHZpZXdSZWN0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEludFJlY3Qp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIHJlc3VsdCA9IHBhZ2VDbGllbnQoKS5yb290
Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbih2aWV3UmVjdCk7CisgICAgY29tcGxldGlvbkhhbmRs
ZXIocGFnZUNsaWVudCgpLnJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKHZpZXdSZWN0KSk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwodWlu
dDY0X3QgZnJhbWVJRCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbiwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5CZWZvcmVV
bmxvYWRDb25maXJtUGFuZWw6OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQpAQCAtNTMwNyw3ICs1MzA3
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNob3dTaGFyZVNoZWV0KGNvbnN0IAogICAgIHBhZ2VD
bGllbnQoKS5zaG93U2hhcmVTaGVldChzaGFyZURhdGEsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KICAgICAKLXZvaWQgV2ViUGFnZVByb3h5OjpwcmludEZyYW1lKHVpbnQ2NF90IGZy
YW1lSUQpCit2b2lkIFdlYlBhZ2VQcm94eTo6cHJpbnRGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKCFtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uKTsKICAgICBtX2lzUGVyZm9ybWlu
Z0RPTVByaW50T3BlcmF0aW9uID0gdHJ1ZTsKQEAgLTUzMTksMTEgKzUzMTksOCBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6cHJpbnRGcmFtZSh1aW50NjRfdCBmCiAKICAgICBlbmRQcmludGluZygpOyAv
LyBTZW5kIGEgbWVzc2FnZSBzeW5jaHJvbm91c2x5IHdoaWxlIG1faXNQZXJmb3JtaW5nRE9NUHJp
bnRPcGVyYXRpb24gaXMgc3RpbGwgdHJ1ZS4KICAgICBtX2lzUGVyZm9ybWluZ0RPTVByaW50T3Bl
cmF0aW9uID0gZmFsc2U7Ci19CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpwcmludE1haW5GcmFtZSgp
Ci17Ci0gICAgcHJpbnRGcmFtZShtX21haW5GcmFtZS0+ZnJhbWVJRCgpKTsKKyAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0TWVkaWFWb2x1bWUoZmxv
YXQgdm9sdW1lKQpAQCAtNTYwNiw0NiArNTYwMyw0OCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6YmFj
a0ZvcndhcmRBZGRJdGVtKEJhCiAgICAgbV9iYWNrRm9yd2FyZExpc3QtPmFkZEl0ZW0oV1RGTW92
ZShpdGVtKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZEdvVG9JdGVtKGNv
bnN0IEJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGl0ZW1JRCwgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQordm9pZCBXZWJQYWdlUHJveHk6OmJhY2tG
b3J3YXJkR29Ub0l0ZW0oY29uc3QgQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYgaXRlbUlELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICAvLyBPbiBwcm9jZXNzIHN3YXAsIHdlIHRlbGwgdGhlIHBy
ZXZpb3VzIHByb2Nlc3MgdG8gaWdub3JlIHRoZSBsb2FkLCB3aGljaCBjYXVzZXMgaXQgc28gcmVz
dG9yZSBpdHMgY3VycmVudCBiYWNrIGZvcndhcmQgaXRlbSB0byBpdHMgcHJldmlvdXMKICAgICAv
LyB2YWx1ZS4gU2luY2UgdGhlIGxvYWQgaXMgcmVhbGx5IGdvaW5nIG9uIGluIGEgbmV3IHByb3Zp
c2lvbmFsIHByb2Nlc3MsIHdlIHdhbnQgdG8gaWdub3JlIHN1Y2ggcmVxdWVzdHMgZnJvbSB0aGUg
Y29tbWl0dGVkIHByb2Nlc3MuCiAgICAgLy8gQW55IHJlYWwgbmV3IGxvYWQgaW4gdGhlIGNvbW1p
dHRlZCBwcm9jZXNzIHdvdWxkIGhhdmUgY2xlYXJlZCBtX3Byb3Zpc2lvbmFsUGFnZS4KICAgICBp
ZiAobV9wcm92aXNpb25hbFBhZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBiYWNrRm9yd2FyZEdvVG9JdGVtU2hhcmVkKG1f
cHJvY2Vzcy5jb3B5UmVmKCksIGl0ZW1JRCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CisgICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CisgICAgYmFj
a0ZvcndhcmRHb1RvSXRlbVNoYXJlZChtX3Byb2Nlc3MuY29weVJlZigpLCBpdGVtSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3
YXJkR29Ub0l0ZW1TaGFyZWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzLCBjb25zdCBC
YWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiBpdGVtSUQsIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2Fy
ZEdvVG9JdGVtU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzcywgY29uc3QgQmFj
a0ZvcndhcmRJdGVtSWRlbnRpZmllciYgaXRlbUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtID0gbV9iYWNrRm9yd2FyZExpc3QtPml0ZW1Gb3JJ
RChpdGVtSUQpOworICAgIGF1dG8qIGl0ZW0gPSBtX2JhY2tGb3J3YXJkTGlzdC0+aXRlbUZvcklE
KGl0ZW1JRCk7CiAgICAgaWYgKCFpdGVtKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgYm9vbCBjcmVhdGVkRXh0ZW5zaW9uID0gbWF5
YmVJbml0aWFsaXplU2FuZGJveEV4dGVuc2lvbkhhbmRsZShwcm9jZXNzLCBVUkwoVVJMKCksIGl0
ZW0tPnVybCgpKSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAgICAgaWYgKGNyZWF0ZWRFeHRl
bnNpb24pCiAgICAgICAgIHdpbGxBY3F1aXJlVW5pdmVyc2FsRmlsZVJlYWRTYW5kYm94RXh0ZW5z
aW9uKHByb2Nlc3MpOwogICAgIG1fYmFja0ZvcndhcmRMaXN0LT5nb1RvSXRlbSgqaXRlbSk7Cisg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZEl0ZW1BdEluZGV4KGludDMyX3QgaW5k
ZXgsIE9wdGlvbmFsPEJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXI+JiBpdGVtSUQpCit2b2lkIFdl
YlBhZ2VQcm94eTo6YmFja0ZvcndhcmRJdGVtQXRJbmRleChpbnQzMl90IGluZGV4LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPEJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXI+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0g
PSBtX2JhY2tGb3J3YXJkTGlzdC0+aXRlbUF0SW5kZXgoaW5kZXgpOwotICAgIGlmIChpdGVtKQot
ICAgICAgICBpdGVtSUQgPSBpdGVtLT5pdGVtSUQoKTsKKyAgICBpZiAoYXV0byogaXRlbSA9IG1f
YmFja0ZvcndhcmRMaXN0LT5pdGVtQXRJbmRleChpbmRleCkpCisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKGl0ZW0tPml0ZW1JRCgpKTsKICAgICBlbHNlCi0gICAgICAgIGl0ZW1JRCA9IFdURjo6
bnVsbG9wdDsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0KTsKIH0KIAot
dm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkQmFja0xpc3RDb3VudCh1aW50MzJfdCYgY291
bnQpCit2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRCYWNrTGlzdENvdW50KENvbXBsZXRp
b25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNv
dW50ID0gbV9iYWNrRm9yd2FyZExpc3QtPmJhY2tMaXN0Q291bnQoKTsKKyAgICBjb21wbGV0aW9u
SGFuZGxlcihtX2JhY2tGb3J3YXJkTGlzdC0+YmFja0xpc3RDb3VudCgpKTsKIH0KIAotdm9pZCBX
ZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3VudCh1aW50MzJfdCYgY291bnQp
Cit2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50KENvbXBsZXRp
b25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNv
dW50ID0gbV9iYWNrRm9yd2FyZExpc3QtPmZvcndhcmRMaXN0Q291bnQoKTsKKyAgICBjb21wbGV0
aW9uSGFuZGxlcihtX2JhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZExpc3RDb3VudCgpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmNvbXBvc2l0aW9uV2FzQ2FuY2VsZWQoKQpAQCAtNTY2OSwxNCAr
NTY2OCwxNSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJJbnNlcnRpb25VbmRvCiAjZW5k
aWYKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmNhblVuZG9SZWRvKFVuZG9PclJlZG8gYWN0aW9u
LCBib29sJiByZXN1bHQpCit2b2lkIFdlYlBhZ2VQcm94eTo6Y2FuVW5kb1JlZG8oVW5kb09yUmVk
byBhY3Rpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgcmVzdWx0ID0gcGFnZUNsaWVudCgpLmNhblVuZG9SZWRvKGFjdGlvbik7Cisg
ICAgY29tcGxldGlvbkhhbmRsZXIocGFnZUNsaWVudCgpLmNhblVuZG9SZWRvKGFjdGlvbikpOwog
fQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZVVuZG9SZWRvKFVuZG9PclJlZG8gYWN0aW9u
KQordm9pZCBXZWJQYWdlUHJveHk6OmV4ZWN1dGVVbmRvUmVkbyhVbmRvT3JSZWRvIGFjdGlvbiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIHBh
Z2VDbGllbnQoKS5leGVjdXRlVW5kb1JlZG8oYWN0aW9uKTsKKyAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQpAQCAt
NjA2OSwyNSArNjA2OSwzMiBAQCBTcGVsbERvY3VtZW50VGFnIFdlYlBhZ2VQcm94eTo6c3BlbGxE
b2N1CiB9CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotdm9pZCBXZWJQYWdlUHJv
eHk6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uU2V0PFRl
eHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQsIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQordm9pZCBXZWJQYWdlUHJveHk6OmNo
ZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uU2V0PFRleHRDaGVj
a2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgcmVzdWx0cyA9IFRleHRDaGVja2VyOjpjaGVja1Rl
eHRPZlBhcmFncmFwaChzcGVsbERvY3VtZW50VGFnKCksIHRleHQsIGluc2VydGlvblBvaW50LCBj
aGVja2luZ1R5cGVzLCBtX2luaXRpYWxDYXBpdGFsaXphdGlvbkVuYWJsZWQpOworICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChzcGVsbERvY3Vt
ZW50VGFnKCksIHRleHQsIGluc2VydGlvblBvaW50LCBjaGVja2luZ1R5cGVzLCBtX2luaXRpYWxD
YXBpdGFsaXphdGlvbkVuYWJsZWQpKTsKIH0KICNlbmRpZgogCi12b2lkIFdlYlBhZ2VQcm94eTo6
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgaW50MzJfdCYgbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCit2b2lkIFdlYlBhZ2VQ
cm94eTo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChpbnQzMl90IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QgbWlzc3Bl
bGxpbmdMZW5ndGgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIGludDMyX3QgbWlzc3Bl
bGxpbmdMb2NhdGlvbiA9IDA7CisgICAgaW50MzJfdCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7CiAg
ICAgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnKCks
IHRleHQsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICBjb21w
bGV0aW9uSGFuZGxlcihtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBTdHJpbmcm
IHRleHQsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3QmIGJh
ZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiYsIGludDMyX3Qg
YmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90IGJhZEdyYW1tYXJMZW5ndGgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogeworICAgIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiBncmFtbWFyRGV0YWlsczsK
KyAgICBpbnQzMl90IGJhZEdyYW1tYXJMb2NhdGlvbiA9IDA7CisgICAgaW50MzJfdCBiYWRHcmFt
bWFyTGVuZ3RoID0gMDsKICAgICBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoc3Bl
bGxEb2N1bWVudFRhZygpLCB0ZXh0LCBncmFtbWFyRGV0YWlscywgYmFkR3JhbW1hckxvY2F0aW9u
LCBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGdyYW1t
YXJEZXRhaWxzKSwgYmFkR3JhbW1hckxvY2F0aW9uLCBiYWRHcmFtbWFyTGVuZ3RoKTsKIH0KIAot
dm9pZCBXZWJQYWdlUHJveHk6OnNwZWxsaW5nVUlJc1Nob3dpbmcoYm9vbCYgaXNTaG93aW5nKQor
dm9pZCBXZWJQYWdlUHJveHk6OnNwZWxsaW5nVUlJc1Nob3dpbmcoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpc1Nob3dpbmcgPSBUZXh0
Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZygpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFRl
eHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3Nw
ZWxsZWRXb3JkKQpAQCAtNjEwMCw5ICs2MTA3LDExIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRh
dGVTcGVsbGluZ1VJV2l0aEcKICAgICBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcoKSwgYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1h
ckRldGFpbCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpnZXRHdWVzc2VzRm9yV29yZChjb25z
dCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50MzJfdCBpbnNlcnRpb25Q
b2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0R3Vl
c3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGlu
dDMyX3QgaW5zZXJ0aW9uUG9pbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmlu
Zz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nl
czsKICAgICBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZygp
LCB3b3JkLCBjb250ZXh0LCBpbnNlcnRpb25Qb2ludCwgZ3Vlc3NlcywgbV9pbml0aWFsQ2FwaXRh
bGl6YXRpb25FbmFibGVkKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGd1ZXNzZXMp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmIHdvcmQp
CkBAIC03NjAxLDI4ICs3NjEwLDMyIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp0b2dnbGVBdXRvbWF0
aWNUZXh0UmUKIAogI2lmIFBMQVRGT1JNKE1BQykKIAotdm9pZCBXZWJQYWdlUHJveHk6OnN1YnN0
aXR1dGlvbnNQYW5lbElzU2hvd2luZyhib29sJiBpc1Nob3dpbmcpCit2b2lkIFdlYlBhZ2VQcm94
eTo6c3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaXNTaG93aW5nID0gVGV4dENoZWNrZXI6
OnN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZygpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFRl
eHRDaGVja2VyOjpzdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmcoKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBlLCBjb25zdCBG
bG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogeworICAgIC8vIEZJWE1F
OiBNYWtlIEFsdGVybmF0aXZlVGV4dFR5cGUgYW4gZW51bSBjbGFzcyB3aXRoIEVudW1UcmFpdHMg
YW5kIHNlcmlhbGl6ZSBpdCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8vZnJvbSBhbiBpbnQzMl90Lgog
ICAgIHBhZ2VDbGllbnQoKS5zaG93Q29ycmVjdGlvblBhbmVsKChBbHRlcm5hdGl2ZVRleHRUeXBl
KXBhbmVsVHlwZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0cmluZywg
cmVwbGFjZW1lbnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCByZWFzb24p
CiB7CisgICAgLy8gRklYTUU6IE1ha2UgUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4
dCBhbiBlbnVtIGNsYXNzIHdpdGggRW51bVRyYWl0cyBhbmQgc2VyaWFsaXplIGl0IGluc3RlYWQg
b2YgY2FzdGluZyB0by9mcm9tIGFuIGludDMyX3QuCiAgICAgcGFnZUNsaWVudCgpLmRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpcmVhc29u
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKGlu
dDMyX3QgcmVhc29uLCBTdHJpbmcmIHJlc3VsdCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaXNtaXNz
Q29ycmVjdGlvblBhbmVsU29vbihpbnQzMl90IHJlYXNvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChTdHJpbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIHJlc3VsdCA9IHBhZ2VDbGll
bnQoKS5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbigoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVy
bmF0aXZlVGV4dClyZWFzb24pOworICAgIC8vIEZJWE1FOiBNYWtlIFJlYXNvbkZvckRpc21pc3Np
bmdBbHRlcm5hdGl2ZVRleHQgYW4gZW51bSBjbGFzcyB3aXRoIEVudW1UcmFpdHMgYW5kIHNlcmlh
bGl6ZSBpdCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8vZnJvbSBhbiBpbnQzMl90LgorICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHBhZ2VDbGllbnQoKS5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbigoUmVh
c29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dClyZWFzb24pKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoaW50MzJfdCByZXNwb25zZSwg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZykKIHsKKyAgICAvLyBGSVhNRTogTWFrZSBBdXRvY29ycmVjdGlvblJlc3BvbnNlIGFuIGVu
dW0gY2xhc3Mgd2l0aCBFbnVtVHJhaXRzIGFuZCBzZXJpYWxpemUgaXQgaW5zdGVhZCBvZiBjYXN0
aW5nIHRvL2Zyb20gYW4gaW50MzJfdC4KICAgICBwYWdlQ2xpZW50KCkucmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZShzdGF0aWNfY2FzdDxBdXRvY29ycmVjdGlvblJlc3BvbnNlPihyZXNwb25z
ZSksIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFN0cmluZyk7CiB9CiAKQEAgLTc2NDMsOSAr
NzY1Niw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZW1vdmVEaWN0YXRpb25BbHRlcm4KICAgICBw
YWdlQ2xpZW50KCkucmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGRpY3RhdGlvbkNvbnRleHQp
OwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90
IGRpY3RhdGlvbkNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpCit2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgcmVzdWx0ID0gcGFnZUNsaWVudCgpLmRpY3RhdGlvbkFsdGVybmF0aXZlcyhk
aWN0YXRpb25Db250ZXh0KTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihwYWdlQ2xpZW50KCkuZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKGRpY3RhdGlvbkNvbnRleHQpKTsKIH0KICNlbmRpZgogCkBAIC03
NzI1LDcgKzc3MzgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0T3ZlcmxheVNjcm9sbGJhclN0
CiB9CiAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKLXZvaWQgV2ViUGFnZVByb3h5Ojp3cmFwQ3J5
cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBib29sJiBzdWNjZWVkZWQsIFZlY3Rv
cjx1aW50OF90PiYgd3JhcHBlZEtleSkKK3ZvaWQgV2ViUGFnZVByb3h5Ojp3cmFwQ3J5cHRvS2V5
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2ws
IFZlY3Rvcjx1aW50OF90PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBQYWdlQ2xp
ZW50UHJvdGVjdG9yIHByb3RlY3RvcihwYWdlQ2xpZW50KCkpOwogCkBAIC03NzM0LDEwICs3NzQ3
LDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp3cmFwQ3J5cHRvS2V5KGNvbnN0IFYKICAgICBpZiAo
YXV0byBrZXlEYXRhID0gbV9uYXZpZ2F0aW9uQ2xpZW50LT53ZWJDcnlwdG9NYXN0ZXJLZXkoKnRo
aXMpKQogICAgICAgICBtYXN0ZXJLZXkgPSBrZXlEYXRhLT5kYXRhUmVmZXJlbmNlKCkudmVjdG9y
KCk7CiAKLSAgICBzdWNjZWVkZWQgPSB3cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXks
IGtleSwgd3JhcHBlZEtleSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHdyYXBwZWRLZXk7CisgICAg
Ym9vbCBzdWNjZWVkZWQgPSB3cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIGtleSwg
d3JhcHBlZEtleSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoc3VjY2VlZGVkLCBXVEZNb3ZlKHdy
YXBwZWRLZXkpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnVud3JhcENyeXB0b0tleShjb25z
dCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXksIGJvb2wmIHN1Y2NlZWRlZCwgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXkpCit2b2lkIFdlYlBhZ2VQcm94eTo6dW53cmFwQ3J5cHRvS2V5KGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sLCBW
ZWN0b3I8dWludDhfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgUGFnZUNsaWVu
dFByb3RlY3RvciBwcm90ZWN0b3IocGFnZUNsaWVudCgpKTsKIApAQCAtNzc0NiwxNiArNzc2MSwy
MCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dW53cmFwQ3J5cHRvS2V5KGNvbnN0CiAgICAgaWYgKGF1
dG8ga2V5RGF0YSA9IG1fbmF2aWdhdGlvbkNsaWVudC0+d2ViQ3J5cHRvTWFzdGVyS2V5KCp0aGlz
KSkKICAgICAgICAgbWFzdGVyS2V5ID0ga2V5RGF0YS0+ZGF0YVJlZmVyZW5jZSgpLnZlY3Rvcigp
OwogCi0gICAgc3VjY2VlZGVkID0gdW53cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXks
IHdyYXBwZWRLZXksIGtleSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleTsKKyAgICBib29sIHN1
Y2NlZWRlZCA9IHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCB3cmFwcGVkS2V5
LCBrZXkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKHN1Y2NlZWRlZCwgV1RGTW92ZShrZXkpKTsK
IH0KICNlbmRpZgogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nJiBjaGFsbGVuZ2VT
dHJpbmcsIGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcmIHJlc3VsdCkKK3ZvaWQgV2ViUGFnZVByb3h5
OjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4
LCBjb25zdCBTdHJpbmcmIGNoYWxsZW5nZVN0cmluZywgY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBQYWdl
Q2xpZW50UHJvdGVjdG9yIHByb3RlY3RvcihwYWdlQ2xpZW50KCkpOwogCiAgICAgaWYgKGF1dG8g
YXBpU3RyaW5nID0gbV9uYXZpZ2F0aW9uQ2xpZW50LT5zaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2VTdHJpbmcoKnRoaXMsIGtleVNpemVJbmRleCwgQVBJOjpTdHJpbmc6OmNyZWF0ZShjaGFsbGVu
Z2VTdHJpbmcpLCB1cmwpKQotICAgICAgICByZXN1bHQgPSBhcGlTdHJpbmctPnN0cmluZygpOwor
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoYXBpU3RyaW5nLT5zdHJpbmcoKSk7Cisg
ICAgCisgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OmFkZE1JTUVUeXBlV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcihjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQpAQCAtODU5Niw4ICs4NjE1LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmludmFsaWRhdGVB
bGxBdHRhY2htZQogICAgIG1fYXR0YWNobWVudElkZW50aWZpZXJUb0F0dGFjaG1lbnRNYXAuY2xl
YXIoKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YUZv
cklkZW50aWZpZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpZGVudGlmaWVycywgVmVjdG9yPFdl
YkNvcmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YT4mIHNlcmlhbGl6ZWREYXRhKQordm9pZCBX
ZWJQYWdlUHJveHk6OnNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YUZvcklkZW50aWZpZXJzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBpZGVudGlmaWVycywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8V2ViQ29yZTo6U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKKyAgICBWZWN0b3I8V2ViQ29yZTo6U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiBz
ZXJpYWxpemVkRGF0YTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGlkZW50aWZpZXIgOiBpZGVudGlm
aWVycykgewogICAgICAgICBhdXRvIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50Rm9ySWRlbnRpZmll
cihpZGVudGlmaWVyKTsKICAgICAgICAgaWYgKCFhdHRhY2htZW50KQpAQCAtODYwOSw2ICs4NjI5
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNlcmlhbGl6ZWRBdHRhY2htZW50RAogCiAgICAgICAg
IHNlcmlhbGl6ZWREYXRhLmFwcGVuZCh7IGlkZW50aWZpZXIsIGF0dGFjaG1lbnQtPm1pbWVUeXBl
KCksIGRhdGEucmVsZWFzZU5vbk51bGwoKSB9KTsKICAgICB9CisgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShzZXJpYWxpemVkRGF0YSkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlk
SW52YWxpZGF0ZURhdGFGb3JBdHRhY2htZW50KEFQSTo6QXR0YWNobWVudCYgYXR0YWNobWVudCkK
QEAgLTg4MzksMTMgKzg4NjAsMTQgQEAgV2ViUGFnZVByb3h5OjpTcGVlY2hTeW50aGVzaXNEYXRh
JiBXZWJQYQogICAgIHJldHVybiAqbV9zcGVlY2hTeW50aGVzaXNEYXRhOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6c3BlZWNoU3ludGhlc2lzVm9pY2VMaXN0KFZlY3RvcjxXZWJTcGVlY2hTeW50
aGVzaXNWb2ljZT4mIHJlc3VsdCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzcGVlY2hTeW50aGVzaXNW
b2ljZUxpc3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViU3BlZWNoU3ludGhlc2lz
Vm9pY2U+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8mIHZvaWNlTGlzdCA9
IHNwZWVjaFN5bnRoZXNpc0RhdGEoKS5zeW50aGVzaXplci0+dm9pY2VMaXN0KCk7Ci0gICAgZm9y
IChhdXRvJiB2b2ljZSA6IHZvaWNlTGlzdCkgewotICAgICAgICBXZWJTcGVlY2hTeW50aGVzaXNW
b2ljZSB2IHsgdm9pY2UtPnZvaWNlVVJJKCksIHZvaWNlLT5uYW1lKCksIHZvaWNlLT5sYW5nKCks
IHZvaWNlLT5sb2NhbFNlcnZpY2UoKSwgdm9pY2UtPmlzRGVmYXVsdCgpIH07Ci0gICAgICAgIHJl
c3VsdC5hcHBlbmQoV1RGTW92ZSh2KSk7Ci0gICAgfQorICAgIFZlY3RvcjxXZWJTcGVlY2hTeW50
aGVzaXNWb2ljZT4gcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZv
aWNlTGlzdC5zaXplKCkpOworICAgIGZvciAoYXV0byYgdm9pY2UgOiB2b2ljZUxpc3QpCisgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV2ViU3BlZWNoU3ludGhlc2lzVm9pY2UgeyB2b2lj
ZS0+dm9pY2VVUkkoKSwgdm9pY2UtPm5hbWUoKSwgdm9pY2UtPmxhbmcoKSwgdm9pY2UtPmxvY2Fs
U2VydmljZSgpLCB2b2ljZS0+aXNEZWZhdWx0KCkgfSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShyZXN1bHQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNwZWVjaFN5bnRoZXNp
c1NwZWFrKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBsYW5nLCBmbG9hdCB2b2x1
bWUsIGZsb2F0IHJhdGUsIGZsb2F0IHBpdGNoLCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSwgY29u
c3QgU3RyaW5nJiB2b2ljZVVSSSwgY29uc3QgU3RyaW5nJiB2b2ljZU5hbWUsIGNvbnN0IFN0cmlu
ZyYgdm9pY2VMYW5nLCBib29sIGxvY2FsU2VydmljZSwgYm9vbCBkZWZhdWx0Vm9pY2UsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNDMxODApCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1Mywx
NCArMTE1MywxMiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lO
KQotICAgIHZvaWQgc2hvd1BERkNvbnRleHRNZW51KGNvbnN0IFdlYktpdDo6UERGQ29udGV4dE1l
bnUmLCBPcHRpb25hbDxpbnQzMl90PiYgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBzaG93UERG
Q29udGV4dE1lbnUoY29uc3QgV2ViS2l0OjpQREZDb250ZXh0TWVudSYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoT3B0aW9uYWw8aW50MzJfdD4mJik+JiYpOwogI2VuZGlmCiAgICAgV2ViQ29yZTo6
SW50UmVjdCB2aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Zpc2li
bGVTY3JvbGxlclRodW1iUmVjdDsgfQogCiAgICAgdWludDY0X3QgcmVuZGVyVHJlZVNpemUoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlclRyZWVTaXplOyB9CiAKLSAgICB2b2lkIHByaW50TWFpbkZy
YW1lKCk7Ci0gICAgCiAgICAgdm9pZCBzZXRNZWRpYVZvbHVtZShmbG9hdCk7CiAgICAgdm9pZCBz
ZXRNdXRlZChXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNdXRlZFN0YXRlRmxhZ3MpOwogICAgIHZv
aWQgc2V0TWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdyhib29sKTsKQEAgLTEyNTgsMTEgKzEyNTYs
MTEgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKLSAgICB2b2lk
IHdyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgYm9vbCYgc3VjY2VlZGVkLCBW
ZWN0b3I8dWludDhfdD4mKTsKLSAgICB2b2lkIHVud3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8
dWludDhfdD4mLCBib29sJiBzdWNjZWVkZWQsIFZlY3Rvcjx1aW50OF90PiYpOworICAgIHZvaWQg
d3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wsIFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CisgICAgdm9pZCB1bndyYXBDcnlwdG9L
ZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sLCBW
ZWN0b3I8dWludDhfdD4mJik+JiYpOwogI2VuZGlmCiAKLSAgICB2b2lkIHNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyYg
Y2hhbGxlbmdlU3RyaW5nLCBjb25zdCBVUkwmLCBTdHJpbmcmIHJlc3VsdCk7CisgICAgdm9pZCBz
aWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4LCBj
b25zdCBTdHJpbmcmIGNoYWxsZW5nZVN0cmluZywgY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTdHJpbmcpPiYmKTsKIAogICAgIHZvaWQgdGFrZVNuYXBzaG90KFdlYkNvcmU6Oklu
dFJlY3QsIFdlYkNvcmU6OkludFNpemUgYml0bWFwU2l6ZSwgU25hcHNob3RPcHRpb25zLCBXVEY6
OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgQ2FsbGJhY2tC
YXNlOjpFcnJvcik+JiYpOwogCkBAIC0xMzIyLDkgKzEzMjAsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBpbnN0YWxsQWN0aXZpdHlTdGF0ZUNoYW5nZUNvbXBsZXRpb25IYW5kbGVyKEZ1bmN0aW9uPHZv
aWQoKT4mJik7CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZvaWQgY2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25TZXQ8V2ViQ29yZTo6
VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgaW50MzJfdCBpbnNlcnRpb25Qb2ludCwg
VmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpOworICAgIHZvaWQg
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25TZXQ8V2ViQ29y
ZTo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgaW50MzJfdCBpbnNlcnRpb25Qb2lu
dCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVz
dWx0PiYmKT4mJik7CiAjZW5kaWYKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0
cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBpbnQzMl90IGluc2VydGlvblBvaW50
LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlcyk7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChj
b25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50MzJfdCBpbnNlcnRp
b25Qb2ludCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJik7CiAK
ICAgICB2b2lkIHNldFNob3VsZERpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50cyhib29sKTsKIApA
QCAtMTQzMiw3ICsxNDMwLDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxBUEk6OkF0dGFjaG1lbnQ+
IGF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikgY29uc3Q7
CiAgICAgdm9pZCBpbnNlcnRBdHRhY2htZW50KFJlZjxBUEk6OkF0dGFjaG1lbnQ+JiYsIEZ1bmN0
aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgdXBkYXRlQXR0YWNo
bWVudEF0dHJpYnV0ZXMoY29uc3QgQVBJOjpBdHRhY2htZW50JiwgRnVuY3Rpb248dm9pZChDYWxs
YmFja0Jhc2U6OkVycm9yKT4mJik7Ci0gICAgdm9pZCBzZXJpYWxpemVkQXR0YWNobWVudERhdGFG
b3JJZGVudGlmaWVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIFZlY3RvcjxXZWJDb3JlOjpTZXJp
YWxpemVkQXR0YWNobWVudERhdGE+Jik7CisgICAgdm9pZCBzZXJpYWxpemVkQXR0YWNobWVudERh
dGFGb3JJZGVudGlmaWVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPFdlYkNvcmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YT4mJik+JiYpOwog
ICAgIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIGRpZEludmFsaWRhdGVEYXRhRm9yQXR0YWNobWVudChBUEk6OkF0dGFjaG1lbnQmKTsK
IApAQCAtMTQ4Miw3ICsxNDgwLDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnRVUkxTY2hlbWVU
YXNrU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJz
JiYpOwogICAgIHZvaWQgbG9hZERhdGFXaXRoTmF2aWdhdGlvblNoYXJlZChSZWY8V2ViUHJvY2Vz
c1Byb3h5PiYmLCBBUEk6Ok5hdmlnYXRpb24mLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBj
b25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJp
bmcmIGJhc2VVUkwsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSwgV2ViQ29yZTo6U2hvdWxkVHJlYXRB
c0NvbnRpbnVpbmdMb2FkLCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiYmID0gV1RGOjpu
dWxsb3B0KTsKICAgICB2b2lkIGxvYWRSZXF1ZXN0V2l0aE5hdmlnYXRpb25TaGFyZWQoUmVmPFdl
YlByb2Nlc3NQcm94eT4mJiwgQVBJOjpOYXZpZ2F0aW9uJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiYsIFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3ksIEFQSTo6T2JqZWN0
KiB1c2VyRGF0YSwgV2ViQ29yZTo6U2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkLCBPcHRpb25h
bDxXZWJzaXRlUG9saWNpZXNEYXRhPiYmID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lkIGJhY2tG
b3J3YXJkR29Ub0l0ZW1TaGFyZWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgY29uc3QgV2ViQ29y
ZTo6QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYp
OworICAgIHZvaWQgYmFja0ZvcndhcmRHb1RvSXRlbVNoYXJlZChSZWY8V2ViUHJvY2Vzc1Byb3h5
PiYmLCBjb25zdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik+JiYpOwogICAgIHZvaWQg
ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblN5bmNTaGFyZWQoUmVmPFdlYlByb2Nlc3NQ
cm94eT4mJiwgdWludDY0X3QgZnJhbWVJRCwgYm9vbCBpc01haW5GcmFtZSwgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhJiYsIFdlYkNvcmU6OlBvbGljeUNoZWNrSWRlbnRpZmllciwgdWludDY0
X3QgbmF2aWdhdGlvbklELCBOYXZpZ2F0aW9uQWN0aW9uRGF0YSYmLAogICAgICAgICBGcmFtZUlu
Zm9EYXRhJiYsIHVpbnQ2NF90IG9yaWdpbmF0aW5nUGFnZUlELCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYs
IElQQzo6Rm9ybURhdGFSZWZlcmVuY2UmJiByZXF1ZXN0Qm9keSwKICAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYmIHJlZGlyZWN0UmVzcG9uc2UsIGNvbnN0IFVzZXJEYXRhJiwgTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblN5bmM6
OkRlbGF5ZWRSZXBseSYmKTsKQEAgLTE0OTQsNyArMTQ5Miw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAK
ICNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKLSAgICB2b2lkIHNwZWVjaFN5bnRoZXNpc1Zv
aWNlTGlzdChWZWN0b3I8V2ViU3BlZWNoU3ludGhlc2lzVm9pY2U+JiByZXN1bHQpOworICAgIHZv
aWQgc3BlZWNoU3ludGhlc2lzVm9pY2VMaXN0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PFdlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlPiYmKT4mJik7CiAgICAgdm9pZCBzcGVlY2hTeW50aGVz
aXNTcGVhayhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBmbG9hdCB2b2x1bWUsIGZsb2F0
IHJhdGUsIGZsb2F0IHBpdGNoLCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSwgY29uc3QgU3RyaW5n
JiB2b2ljZVVSSSwgY29uc3QgU3RyaW5nJiB2b2ljZU5hbWUsIGNvbnN0IFN0cmluZyYgdm9pY2VM
YW5nLCBib29sIGxvY2FsU2VydmljZSwgYm9vbCBkZWZhdWx0Vm9pY2UsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBzcGVlY2hTeW50aGVzaXNDYW5jZWwoKTsKICAgICB2
b2lkIHNwZWVjaFN5bnRoZXNpc1BhdXNlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBA
IC0xNTg1LDcgKzE1ODMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkRmluaXNoUHJvZ3Jlc3Mo
KTsKICAgICB2b2lkIHNldE5ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3MoYm9vbCk7CiAKLSAgICB2
b2lkIGhhc0luc2VjdXJlQ29udGVudChXZWJDb3JlOjpIYXNJbnNlY3VyZUNvbnRlbnQmKTsKKyAg
ICB2b2lkIGhhc0luc2VjdXJlQ29udGVudChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6
Okhhc0luc2VjdXJlQ29udGVudCk+JiYpOwogCiAgICAgdm9pZCBkaWREZXN0cm95TmF2aWdhdGlv
bih1aW50NjRfdCBuYXZpZ2F0aW9uSUQpOwogCkBAIC0xNjQxLDE0ICsxNjM5LDE0IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzZXRJc1Jlc2l6YWJsZShib29sIGlzUmVzaXphYmxlKTsKICAgICB2b2lk
IHNjcmVlblRvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNjcmVlblBvaW50LCBN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTY3JlZW5Ub1Jvb3RWaWV3OjpEZWxheWVkUmVwbHkmJik7
CiAgICAgdm9pZCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdS
ZWN0LCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSb290Vmlld1RvU2NyZWVuOjpEZWxheWVkUmVw
bHkmJik7Ci0gICAgdm9pZCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgc2NyZWVuUG9pbnQsIFdlYkNvcmU6OkludFBvaW50JiB3aW5kb3dQb2lu
dCk7Ci0gICAgdm9pZCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiB2aWV3UmVjdCwgV2ViQ29yZTo6SW50UmVjdCYgcmVzdWx0KTsKKyAgICB2b2lk
IGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBz
Y3JlZW5Qb2ludCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpJbnRQb2ludCk+JiYp
OworICAgIHZvaWQgcm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4oY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgdmlld1JlY3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SW50UmVj
dCk+JiYpOwogICAgIHZvaWQgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKHVpbnQ2NF90IGZy
YW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBh
bmVsOjpEZWxheWVkUmVwbHkmJik7CiAgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRp
ZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7CiAgICAgdm9pZCBwYWdlRGlk
U2Nyb2xsKCk7CiAgICAgdm9pZCBydW5PcGVuUGFuZWwodWludDY0X3QgZnJhbWVJRCwgY29uc3Qg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgV2ViQ29yZTo6RmlsZUNob29zZXJT
ZXR0aW5ncyYpOwogICAgIHZvaWQgc2hvd1NoYXJlU2hlZXQoY29uc3QgV2ViQ29yZTo6U2hhcmVE
YXRhV2l0aFBhcnNlZFVSTCYsIFNoYXJlU2hlZXRDYWxsYmFja0lEKTsKLSAgICB2b2lkIHByaW50
RnJhbWUodWludDY0X3QgZnJhbWVJRCk7CisgICAgdm9pZCBwcmludEZyYW1lKHVpbnQ2NF90IGZy
YW1lSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBleGNlZWRlZERh
dGFiYXNlUXVvdGEodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50T3JpZ2luVXNhZ2UsIHVp
bnQ2NF90IGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1aW50NjRfdCBleHBlY3RlZFVzYWdlLCBNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpFeGNlZWRlZERhdGFiYXNlUXVvdGE6OkRlbGF5ZWRSZXBseSYm
KTsKICAgICB2b2lkIHJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoY29uc3QgU3Ry
aW5nJiBvcmlnaW5JZGVudGlmaWVyLCB1aW50NjRfdCBjdXJyZW50UXVvdGEsIHVpbnQ2NF90IHRv
dGFsQnl0ZXNOZWVkZWQsIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlYWNoZWRBcHBsaWNhdGlv
bkNhY2hlT3JpZ2luUXVvdGE6OkRlbGF5ZWRSZXBseSYmKTsKICAgICB2b2lkIHJlcXVlc3RHZW9s
b2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSh1aW50NjRfdCBnZW9sb2NhdGlvbklELCB1aW50NjRf
dCBmcmFtZUlELCBTdHJpbmcgb3JpZ2luSWRlbnRpZmllcik7CkBAIC0xNzE1LDIyICsxNzEzLDIy
IEBAIHByaXZhdGU6CiAKICAgICAvLyBCYWNrL0ZvcndhcmQgbGlzdCBtYW5hZ2VtZW50CiAgICAg
dm9pZCBiYWNrRm9yd2FyZEFkZEl0ZW0oQmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlJiYpOwotICAg
IHZvaWQgYmFja0ZvcndhcmRHb1RvSXRlbShjb25zdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1J
ZGVudGlmaWVyJiwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7Ci0gICAgdm9pZCBiYWNrRm9y
d2FyZEl0ZW1BdEluZGV4KGludDMyX3QgaW5kZXgsIE9wdGlvbmFsPFdlYkNvcmU6OkJhY2tGb3J3
YXJkSXRlbUlkZW50aWZpZXI+Jik7Ci0gICAgdm9pZCBiYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQo
dWludDMyX3QmIGNvdW50KTsKLSAgICB2b2lkIGJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3VudCh1
aW50MzJfdCYgY291bnQpOworICAgIHZvaWQgYmFja0ZvcndhcmRHb1RvSXRlbShjb25zdCBXZWJD
b3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik+JiYpOworICAgIHZvaWQgYmFja0ZvcndhcmRJdGVt
QXRJbmRleChpbnQzMl90IGluZGV4LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdl
YkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXI+JiYpPiYmKTsKKyAgICB2b2lkIGJhY2tG
b3J3YXJkQmFja0xpc3RDb3VudChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJik7
CisgICAgdm9pZCBiYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCh1aW50MzJfdCk+JiYpOwogICAgIHZvaWQgYmFja0ZvcndhcmRDbGVhcigpOwogCiAgICAg
Ly8gVW5kbyBtYW5hZ2VtZW50CiAgICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyhX
ZWJVbmRvU3RlcElEIGNvbW1hbmRJRCwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CiAgICAgdm9pZCBy
ZWdpc3Rlckluc2VydGlvblVuZG9Hcm91cGluZygpOwogICAgIHZvaWQgY2xlYXJBbGxFZGl0Q29t
bWFuZHMoKTsKLSAgICB2b2lkIGNhblVuZG9SZWRvKFVuZG9PclJlZG8sIGJvb2wmIHJlc3VsdCk7
Ci0gICAgdm9pZCBleGVjdXRlVW5kb1JlZG8oVW5kb09yUmVkbyk7CisgICAgdm9pZCBjYW5VbmRv
UmVkbyhVbmRvT3JSZWRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2
b2lkIGV4ZWN1dGVVbmRvUmVkbyhVbmRvT3JSZWRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogCiAgICAgLy8gS2V5Ym9hcmQgaGFuZGxpbmcKICNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICB2b2lkIGV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IsIGJvb2wmIGhhbmRsZWQpOworICAgIHZvaWQgZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0
b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
Jik7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTE3NTQsMTEgKzE3NTIsMTEgQEAg
cHJpdmF0ZToKIAogICAgIC8vIFNlYXJjaCBwb3B1cCByZXN1bHRzCiAgICAgdm9pZCBzYXZlUmVj
ZW50U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlJlY2VudFNl
YXJjaD4mKTsKLSAgICB2b2lkIGxvYWRSZWNlbnRTZWFyY2hlcyhjb25zdCBTdHJpbmcmLCBWZWN0
b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiYpOworICAgIHZvaWQgbG9hZFJlY2VudFNlYXJjaGVz
KGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OlJl
Y2VudFNlYXJjaD4mJik+JiYpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gU3BlZWNo
LgotICAgIHZvaWQgZ2V0SXNTcGVha2luZyhib29sJik7CisgICAgdm9pZCBnZXRJc1NwZWFraW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgc3BlYWsoY29uc3Qg
U3RyaW5nJik7CiAgICAgdm9pZCBzdG9wU3BlYWtpbmcoKTsKIApAQCAtMTc4MSw5ICsxNzc5LDkg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgLy8gU3BlbGxpbmcgYW5kIGdyYW1tYXIuCi0gICAg
dm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBpbnQzMl90JiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgdm9p
ZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJDb3Jl
OjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYg
YmFkR3JhbW1hckxlbmd0aCk7Ci0gICAgdm9pZCBzcGVsbGluZ1VJSXNTaG93aW5nKGJvb2wmKTsK
KyAgICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoaW50MzJfdCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90IG1p
c3NwZWxsaW5nTGVuZ3RoKT4mJik7CisgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25z
dCBTdHJpbmcmIHRleHQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6Okdy
YW1tYXJEZXRhaWw+JiYsIGludDMyX3QgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90IGJhZEdy
YW1tYXJMZW5ndGgpPiYmKTsKKyAgICB2b2lkIHNwZWxsaW5nVUlJc1Nob3dpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOwogICAgIHZvaWQgdXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBo
cmFzZSwgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpOwogICAgIHZvaWQgbGVhcm5Xb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCk7CkBAIC0xODI0LDcgKzE4MjIsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgYXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2soY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZs
b2F0UmVjdD4mLCBjb25zdCBTdHJpbmcmIGZvbnROYW1lLCBmbG9hdCBmb250U2l6ZSwgdWludDY0
X3QgZm9udFRyYWl0cywgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBhdXRvY29ycmVjdGlvbkNvbnRl
eHRDYWxsYmFjayhjb25zdCBXZWJBdXRvY29ycmVjdGlvbkNvbnRleHQmLCBDYWxsYmFja0lEKTsK
ICAgICB2b2lkIHNlbGVjdGlvbkNvbnRleHRDYWxsYmFjayhjb25zdCBTdHJpbmcmIHNlbGVjdGVk
VGV4dCwgY29uc3QgU3RyaW5nJiBiZWZvcmVUZXh0LCBjb25zdCBTdHJpbmcmIGFmdGVyVGV4dCwg
Q2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBFZGl0b3JTdGF0
ZSYsIGJvb2wgaXNDaGFyRXZlbnQsIGJvb2wmIGhhbmRsZWQpOworICAgIHZvaWQgaW50ZXJwcmV0
S2V5RXZlbnQoY29uc3QgRWRpdG9yU3RhdGUmLCBib29sIGlzQ2hhckV2ZW50LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tl
cihib29sIGhhc1ZpZGVvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBlbGVtZW50UmVjdCwgV2Vi
Q29yZTo6Um91dGVTaGFyaW5nUG9saWN5LCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNlbGVj
dGlvblJlY3RzQ2FsbGJhY2soY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+Jiwg
Q2FsbGJhY2tJRCk7CiAKQEAgLTE4NTUsMTYgKzE4NTMsMTYgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgc3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5n
KGJvb2wmKTsKKyAgICB2b2lkIHN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoaW50
MzJfdCBwYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBs
YWNlbWVudFN0cmluZ3MpOwogICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChpbnQzMl90
IHJlYXNvbik7Ci0gICAgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihpbnQzMl90IHJl
YXNvbiwgU3RyaW5nJiByZXN1bHQpOworICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNv
b24oaW50MzJfdCByZWFzb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJik7CiAg
ICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKGludDMyX3QgcmVzcG9uc2VUeXBl
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nKTsKIAogI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQogICAgIHZvaWQgc2hv
d0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGlu
Z0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsKICAgICB2b2lk
IHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsK
LSAgICB2b2lkIGRpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0
LCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KTsKKyAgICB2b2lkIGRpY3RhdGlvbkFsdGVybmF0aXZl
cyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxTdHJpbmc+JiYpPiYmKTsKICNlbmRpZgogCiAgICAgdm9pZCBzZXRFZGl0YWJsZUVsZW1lbnRJ
c0ZvY3VzZWQoYm9vbCk7CkBAIC0xOTA4LDcgKzE5MDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
c2V0UmVuZGVyVHJlZVNpemUodWludDY0X3QgdHJlZVNpemUpIHsgbV9yZW5kZXJUcmVlU2l6ZSA9
IHRyZWVTaXplOyB9CiAKICNpZiBQTEFURk9STShYMTEpCi0gICAgdm9pZCBjcmVhdGVQbHVnaW5D
b250YWluZXIodWludDY0X3QmIHdpbmRvd0lEKTsKKyAgICB2b2lkIGNyZWF0ZVBsdWdpbkNvbnRh
aW5lcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4mJik7CiAgICAgdm9pZCB3aW5k
b3dlZFBsdWdpbkdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZyYW1l
UmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIHVpbnQ2NF90IHdpbmRvd0lE
KTsKICAgICB2b2lkIHdpbmRvd2VkUGx1Z2luVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlz
aWJsZSwgdWludDY0X3Qgd2luZG93SUQpOwogI2VuZGlmCkBAIC0xOTczLDcgKzE5NzEsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZGlkUmVzaWduSW5wdXRFbGVtZW50U3Ryb25nUGFzc3dvcmRBcHBl
YXJhbmNlKGNvbnN0IFVzZXJEYXRhJik7CiAKICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1l
c3NhZ2VCb2R5KTsKLSAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2Fn
ZUJvZHksIFVzZXJEYXRhJiByZXR1cm5Vc2VyRGF0YSk7CisgICAgdm9pZCBoYW5kbGVTeW5jaHJv
bm91c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwg
Y29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJE
YXRhJiYpPiYmKTsKIAogICAgIHZvaWQgdmlld0lzQmVjb21pbmdWaXNpYmxlKCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4J
KHJldmlzaW9uIDI0MzE4MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNjEsOCArNjEsOCBAQCBtZXNzYWdlcyAt
PiBXZWJQYWdlUHJveHkgewogICAgIEdldFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNvcmU6OkZsb2F0
UmVjdCB3aW5kb3dGcmFtZSkgRGVsYXllZAogICAgIFNjcmVlblRvUm9vdFZpZXcoV2ViQ29yZTo6
SW50UG9pbnQgc2NyZWVuUG9pbnQpIC0+IChXZWJDb3JlOjpJbnRQb2ludCB3aW5kb3dQb2ludCkg
RGVsYXllZAogICAgIFJvb3RWaWV3VG9TY3JlZW4oV2ViQ29yZTo6SW50UmVjdCByZWN0KSAtPiAo
V2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFtZSkgRGVsYXllZAotICAgIEFjY2Vzc2liaWxpdHlT
Y3JlZW5Ub1Jvb3RWaWV3KFdlYkNvcmU6OkludFBvaW50IHNjcmVlblBvaW50KSAtPiAoV2ViQ29y
ZTo6SW50UG9pbnQgd2luZG93UG9pbnQpIExlZ2FjeVN5bmMKLSAgICBSb290Vmlld1RvQWNjZXNz
aWJpbGl0eVNjcmVlbihXZWJDb3JlOjpJbnRSZWN0IHJlY3QpIC0+IChXZWJDb3JlOjpJbnRSZWN0
IHNjcmVlbkZyYW1lKSBMZWdhY3lTeW5jCisgICAgQWNjZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZp
ZXcoV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuUG9pbnQpIC0+IChXZWJDb3JlOjpJbnRQb2ludCB3
aW5kb3dQb2ludCkgRGVsYXllZAorICAgIFJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKFdl
YkNvcmU6OkludFJlY3QgcmVjdCkgLT4gKFdlYkNvcmU6OkludFJlY3Qgc2NyZWVuRnJhbWUpIERl
bGF5ZWQKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFNob3dWYWxpZGF0aW9uTWVzc2FnZShX
ZWJDb3JlOjpJbnRSZWN0IGFuY2hvclJlY3QsIFN0cmluZyBtZXNzYWdlKQpAQCAtNzMsNyArNzMs
NyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIFBhZ2VEaWRTY3JvbGwoKQogICAg
IFJ1bk9wZW5QYW5lbCh1aW50NjRfdCBmcmFtZUlELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhIGZyYW1lU2VjdXJpdHlPcmlnaW4sIHN0cnVjdCBXZWJDb3JlOjpGaWxlQ2hvb3Nl
clNldHRpbmdzIHBhcmFtZXRlcnMpCiAgICAgU2hvd1NoYXJlU2hlZXQoc3RydWN0IFdlYkNvcmU6
OlNoYXJlRGF0YVdpdGhQYXJzZWRVUkwgc2hhcmVEYXRhLCB1aW50NjRfdCBjYWxsYmFja0lEKQot
ICAgIFByaW50RnJhbWUodWludDY0X3QgZnJhbWVJRCkgLT4gKCkgTGVnYWN5U3luYworICAgIFBy
aW50RnJhbWUodWludDY0X3QgZnJhbWVJRCkgLT4gKCkgRGVsYXllZAogICAgIFJ1bk1vZGFsKCkK
ICAgICBOb3RpZnlTY3JvbGxlclRodW1iSXNWaXNpYmxlSW5SZWN0KFdlYkNvcmU6OkludFJlY3Qg
c2Nyb2xsZXJUaHVtYikKICAgICBSZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKGlu
dDMyX3QgbmV3U3R5bGUpCkBAIC0xNDMsNyArMTQzLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVBy
b3h5IHsKICAgICBEaWRDaGFuZ2VNYWluRG9jdW1lbnQodWludDY0X3QgZnJhbWVJRCk7CiAgICAg
RGlkRGVzdHJveU5hdmlnYXRpb24odWludDY0X3QgbmF2aWdhdGlvbklEKQogCi0gICAgSGFzSW5z
ZWN1cmVDb250ZW50KCkgLT4gKGVudW06Ym9vbCBXZWJDb3JlOjpIYXNJbnNlY3VyZUNvbnRlbnQg
aGFzSW5zZWN1cmVDb250ZW50KSBMZWdhY3lTeW5jCisgICAgSGFzSW5zZWN1cmVDb250ZW50KCkg
LT4gKGVudW06Ym9vbCBXZWJDb3JlOjpIYXNJbnNlY3VyZUNvbnRlbnQgaGFzSW5zZWN1cmVDb250
ZW50KSBEZWxheWVkCiAKICAgICBNYWluRnJhbWVQbHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVy
ZURpZENoYW5nZShib29sIG1haW5GcmFtZVBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlKQog
CkBAIC0xODcsNyArMTg3LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBBdXRv
Y29ycmVjdGlvbkRhdGFDYWxsYmFjayhWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiB0ZXh0UmVj
dHMsIFN0cmluZyBmb250TmFtZSwgZG91YmxlIGZvbnRTaXplLCB1aW50NjRfdCB0cmFpdHMsIFdl
YktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIEF1dG9jb3JyZWN0aW9uQ29udGV4dENh
bGxiYWNrKHN0cnVjdCBXZWJLaXQ6OldlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCBjb250ZXh0LCBX
ZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBTZWxlY3Rpb25Db250ZXh0Q2FsbGJh
Y2soU3RyaW5nIHNlbGVjdGVkVGV4dCwgU3RyaW5nIGJlZm9yZVRleHQsIFN0cmluZyBhZnRlclRl
eHQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQotICAgIEludGVycHJldEtleUV2ZW50
KHN0cnVjdCBXZWJLaXQ6OkVkaXRvclN0YXRlIHN0YXRlLCBib29sIGlzQ2hhckV2ZW50KSAtPiAo
Ym9vbCBoYW5kbGVkKSBMZWdhY3lTeW5jCisgICAgSW50ZXJwcmV0S2V5RXZlbnQoc3RydWN0IFdl
YktpdDo6RWRpdG9yU3RhdGUgc3RhdGUsIGJvb2wgaXNDaGFyRXZlbnQpIC0+IChib29sIGhhbmRs
ZWQpIERlbGF5ZWQKICAgICBEaWRSZWNlaXZlUG9zaXRpb25JbmZvcm1hdGlvbihzdHJ1Y3QgV2Vi
S2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiBpbmZvcm1hdGlvbikKICAgICBT
YXZlSW1hZ2VUb0xpYnJhcnkoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGUsIHVp
bnQ2NF90IHNpemUpCiAgICAgU2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGJvb2wgaGFzVmlkZW8s
IFdlYkNvcmU6OkludFJlY3QgZWxlbWVudFJlY3QsIGVudW06dWludDhfdCBXZWJDb3JlOjpSb3V0
ZVNoYXJpbmdQb2xpY3kgcG9saWN5LCBTdHJpbmcgcm91dGluZ0NvbnRleHRVSUQpCkBAIC0yMjMs
MTAgKzIyMywxMCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgIyBCYWNrRm9y
d2FyZCBtZXNzYWdlcwogICAgIEJhY2tGb3J3YXJkQWRkSXRlbShzdHJ1Y3QgV2ViS2l0OjpCYWNr
Rm9yd2FyZExpc3RJdGVtU3RhdGUgaXRlbVN0YXRlKQotICAgIEJhY2tGb3J3YXJkR29Ub0l0ZW0o
c3RydWN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXIgaXRlbUlEKSAtPiAoV2Vi
S2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkgTGVn
YWN5U3luYwotICAgIEJhY2tGb3J3YXJkSXRlbUF0SW5kZXgoaW50MzJfdCBpdGVtSW5kZXgpIC0+
IChPcHRpb25hbDxXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyPiBpdGVtSUQpIExl
Z2FjeVN5bmMKLSAgICBCYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQoKSAtPiAodWludDMyX3QgY291
bnQpIExlZ2FjeVN5bmMKLSAgICBCYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQoKSAtPiAodWlu
dDMyX3QgY291bnQpIExlZ2FjeVN5bmMKKyAgICBCYWNrRm9yd2FyZEdvVG9JdGVtKHN0cnVjdCBX
ZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyIGl0ZW1JRCkgLT4gKFdlYktpdDo6U2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpIERlbGF5ZWQKKyAg
ICBCYWNrRm9yd2FyZEl0ZW1BdEluZGV4KGludDMyX3QgaXRlbUluZGV4KSAtPiAoT3B0aW9uYWw8
V2ViQ29yZTo6QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllcj4gaXRlbUlEKSBEZWxheWVkCisgICAg
QmFja0ZvcndhcmRCYWNrTGlzdENvdW50KCkgLT4gKHVpbnQzMl90IGNvdW50KSBEZWxheWVkCisg
ICAgQmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50KCkgLT4gKHVpbnQzMl90IGNvdW50KSBEZWxh
eWVkCiAgICAgQmFja0ZvcndhcmRDbGVhcigpCiAgICAgV2lsbEdvVG9CYWNrRm9yd2FyZExpc3RJ
dGVtKHN0cnVjdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwgYm9v
bCBpblBhZ2VDYWNoZSkKIApAQCAtMjM0LDggKzIzNCw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQ
cm94eSB7CiAgICAgUmVnaXN0ZXJFZGl0Q29tbWFuZEZvclVuZG8odWludDY0X3QgY29tbWFuZElE
LCBTdHJpbmcgbGFiZWwpCiAgICAgQ2xlYXJBbGxFZGl0Q29tbWFuZHMoKQogICAgIFJlZ2lzdGVy
SW5zZXJ0aW9uVW5kb0dyb3VwaW5nKCkKLSAgICBDYW5VbmRvUmVkbyhlbnVtOmJvb2wgV2ViS2l0
OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pIC0+IChib29sIHJlc3VsdCkgTGVnYWN5U3luYwotICAg
IEV4ZWN1dGVVbmRvUmVkbyhlbnVtOmJvb2wgV2ViS2l0OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8p
IC0+ICgpIExlZ2FjeVN5bmMKKyAgICBDYW5VbmRvUmVkbyhlbnVtOmJvb2wgV2ViS2l0OjpVbmRv
T3JSZWRvIHVuZG9PclJlZG8pIC0+IChib29sIHJlc3VsdCkgRGVsYXllZAorICAgIEV4ZWN1dGVV
bmRvUmVkbyhlbnVtOmJvb2wgV2ViS2l0OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pIC0+ICgpIERl
bGF5ZWQKIAogICAgICMgRGlhZ25vc3RpYyBtZXNzYWdlcyBsb2dnaW5nCiAgICAgTG9nRGlhZ25v
c3RpY01lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBkZXNjcmlwdGlvbiwgZW51bTpib29s
IFdlYkNvcmU6OlNob3VsZFNhbXBsZSBzaG91bGRTYW1wbGUpCkBAIC0yOTYsMTQgKzI5NiwxNCBA
QCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgIyBTcGVsbGluZyBhbmQgZ3JhbW1h
ciBtZXNzYWdlcwogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpICAKLSAgICBDaGVja1Rl
eHRPZlBhcmFncmFwaChTdHJpbmcgdGV4dCwgT3B0aW9uU2V0PFdlYkNvcmU6OlRleHRDaGVja2lu
Z1R5cGU+IGNoZWNraW5nVHlwZXMsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQpIC0+IChWZWN0b3I8
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzKSBMZWdhY3lTeW5jCisgICAgQ2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nIHRleHQsIE9wdGlvblNldDxXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzLCBpbnQzMl90IGluc2VydGlvblBvaW50KSAtPiAoVmVj
dG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0cykgRGVsYXllZAogI2VuZGlm
Ci0gICAgQ2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZyB0ZXh0KSAtPiAoaW50MzJfdCBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90IG1pc3NwZWxsaW5nTGVuZ3RoKSBMZWdhY3lTeW5jCi0g
ICAgQ2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nIHRleHQpIC0+IChWZWN0b3I8V2ViQ29yZTo6
R3JhbW1hckRldGFpbD4gcmVzdWx0cywgaW50MzJfdCBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMy
X3QgYmFkR3JhbW1hckxlbmd0aCkgTGVnYWN5U3luYwotICAgIFNwZWxsaW5nVUlJc1Nob3dpbmco
KSAtPiAoYm9vbCBpc1Nob3dpbmcpIExlZ2FjeVN5bmMKKyAgICBDaGVja1NwZWxsaW5nT2ZTdHJp
bmcoU3RyaW5nIHRleHQpIC0+IChpbnQzMl90IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3Qg
bWlzc3BlbGxpbmdMZW5ndGgpIERlbGF5ZWQKKyAgICBDaGVja0dyYW1tYXJPZlN0cmluZyhTdHJp
bmcgdGV4dCkgLT4gKFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiByZXN1bHRzLCBpbnQz
Ml90IGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCBiYWRHcmFtbWFyTGVuZ3RoKSBEZWxheWVk
CisgICAgU3BlbGxpbmdVSUlzU2hvd2luZygpIC0+IChib29sIGlzU2hvd2luZykgRGVsYXllZAog
ICAgIFVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoU3RyaW5nIG1pc3NwZWxsZWRX
b3JkKQogICAgIFVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhTdHJpbmcgYmFkR3Jh
bW1hclBocmFzZSwgc3RydWN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwgZ3JhbW1hckRldGFpbCkK
LSAgICBHZXRHdWVzc2VzRm9yV29yZChTdHJpbmcgd29yZCwgU3RyaW5nIGNvbnRleHQsIGludDMy
X3QgaW5zZXJ0aW9uUG9pbnQpIC0+IChWZWN0b3I8U3RyaW5nPiBndWVzc2VzKSBMZWdhY3lTeW5j
CisgICAgR2V0R3Vlc3Nlc0ZvcldvcmQoU3RyaW5nIHdvcmQsIFN0cmluZyBjb250ZXh0LCBpbnQz
Ml90IGluc2VydGlvblBvaW50KSAtPiAoVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcykgRGVsYXllZAog
ICAgIExlYXJuV29yZChTdHJpbmcgd29yZCkKICAgICBJZ25vcmVXb3JkKFN0cmluZyB3b3JkKQog
ICAgIFJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCwgV2ViQ29yZTo6
VGV4dENoZWNraW5nUmVxdWVzdERhdGEgcmVxdWVzdCwgaW50MzJfdCBpbnNlcnRpb25Qb2ludCkK
QEAgLTMzNiw3ICszMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIERpZFBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwKHN0cnVjdCBXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZv
IGRpY3Rpb25hcnlQb3B1cEluZm8pCiAKICAgICAjIEtleWJvYXJkIGlucHV0IHN1cHBvcnQgbWVz
c2FnZXMKLSAgICBFeGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcihTdHJpbmcgc2VsZWN0b3Ip
IC0+IChib29sIGhhbmRsZWQpIExlZ2FjeVN5bmMKKyAgICBFeGVjdXRlU2F2ZWRDb21tYW5kQnlT
ZWxlY3RvcihTdHJpbmcgc2VsZWN0b3IpIC0+IChib29sIGhhbmRsZWQpIERlbGF5ZWQKIAogICAg
ICMgUmVtb3RlIGFjY2Vzc2liaWxpdHkgbWVzc2FnZXMKICAgICBSZWdpc3RlcldlYlByb2Nlc3NB
Y2Nlc3NpYmlsaXR5VG9rZW4oSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCkBAIC0zNDYsNyArMzQ2
LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBTZXRQbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIHVp
bnQ2NF90IGNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkKIAogICAgICMgU3BlZWNoIG1lc3NhZ2VzCi0g
ICAgR2V0SXNTcGVha2luZygpIC0+IChib29sIGlzU3BlYWtpbmcpIExlZ2FjeVN5bmMKKyAgICBH
ZXRJc1NwZWFraW5nKCkgLT4gKGJvb2wgaXNTcGVha2luZykgRGVsYXllZAogICAgIFNwZWFrKFN0
cmluZyBzdHJpbmcpCiAgICAgU3RvcFNwZWFraW5nKCkKIApAQCAtMzY0LDcgKzM2NCw3IEBAIG1l
c3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAjZW5kaWYKIAogI2lmIFVTRShBUFBLSVQpCi0gICAg
U3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKCkgLT4gKGJvb2wgaXNTaG93aW5nKSBMZWdhY3lT
eW5jCisgICAgU3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKCkgLT4gKGJvb2wgaXNTaG93aW5n
KSBEZWxheWVkCiAjZW5kaWYKICNpZiBVU0UoQVVUT01BVElDX1RFWFRfUkVQTEFDRU1FTlQpCiAg
ICAgdG9nZ2xlU21hcnRJbnNlcnREZWxldGUoKQpAQCAtMzc3LDcgKzM3Nyw3IEBAIG1lc3NhZ2Vz
IC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgIyBBdXRvY29ycmVjdGlvbiBtZXNzYWdlcwogICAgIFNo
b3dDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCBwYW5lbFR5cGUsIFdlYkNvcmU6OkZsb2F0UmVjdCBi
b3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIFN0cmluZyByZXBsYWNlZFN0cmluZywgU3RyaW5n
IHJlcGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50
U3RyaW5ncykKICAgICBEaXNtaXNzQ29ycmVjdGlvblBhbmVsKGludDMyX3QgcmVhc29uKQotICAg
IERpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKGludDMyX3QgcmVhc29uKSAtPiAoU3RyaW5nIHJl
c3VsdCkgTGVnYWN5U3luYworICAgIERpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKGludDMyX3Qg
cmVhc29uKSAtPiAoU3RyaW5nIHJlc3VsdCkgRGVsYXllZAogICAgIFJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UoaW50MzJfdCByZXNwb25zZSwgU3RyaW5nIHJlcGxhY2VkU3RyaW5nLCBTdHJp
bmcgcmVwbGFjZW1lbnRTdHJpbmcpOwogCiAgICAgU2V0RWRpdGFibGVFbGVtZW50SXNGb2N1c2Vk
KGJvb2wgZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKQpAQCAtMzg2LDEyICszODYsMTIgQEAgbWVz
c2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykK
ICAgICBTaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRp
bmdCb3hPZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKICAgICBSZW1v
dmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKLSAgICBE
aWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkgLT4gKFZlY3Rv
cjxTdHJpbmc+IGFsdGVybmF0aXZlcykgTGVnYWN5U3luYworICAgIERpY3RhdGlvbkFsdGVybmF0
aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSAtPiAoVmVjdG9yPFN0cmluZz4gYWx0ZXJu
YXRpdmVzKSBEZWxheWVkCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFgxMSkKICAgICAjIFgxMSB3
aW5kb3dlZCBwbHVnaW4gbWVzc2FnZXMKLSAgICBDcmVhdGVQbHVnaW5Db250YWluZXIoKSAtPiAo
dWludDY0X3Qgd2luZG93SUQpIExlZ2FjeVN5bmMKKyAgICBDcmVhdGVQbHVnaW5Db250YWluZXIo
KSAtPiAodWludDY0X3Qgd2luZG93SUQpIERlbGF5ZWQKICAgICBXaW5kb3dlZFBsdWdpbkdlb21l
dHJ5RGlkQ2hhbmdlKFdlYkNvcmU6OkludFJlY3QgZnJhbWVSZWN0LCBXZWJDb3JlOjpJbnRSZWN0
IGNsaXBSZWN0LCB1aW50NjRfdCB3aW5kb3dJRCkKICAgICBXaW5kb3dlZFBsdWdpblZpc2liaWxp
dHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUsIHVpbnQ2NF90IHdpbmRvd0lEKQogI2VuZGlmCkBA
IC00MjksNyArNDI5LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAogICAgICMgU2Vh
cmNoIHBvcHVwIG1lbnVzCiAgICAgU2F2ZVJlY2VudFNlYXJjaGVzKFN0cmluZyBuYW1lLCBWZWN0
b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiBzZWFyY2hJdGVtcykKLSAgICBMb2FkUmVjZW50U2Vh
cmNoZXMoU3RyaW5nIG5hbWUpIC0+IChWZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiByZXN1
bHQpIExlZ2FjeVN5bmMKKyAgICBMb2FkUmVjZW50U2VhcmNoZXMoU3RyaW5nIG5hbWUpIC0+IChW
ZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiByZXN1bHQpIERlbGF5ZWQKIAogICAgIFNhdmVQ
REZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCBv
cmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCiAKQEAgLTQzOSw3ICs0Mzks
NyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogI2VuZGlmCiAKICNpZiBFTkFCTEUoUERG
S0lUX1BMVUdJTikKLSAgICBTaG93UERGQ29udGV4dE1lbnUoc3RydWN0IFdlYktpdDo6UERGQ29u
dGV4dE1lbnUgY29udGV4dE1lbnUpIC0+IChPcHRpb25hbDxpbnQzMl90PiBzZWxlY3RlZEl0ZW0p
IExlZ2FjeVN5bmMKKyAgICBTaG93UERGQ29udGV4dE1lbnUoc3RydWN0IFdlYktpdDo6UERGQ29u
dGV4dE1lbnUgY29udGV4dE1lbnUpIC0+IChPcHRpb25hbDxpbnQzMl90PiBzZWxlY3RlZEl0ZW0p
IERlbGF5ZWQKICNlbmRpZgogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC00
NTEsOCArNDUxLDggQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBEaWRTYXZlVG9Q
YWdlQ2FjaGUoKQogCiAjaWYgRU5BQkxFKFdFQl9DUllQVE8pCi0gICAgV3JhcENyeXB0b0tleShW
ZWN0b3I8dWludDhfdD4ga2V5KSAtPiAoYm9vbCBzdWNjZWVkZWQsIFZlY3Rvcjx1aW50OF90PiB3
cmFwcGVkS2V5KSBMZWdhY3lTeW5jCi0gICAgVW53cmFwQ3J5cHRvS2V5KFZlY3Rvcjx1aW50OF90
PiB3cmFwcGVkS2V5KSAtPiAoYm9vbCBzdWNjZWVkZWQsIFZlY3Rvcjx1aW50OF90PiBrZXkpIExl
Z2FjeVN5bmMKKyAgICBXcmFwQ3J5cHRvS2V5KFZlY3Rvcjx1aW50OF90PiBrZXkpIC0+IChib29s
IHN1Y2NlZWRlZCwgVmVjdG9yPHVpbnQ4X3Q+IHdyYXBwZWRLZXkpIERlbGF5ZWQKKyAgICBVbndy
YXBDcnlwdG9LZXkoVmVjdG9yPHVpbnQ4X3Q+IHdyYXBwZWRLZXkpIC0+IChib29sIHN1Y2NlZWRl
ZCwgVmVjdG9yPHVpbnQ4X3Q+IGtleSkgRGVsYXllZAogI2VuZGlmCiAKIApAQCAtNDg1LDcgKzQ4
NSw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgRGlkUGVyZm9ybUltbWVkaWF0
ZUFjdGlvbkhpdFRlc3Qoc3RydWN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEgcmVzdWx0
LCBib29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEp
CiAjZW5kaWYKICAgICBIYW5kbGVNZXNzYWdlKFN0cmluZyBtZXNzYWdlTmFtZSwgV2ViS2l0OjpV
c2VyRGF0YSBtZXNzYWdlQm9keSkgV2FudHNDb25uZWN0aW9uCi0gICAgSGFuZGxlU3luY2hyb25v
dXNNZXNzYWdlKFN0cmluZyBtZXNzYWdlTmFtZSwgV2ViS2l0OjpVc2VyRGF0YSBtZXNzYWdlQm9k
eSkgLT4gKFdlYktpdDo6VXNlckRhdGEgcmV0dXJuRGF0YSkgTGVnYWN5U3luYyBXYW50c0Nvbm5l
Y3Rpb24KKyAgICBIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VOYW1lLCBX
ZWJLaXQ6OlVzZXJEYXRhIG1lc3NhZ2VCb2R5KSAtPiAoV2ViS2l0OjpVc2VyRGF0YSByZXR1cm5E
YXRhKSBEZWxheWVkIFdhbnRzQ29ubmVjdGlvbgogCiAgICAgSGFuZGxlQXV0b0ZpbGxCdXR0b25D
bGljayhXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQogCkBAIC01NDYsMTMgKzU0NiwxMyBAQCBt
ZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIENsb25lQXR0YWNobWVudERhdGEoU3RyaW5n
IGZyb21JZGVudGlmaWVyLCBTdHJpbmcgdG9JZGVudGlmaWVyKQogICAgIERpZEluc2VydEF0dGFj
aG1lbnRXaXRoSWRlbnRpZmllcihTdHJpbmcgaWRlbnRpZmllciwgU3RyaW5nIHNvdXJjZSwgYm9v
bCBoYXNFbmNsb3NpbmdJbWFnZSkKICAgICBEaWRSZW1vdmVBdHRhY2htZW50V2l0aElkZW50aWZp
ZXIoU3RyaW5nIGlkZW50aWZpZXIpCi0gICAgU2VyaWFsaXplZEF0dGFjaG1lbnREYXRhRm9ySWRl
bnRpZmllcnMoVmVjdG9yPFN0cmluZz4gaWRlbnRpZmllcnMpIC0+IChWZWN0b3I8V2ViQ29yZTo6
U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiBzZXJhbGl6ZWREYXRhKSBMZWdhY3lTeW5jCisgICAg
U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhRm9ySWRlbnRpZmllcnMoVmVjdG9yPFN0cmluZz4gaWRl
bnRpZmllcnMpIC0+IChWZWN0b3I8V2ViQ29yZTo6U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiBz
ZXJhbGl6ZWREYXRhKSBEZWxheWVkCiAjZW5kaWYKIAotICAgIFNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIFN0cmluZyBjaGFsbGVuZ2VTdHJp
bmcsIFVSTCB1cmwpIC0+IChTdHJpbmcgcmVzdWx0KSBMZWdhY3lTeW5jCisgICAgU2lnbmVkUHVi
bGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgU3RyaW5nIGNo
YWxsZW5nZVN0cmluZywgVVJMIHVybCkgLT4gKFN0cmluZyByZXN1bHQpIERlbGF5ZWQKIAogI2lm
IEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFNwZWVjaFN5bnRoZXNpc1ZvaWNlTGlzdCgp
IC0+IChWZWN0b3I8V2ViS2l0OjpXZWJTcGVlY2hTeW50aGVzaXNWb2ljZT4gdm9pY2VMaXN0KSBM
ZWdhY3lTeW5jCisgICAgU3BlZWNoU3ludGhlc2lzVm9pY2VMaXN0KCkgLT4gKFZlY3RvcjxXZWJL
aXQ6OldlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlPiB2b2ljZUxpc3QpIERlbGF5ZWQKICAgICBTcGVl
Y2hTeW50aGVzaXNTcGVhayhTdHJpbmcgdGV4dCwgU3RyaW5nIGxhbmcsIGZsb2F0IHZvbHVtZSwg
ZmxvYXQgcmF0ZSwgZmxvYXQgcGl0Y2gsIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lLCBTdHJpbmcg
dm9pY2VVUkksIFN0cmluZyB2b2ljZU5hbWUsIFN0cmluZyB2b2ljZUxhbmcsIGJvb2wgbG9jYWxT
ZXJ2aWNlLCBib29sIGRlZmF1bHRWb2ljZSkgLT4gKCkgQXN5bmMKICAgICBTcGVlY2hTeW50aGVz
aXNDYW5jZWwoKQogICAgIFNwZWVjaFN5bnRoZXNpc1BhdXNlKCkgLT4gKCkgQXN5bmMKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29h
Lm1tCShyZXZpc2lvbiAyNDMxODApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQYWdlUHJveHlDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjMsMTQgKzYzLDE0IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpzYXZlUmVjZW50U2VhcmNoZXMoY28KICAgICBXZWJDb3JlOjpzYXZl
UmVjZW50U2VhcmNoZXMobmFtZSwgc2VhcmNoSXRlbXMpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94
eTo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IFN0cmluZyYgbmFtZSwgVmVjdG9yPFdlYkNvcmU6
OlJlY2VudFNlYXJjaD4mIHNlYXJjaEl0ZW1zKQordm9pZCBXZWJQYWdlUHJveHk6OmxvYWRSZWNl
bnRTZWFyY2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPFdlYkNvcmU6OlJlY2VudFNlYXJjaD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgaWYgKCFuYW1lKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3Nh
Z2UgY2hlY2suCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKHsgfSk7CiAgICAgfQogCi0gICAgc2VhcmNoSXRlbXMgPSBXZWJDb3JlOjpsb2FkUmVjZW50
U2VhcmNoZXMobmFtZSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoV2ViQ29yZTo6bG9hZFJlY2Vu
dFNlYXJjaGVzKG5hbWUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmJlZ2luU2FmZUJyb3dz
aW5nQ2hlY2soY29uc3QgVVJMJiB1cmwsIGJvb2wgZm9yTWFpbkZyYW1lTmF2aWdhdGlvbiwgV2Vi
RnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5JiBsaXN0ZW5lcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCShyZXZpc2lvbiAyNDMxODAp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjUsOSArNjUsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVSZWNl
bnRTZWFyY2hlcyhjbwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViUGFnZVBy
b3h5Ojpsb2FkUmVjZW50U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFdlYkNvcmU6OlJl
Y2VudFNlYXJjaD4mKQordm9pZCBXZWJQYWdlUHJveHk6OmxvYWRSZWNlbnRTZWFyY2hlcyhjb25z
dCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpSZWNlbnRT
ZWFyY2g+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpwbGF0Zm9ybVJlbW92ZVJlY2VudFNlYXJjaGVzKFdhbGxUaW1lIG9sZGVzdFRpbWVUb1JlbW92
ZSkKQEAgLTEwMiwxNSArMTAzLDE2IEBAIHN0YXRpYyBnYm9vbGVhbiBwbHVnaW5Db250YWluZXJQ
bHVnUmVtb3YKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpjcmVh
dGVQbHVnaW5Db250YWluZXIodWludDY0X3QmIHdpbmRvd0lEKQordm9pZCBXZWJQYWdlUHJveHk6
OmNyZWF0ZVBsdWdpbkNvbnRhaW5lcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChXZWJDb3JlOjpQbGF0
Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKS50eXBlKCkgPT0gV2ViQ29yZTo6UGxhdGZvcm1E
aXNwbGF5OjpUeXBlOjpYMTEpOwogICAgIEd0a1dpZGdldCogc29ja2V0ID0gZ3RrX3NvY2tldF9u
ZXcoKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHNvY2tldCwgInBsdWctcmVtb3ZlZCIsIEdfQ0FM
TEJBQ0socGx1Z2luQ29udGFpbmVyUGx1Z1JlbW92ZWQpLCAwKTsKICAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKHZpZXdXaWRnZXQoKSksIHNvY2tldCk7CiAKLSAgICB3aW5kb3dJ
RCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihndGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VUKHNv
Y2tldCkpKTsKKyAgICB1aW50NjRfdCB3aW5kb3dJRCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihn
dGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VUKHNvY2tldCkpKTsKICAgICBwbHVnaW5XaW5kb3dN
YXAoKS5zZXQod2luZG93SUQsIHNvY2tldCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIod2luZG93
SUQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6d2luZG93ZWRQbHVnaW5HZW9tZXRyeURpZENo
YW5nZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmcmFtZVJlY3QsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGNsaXBSZWN0LCB1aW50NjRfdCB3aW5kb3dJRCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkocmV2aXNpb24gMjQzMTgwKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsOSArNzgsMTAgQEAgU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRV
c2VyQWdlbnQoYwogICAgIHJldHVybiBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5h
bWUoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6
OmdldElzU3BlYWtpbmcoYm9vbCYpCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0SXNTcGVha2luZyhD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6c3BlYWsoY29uc3QgU3RyaW5nJikKQEAgLTc0MSwxMCArNzQyLDEw
IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojptb3ZlU2VsZWN0aW9uQnlPZmZzZXQKICAgICBtX3Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Ok1vdmVTZWxlY3Rpb25CeU9mZnNldChvZmZzZXQs
IGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjppbnRlcnBy
ZXRLZXlFdmVudChjb25zdCBFZGl0b3JTdGF0ZSYgc3RhdGUsIGJvb2wgaXNDaGFyRXZlbnQsIGJv
b2wmIGhhbmRsZWQpCit2b2lkIFdlYlBhZ2VQcm94eTo6aW50ZXJwcmV0S2V5RXZlbnQoY29uc3Qg
RWRpdG9yU3RhdGUmIHN0YXRlLCBib29sIGlzQ2hhckV2ZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fZWRpdG9yU3RhdGUgPSBz
dGF0ZTsKLSAgICBoYW5kbGVkID0gcGFnZUNsaWVudCgpLmludGVycHJldEtleUV2ZW50KG1fa2V5
RXZlbnRRdWV1ZS5maXJzdCgpLCBpc0NoYXJFdmVudCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIo
cGFnZUNsaWVudCgpLmludGVycHJldEtleUV2ZW50KG1fa2V5RXZlbnRRdWV1ZS5maXJzdCgpLCBp
c0NoYXJFdmVudCkpOwogfQogCiAvLyBDb21wbGV4IHRleHQgaW5wdXQgc3VwcG9ydCBmb3IgcGx1
Zy1pbnMuCkBAIC03OTEsOSArNzkyLDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQbHVnaW5D
b21wbGV4VGV4dEkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94
eTo6ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgYm9vbCYpCit2
b2lkIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3Ry
aW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsK
IH0KIAogYm9vbCBXZWJQYWdlUHJveHk6OnNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVu
dChjb25zdCBXZWJLaXQ6OldlYk1vdXNlRXZlbnQmKQpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiAyNDMxODApCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzEsMTAgKzEzMSwxMCBAQCBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVz
ZXJBZ2VudChjCiAgICAgcmV0dXJuIHN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFt
ZShhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6
Z2V0SXNTcGVha2luZyhib29sJiBpc1NwZWFraW5nKQordm9pZCBXZWJQYWdlUHJveHk6OmdldElz
U3BlYWtpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpD
YW5Db21tdW5pY2F0ZVdpdGhXaW5kb3dTZXJ2ZXIpKTsKLSAgICBpc1NwZWFraW5nID0gW05TQXBw
IGlzU3BlYWtpbmddOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFtOU0FwcCBpc1NwZWFraW5nXSk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzcGVhayhjb25zdCBTdHJpbmcmIHN0cmluZykKQEAg
LTQwNCwxMSArNDA0LDExIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQbHVnaW5Db21wbGV4VGV4
dEkKICAgICBwYWdlQ2xpZW50KCkuc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKHBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBzdGF0aWNfY2FzdDxQbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGU+KHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkpOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgYm9vbCYgaGFuZGxlZCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpleGVjdXRlU2F2ZWRD
b21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIE1FU1NBR0VfQ0hFQ0so
aXNWYWxpZEtleXByZXNzQ29tbWFuZE5hbWUoc2VsZWN0b3IpKTsKIAotICAgIGhhbmRsZWQgPSBw
YWdlQ2xpZW50KCkuZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3Ioc2VsZWN0b3IpOworICAg
IGNvbXBsZXRpb25IYW5kbGVyKHBhZ2VDbGllbnQoKS5leGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxl
Y3RvcihzZWxlY3RvcikpOwogfQogCiBib29sIFdlYlBhZ2VQcm94eTo6c2hvdWxkRGVsYXlXaW5k
b3dPcmRlcmluZ0ZvckV2ZW50KGNvbnN0IFdlYktpdDo6V2ViTW91c2VFdmVudCYgZXZlbnQpCkBA
IC01NDgsMTAgKzU0OCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1wb3Jh
cnlGCiB9CiAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKLXZvaWQgV2ViUGFnZVByb3h5Ojpz
aG93UERGQ29udGV4dE1lbnUoY29uc3QgV2ViS2l0OjpQREZDb250ZXh0TWVudSYgY29udGV4dE1l
bnUsIE9wdGlvbmFsPGludDMyX3Q+JiBzZWxlY3RlZEluZGV4KQordm9pZCBXZWJQYWdlUHJveHk6
OnNob3dQREZDb250ZXh0TWVudShjb25zdCBXZWJLaXQ6OlBERkNvbnRleHRNZW51JiBjb250ZXh0
TWVudSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxpbnQzMl90PiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWNvbnRleHRNZW51Lm1faXRlbXMuc2l6ZSgpKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om51
bGxvcHQpOwogICAgIAogICAgIFJldGFpblB0cjxXS1BERk1lbnVUYXJnZXQ+IG1lbnVUYXJnZXQg
PSBhZG9wdE5TKFtbV0tQREZNZW51VGFyZ2V0IGFsbG9jXSBpbml0XSk7CiAgICAgUmV0YWluUHRy
PE5TTWVudT4gbnNNZW51ID0gYWRvcHROUyhbW05TTWVudSBhbGxvY10gaW5pdF0pOwpAQCAtNTg0
LDcgKzU4NCw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzaG93UERGQ29udGV4dE1lbnUoY28KICAg
ICBbTlNNZW51IHBvcFVwQ29udGV4dE1lbnU6bnNNZW51LmdldCgpIHdpdGhFdmVudDpldmVudCBm
b3JWaWV3OnZpZXddOwogCiAgICAgaWYgKGF1dG8gc2VsZWN0ZWRNZW51SXRlbSA9IFttZW51VGFy
Z2V0IHNlbGVjdGVkTWVudUl0ZW1dKQotICAgICAgICBzZWxlY3RlZEluZGV4ID0gW3NlbGVjdGVk
TWVudUl0ZW0gdGFnXTsKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFtzZWxlY3Rl
ZE1lbnVJdGVtIHRhZ10pOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVsbG9wdCk7CiB9
CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94
eVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBh
Z2VQcm94eVdpbi5jcHAJKHJldmlzaW9uIDI0MzE4MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMiArNTAs
MTQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVSZWNlbnRTZWFyY2hlcyhjbwogICAgIHJldHVy
biBXZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnVEQjo6c2luZ2xldG9uKCkuc2F2ZVJlY2VudFNlYXJj
aGVzKG5hbWUsIHNlYXJjaEl0ZW1zKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmxvYWRSZWNl
bnRTZWFyY2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIFZlY3RvcjxXZWJDb3JlOjpSZWNlbnRTZWFy
Y2g+JiBzZWFyY2hJdGVtcykKK3ZvaWQgV2ViUGFnZVByb3h5Ojpsb2FkUmVjZW50U2VhcmNoZXMo
Y29uc3QgU3RyaW5nJiBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3Jl
OjpSZWNlbnRTZWFyY2g+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghbmFt
ZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9
KTsKIAotICAgIHJldHVybiBXZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnVEQjo6c2luZ2xldG9uKCku
bG9hZFJlY2VudFNlYXJjaGVzKG5hbWUsIHNlYXJjaEl0ZW1zKTsKKyAgICBWZWN0b3I8V2ViQ29y
ZTo6UmVjZW50U2VhcmNoPiBzZWFyY2hJdGVtczsKKyAgICBXZWJDb3JlOjpTZWFyY2hQb3B1cE1l
bnVEQjo6c2luZ2xldG9uKCkubG9hZFJlY2VudFNlYXJjaGVzKG5hbWUsIHNlYXJjaEl0ZW1zKTsK
KyAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHNlYXJjaEl0ZW1zKSk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjplZGl0b3JTdGF0ZUNoYW5nZWQoY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRv
clN0YXRlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365506</attachid>
            <date>2019-03-21 00:06:15 -0700</date>
            <delta_ts>2019-03-21 13:55:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196056-20190321000615.patch</filename>
            <type>text/plain</type>
            <size>59008</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDMyNzgpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE5LTAzLTIxICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3RvcCB1c2luZyBM
ZWdhY3lTeW5jIG1lc3NhZ2VzIGluIFdlYlBhZ2VQcm94eQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2MDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5
Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9hZFJlY2VudFNlYXJj
aGVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpQcm92aXNpb25hbFBhZ2VQcm94eTo6YmFja0ZvcndhcmRHb1RvSXRlbSk6
CisgICAgICAgIChXZWJLaXQ6OlByb3Zpc2lvbmFsUGFnZVByb3h5OjpkaWRSZWNlaXZlU3luY01l
c3NhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6aGFzSW5zZWN1cmVDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjphY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6cm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnByaW50RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmJhY2tGb3J3YXJkR29Ub0l0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmJhY2tGb3J3YXJkR29Ub0l0ZW1TaGFyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmJhY2tGb3J3YXJkSXRlbUF0SW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmJhY2tGb3J3YXJkQmFja0xpc3RDb3VudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6YmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpjYW5VbmRvUmVkbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6ZXhlY3V0ZVVuZG9SZWRvKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpj
aGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2hl
Y2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjaGVj
a0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3BlbGxp
bmdVSUlzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0R3Vlc3Nl
c0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN1YnN0aXR1dGlvbnNQ
YW5lbElzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvd0NvcnJl
Y3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbFNvb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY29yZEF1
dG9jb3JyZWN0aW9uUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRp
Y3RhdGlvbkFsdGVybmF0aXZlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6d3Jh
cENyeXB0b0tleSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dW53cmFwQ3J5cHRv
S2V5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaWduZWRQdWJsaWNLZXlBbmRD
aGFsbGVuZ2VTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlcmlhbGl6
ZWRBdHRhY2htZW50RGF0YUZvcklkZW50aWZpZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpzcGVlY2hTeW50aGVzaXNWb2ljZUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnByaW50TWFpbkZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y3JlYXRlUGx1Z2luQ29udGFpbmVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjppbnRlcnByZXRLZXlFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL21h
Yy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0
SXNTcGVha2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZXhlY3V0ZVNhdmVk
Q29tbWFuZEJ5U2VsZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3dQ
REZDb250ZXh0TWVudSk6CisKIDIwMTktMDMtMjAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBw
bGUuY29tPgogCiAgICAgICAgIENvbXB1dGUgcXVvdGEgYWZ0ZXIgbmV0d29yayBwcm9jZXNzIHJl
c3RhcnQgYmFzZWQgb24gZGVmYXVsdCBxdW90YSBhbmQgc3BhY2UgdXNlZApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmNwcAkocmV2aXNp
b24gMjQzMTgwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsOSArMzAzLDkgQEAgdm9pZCBQcm92aXNpb25h
bFBhZ2VQcm94eTo6c3RhcnRVUkxTY2hlbQogICAgIG1fcGFnZS5zdGFydFVSTFNjaGVtZVRhc2tT
aGFyZWQobV9wcm9jZXNzLmNvcHlSZWYoKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiB9CiAKLXZv
aWQgUHJvdmlzaW9uYWxQYWdlUHJveHk6OmJhY2tGb3J3YXJkR29Ub0l0ZW0oY29uc3QgV2ViQ29y
ZTo6QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYgaWRlbnRpZmllciwgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlJiBoYW5kbGUpCit2b2lkIFByb3Zpc2lvbmFsUGFnZVByb3h5OjpiYWNrRm9yd2Fy
ZEdvVG9JdGVtKGNvbnN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGlkZW50
aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fcGFnZS5iYWNrRm9yd2FyZEdvVG9JdGVt
U2hhcmVkKG1fcHJvY2Vzcy5jb3B5UmVmKCksIGlkZW50aWZpZXIsIGhhbmRsZSk7CisgICAgbV9w
YWdlLmJhY2tGb3J3YXJkR29Ub0l0ZW1TaGFyZWQobV9wcm9jZXNzLmNvcHlSZWYoKSwgaWRlbnRp
ZmllciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFByb3Zpc2lvbmFs
UGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uU3luYyh1aW50NjRfdCBm
cmFtZUlELCBib29sIGlzTWFpbkZyYW1lLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiBm
cmFtZVNlY3VyaXR5T3JpZ2luLCBXZWJDb3JlOjpQb2xpY3lDaGVja0lkZW50aWZpZXIgaWRlbnRp
ZmllciwKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIFByb3Zpc2lvbmFsUGFnZVByb3h5OjpkaWRS
ZWNlaXZlTWVzCiB2b2lkIFByb3Zpc2lvbmFsUGFnZVByb3h5OjpkaWRSZWNlaXZlU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0
ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCiB7CiAgICAgaWYgKGRl
Y29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2Fy
ZEdvVG9JdGVtOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlTGVnYWN5U3lu
YzxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEdvVG9JdGVtPihkZWNvZGVyLCAq
cmVwbHlFbmNvZGVyLCB0aGlzLCAmUHJvdmlzaW9uYWxQYWdlUHJveHk6OmJhY2tGb3J3YXJkR29U
b0l0ZW0pOworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2VEZWxheWVkPE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkJhY2tGb3J3YXJkR29Ub0l0ZW0+KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5
RW5jb2RlciwgdGhpcywgJlByb3Zpc2lvbmFsUGFnZVByb3h5OjpiYWNrRm9yd2FyZEdvVG9JdGVt
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNDMxODApCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDIsNyArMTAyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZENvbW1pdExvYWRGb3JG
cmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlkZXIsIHVpbnQzMl90
IGZyYW1lTG9hZFR5cGUsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYsIGJvb2wgY29u
dGFpbnNQbHVnaW5Eb2N1bWVudCwgT3B0aW9uYWw8V2ViQ29yZTo6SGFzSW5zZWN1cmVDb250ZW50
PiBmb3JjZWRIYXNJbnNlY3VyZUNvbnRlbnQsIGNvbnN0IFVzZXJEYXRhJik7CiAgICAgdm9pZCBk
aWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBmcmFtZVNlY3VyaXR5T3JpZ2luLCB1aW50NjRfdCBu
YXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmluZyYgcHJvdmlzaW9uYWxVUkwsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlRXJyb3ImLCBjb25zdCBVc2VyRGF0YSYpOwogICAgIHZvaWQgc3RhcnRVUkxTY2hl
bWVUYXNrKFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJzJiYpOwotICAgIHZvaWQgYmFja0ZvcndhcmRH
b1RvSXRlbShjb25zdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiwgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlJik7CisgICAgdm9pZCBiYWNrRm9yd2FyZEdvVG9JdGVtKGNvbnN0
IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKT4mJik7CiAgICAgdm9pZCBkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uU3luYyh1aW50NjRfdCBmcmFtZUlELCBib29sIGlzTWFpbkZy
YW1lLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgV2ViQ29yZTo6UG9saWN5Q2hlY2tJ
ZGVudGlmaWVyLCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIE5hdmlnYXRpb25BY3Rpb25EYXRhJiYs
CiAgICAgICAgIEZyYW1lSW5mb0RhdGEmJiwgdWludDY0X3Qgb3JpZ2luYXRpbmdQYWdlSUQsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmJiwgSVBDOjpGb3JtRGF0YVJlZmVyZW5jZSYmIHJlcXVlc3RCb2R5LAog
ICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVkaXJlY3RSZXNwb25zZSwgY29u
c3QgVXNlckRhdGEmLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uU3luYzo6RGVsYXllZFJlcGx5JiYpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyNDMxODApCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDQsMTYg
KzcwNCwxNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlTWVzc2FnZShJUEM6OkNvCiAgICAg
bV9pbmplY3RlZEJ1bmRsZUNsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5k
bGUodGhpcywgbWVzc2FnZU5hbWUsIG1fcHJvY2Vzcy0+dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0
cyhtZXNzYWdlQm9keS5vYmplY3QoKSkuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6
aGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBVc2Vy
RGF0YSYgcmV0dXJuVXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlU3luY2hyb25v
dXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFVzZXJEYXRhJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChtX3By
b2Nlc3MtPmNvbm5lY3Rpb24oKSA9PSAmY29ubmVjdGlvbik7CiAKICAgICBpZiAoIW1faW5qZWN0
ZWRCdW5kbGVDbGllbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKHsgfSk7CiAKICAgICBSZWZQdHI8QVBJOjpPYmplY3Q+IHJldHVybkRhdGE7CiAg
ICAgbV9pbmplY3RlZEJ1bmRsZUNsaWVudC0+ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZSh0aGlzLCBtZXNzYWdlTmFtZSwgbV9wcm9jZXNzLT50cmFuc2Zvcm1I
YW5kbGVzVG9PYmplY3RzKG1lc3NhZ2VCb2R5Lm9iamVjdCgpKS5nZXQoKSwgcmV0dXJuRGF0YSk7
Ci0gICAgcmV0dXJuVXNlckRhdGEgPSBVc2VyRGF0YShtX3Byb2Nlc3MtPnRyYW5zZm9ybU9iamVj
dHNUb0hhbmRsZXMocmV0dXJuRGF0YS5nZXQoKSkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFVz
ZXJEYXRhKG1fcHJvY2Vzcy0+dHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyhyZXR1cm5EYXRhLmdl
dCgpKSkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6bGF1bmNoUHJvY2Vzcyhjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgcmVnaXN0cmFibGVEb21haW4pCkBAIC0zODYxLDkgKzM4NjEsOSBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6c2V0TmV0d29ya1JlcXVlc3RzSW5QCiAgICAgbV9wYWdlTG9hZFN0
YXRlLnNldE5ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3ModHJhbnNhY3Rpb24sIG5ldHdvcmtSZXF1
ZXN0c0luUHJvZ3Jlc3MpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6aGFzSW5zZWN1cmVDb250
ZW50KEhhc0luc2VjdXJlQ29udGVudCYgaGFzSW5zZWN1cmVDb250ZW50KQordm9pZCBXZWJQYWdl
UHJveHk6Omhhc0luc2VjdXJlQ29udGVudChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6
Okhhc0luc2VjdXJlQ29udGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaGFzSW5z
ZWN1cmVDb250ZW50ID0gbV9wYWdlTG9hZFN0YXRlLmNvbW1pdHRlZEhhc0luc2VjdXJlQ29udGVu
dCgpID8gSGFzSW5zZWN1cmVDb250ZW50OjpZZXMgOiBIYXNJbnNlY3VyZUNvbnRlbnQ6Ok5vOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcGFnZUxvYWRTdGF0ZS5jb21taXR0ZWRIYXNJbnNlY3Vy
ZUNvbnRlbnQoKSA/IEhhc0luc2VjdXJlQ29udGVudDo6WWVzIDogSGFzSW5zZWN1cmVDb250ZW50
OjpObyk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWREZXN0cm95TmF2aWdhdGlvbih1aW50
NjRfdCBuYXZpZ2F0aW9uSUQpCkBAIC01MjE4LDE0ICs1MjE4LDE0IEBAIEludFJlY3QgV2ViUGFn
ZVByb3h5OjpzeW5jUm9vdFZpZXdUb1NjcmUKICAgICByZXR1cm4gcGFnZUNsaWVudCgpLnJvb3RW
aWV3VG9TY3JlZW4odmlld1JlY3QpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6YWNjZXNzaWJp
bGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHNjcmVlblBvaW50LCBJbnRQb2lu
dCYgd2luZG93UG9pbnQpCit2b2lkIFdlYlBhZ2VQcm94eTo6YWNjZXNzaWJpbGl0eVNjcmVlblRv
Um9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHNjcmVlblBvaW50LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKEludFBvaW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICB3aW5kb3dQb2ludCA9
IHBhZ2VDbGllbnQoKS5hY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290VmlldyhzY3JlZW5Qb2ludCk7
CisgICAgY29tcGxldGlvbkhhbmRsZXIocGFnZUNsaWVudCgpLmFjY2Vzc2liaWxpdHlTY3JlZW5U
b1Jvb3RWaWV3KHNjcmVlblBvaW50KSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpyb290Vmll
d1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBJbnRSZWN0JiB2aWV3UmVjdCwgSW50UmVjdCYg
cmVzdWx0KQordm9pZCBXZWJQYWdlUHJveHk6OnJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVu
KGNvbnN0IEludFJlY3QmIHZpZXdSZWN0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEludFJlY3Qp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIHJlc3VsdCA9IHBhZ2VDbGllbnQoKS5yb290
Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbih2aWV3UmVjdCk7CisgICAgY29tcGxldGlvbkhhbmRs
ZXIocGFnZUNsaWVudCgpLnJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKHZpZXdSZWN0KSk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwodWlu
dDY0X3QgZnJhbWVJRCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbiwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5CZWZvcmVV
bmxvYWRDb25maXJtUGFuZWw6OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQpAQCAtNTMwNyw3ICs1MzA3
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNob3dTaGFyZVNoZWV0KGNvbnN0IAogICAgIHBhZ2VD
bGllbnQoKS5zaG93U2hhcmVTaGVldChzaGFyZURhdGEsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KICAgICAKLXZvaWQgV2ViUGFnZVByb3h5OjpwcmludEZyYW1lKHVpbnQ2NF90IGZy
YW1lSUQpCit2b2lkIFdlYlBhZ2VQcm94eTo6cHJpbnRGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKCFtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uKTsKICAgICBtX2lzUGVyZm9ybWlu
Z0RPTVByaW50T3BlcmF0aW9uID0gdHJ1ZTsKQEAgLTUzMTksMTEgKzUzMTksOCBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6cHJpbnRGcmFtZSh1aW50NjRfdCBmCiAKICAgICBlbmRQcmludGluZygpOyAv
LyBTZW5kIGEgbWVzc2FnZSBzeW5jaHJvbm91c2x5IHdoaWxlIG1faXNQZXJmb3JtaW5nRE9NUHJp
bnRPcGVyYXRpb24gaXMgc3RpbGwgdHJ1ZS4KICAgICBtX2lzUGVyZm9ybWluZ0RPTVByaW50T3Bl
cmF0aW9uID0gZmFsc2U7Ci19CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpwcmludE1haW5GcmFtZSgp
Ci17Ci0gICAgcHJpbnRGcmFtZShtX21haW5GcmFtZS0+ZnJhbWVJRCgpKTsKKyAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0TWVkaWFWb2x1bWUoZmxv
YXQgdm9sdW1lKQpAQCAtNTYwNiw0NiArNTYwMyw0OCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6YmFj
a0ZvcndhcmRBZGRJdGVtKEJhCiAgICAgbV9iYWNrRm9yd2FyZExpc3QtPmFkZEl0ZW0oV1RGTW92
ZShpdGVtKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZEdvVG9JdGVtKGNv
bnN0IEJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGl0ZW1JRCwgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQordm9pZCBXZWJQYWdlUHJveHk6OmJhY2tG
b3J3YXJkR29Ub0l0ZW0oY29uc3QgQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYgaXRlbUlELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICAvLyBPbiBwcm9jZXNzIHN3YXAsIHdlIHRlbGwgdGhlIHBy
ZXZpb3VzIHByb2Nlc3MgdG8gaWdub3JlIHRoZSBsb2FkLCB3aGljaCBjYXVzZXMgaXQgc28gcmVz
dG9yZSBpdHMgY3VycmVudCBiYWNrIGZvcndhcmQgaXRlbSB0byBpdHMgcHJldmlvdXMKICAgICAv
LyB2YWx1ZS4gU2luY2UgdGhlIGxvYWQgaXMgcmVhbGx5IGdvaW5nIG9uIGluIGEgbmV3IHByb3Zp
c2lvbmFsIHByb2Nlc3MsIHdlIHdhbnQgdG8gaWdub3JlIHN1Y2ggcmVxdWVzdHMgZnJvbSB0aGUg
Y29tbWl0dGVkIHByb2Nlc3MuCiAgICAgLy8gQW55IHJlYWwgbmV3IGxvYWQgaW4gdGhlIGNvbW1p
dHRlZCBwcm9jZXNzIHdvdWxkIGhhdmUgY2xlYXJlZCBtX3Byb3Zpc2lvbmFsUGFnZS4KICAgICBp
ZiAobV9wcm92aXNpb25hbFBhZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBiYWNrRm9yd2FyZEdvVG9JdGVtU2hhcmVkKG1f
cHJvY2Vzcy5jb3B5UmVmKCksIGl0ZW1JRCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CisgICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CisgICAgYmFj
a0ZvcndhcmRHb1RvSXRlbVNoYXJlZChtX3Byb2Nlc3MuY29weVJlZigpLCBpdGVtSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3
YXJkR29Ub0l0ZW1TaGFyZWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzLCBjb25zdCBC
YWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiBpdGVtSUQsIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2Fy
ZEdvVG9JdGVtU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzcywgY29uc3QgQmFj
a0ZvcndhcmRJdGVtSWRlbnRpZmllciYgaXRlbUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtID0gbV9iYWNrRm9yd2FyZExpc3QtPml0ZW1Gb3JJ
RChpdGVtSUQpOworICAgIGF1dG8qIGl0ZW0gPSBtX2JhY2tGb3J3YXJkTGlzdC0+aXRlbUZvcklE
KGl0ZW1JRCk7CiAgICAgaWYgKCFpdGVtKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgYm9vbCBjcmVhdGVkRXh0ZW5zaW9uID0gbWF5
YmVJbml0aWFsaXplU2FuZGJveEV4dGVuc2lvbkhhbmRsZShwcm9jZXNzLCBVUkwoVVJMKCksIGl0
ZW0tPnVybCgpKSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAgICAgaWYgKGNyZWF0ZWRFeHRl
bnNpb24pCiAgICAgICAgIHdpbGxBY3F1aXJlVW5pdmVyc2FsRmlsZVJlYWRTYW5kYm94RXh0ZW5z
aW9uKHByb2Nlc3MpOwogICAgIG1fYmFja0ZvcndhcmRMaXN0LT5nb1RvSXRlbSgqaXRlbSk7Cisg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZEl0ZW1BdEluZGV4KGludDMyX3QgaW5k
ZXgsIE9wdGlvbmFsPEJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXI+JiBpdGVtSUQpCit2b2lkIFdl
YlBhZ2VQcm94eTo6YmFja0ZvcndhcmRJdGVtQXRJbmRleChpbnQzMl90IGluZGV4LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPEJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXI+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0g
PSBtX2JhY2tGb3J3YXJkTGlzdC0+aXRlbUF0SW5kZXgoaW5kZXgpOwotICAgIGlmIChpdGVtKQot
ICAgICAgICBpdGVtSUQgPSBpdGVtLT5pdGVtSUQoKTsKKyAgICBpZiAoYXV0byogaXRlbSA9IG1f
YmFja0ZvcndhcmRMaXN0LT5pdGVtQXRJbmRleChpbmRleCkpCisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKGl0ZW0tPml0ZW1JRCgpKTsKICAgICBlbHNlCi0gICAgICAgIGl0ZW1JRCA9IFdURjo6
bnVsbG9wdDsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0KTsKIH0KIAot
dm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkQmFja0xpc3RDb3VudCh1aW50MzJfdCYgY291
bnQpCit2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRCYWNrTGlzdENvdW50KENvbXBsZXRp
b25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNv
dW50ID0gbV9iYWNrRm9yd2FyZExpc3QtPmJhY2tMaXN0Q291bnQoKTsKKyAgICBjb21wbGV0aW9u
SGFuZGxlcihtX2JhY2tGb3J3YXJkTGlzdC0+YmFja0xpc3RDb3VudCgpKTsKIH0KIAotdm9pZCBX
ZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3VudCh1aW50MzJfdCYgY291bnQp
Cit2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50KENvbXBsZXRp
b25IYW5kbGVyPHZvaWQodWludDMyX3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNv
dW50ID0gbV9iYWNrRm9yd2FyZExpc3QtPmZvcndhcmRMaXN0Q291bnQoKTsKKyAgICBjb21wbGV0
aW9uSGFuZGxlcihtX2JhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZExpc3RDb3VudCgpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmNvbXBvc2l0aW9uV2FzQ2FuY2VsZWQoKQpAQCAtNTY2OSwxNCAr
NTY2OCwxNSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJJbnNlcnRpb25VbmRvCiAjZW5k
aWYKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmNhblVuZG9SZWRvKFVuZG9PclJlZG8gYWN0aW9u
LCBib29sJiByZXN1bHQpCit2b2lkIFdlYlBhZ2VQcm94eTo6Y2FuVW5kb1JlZG8oVW5kb09yUmVk
byBhY3Rpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgcmVzdWx0ID0gcGFnZUNsaWVudCgpLmNhblVuZG9SZWRvKGFjdGlvbik7Cisg
ICAgY29tcGxldGlvbkhhbmRsZXIocGFnZUNsaWVudCgpLmNhblVuZG9SZWRvKGFjdGlvbikpOwog
fQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZVVuZG9SZWRvKFVuZG9PclJlZG8gYWN0aW9u
KQordm9pZCBXZWJQYWdlUHJveHk6OmV4ZWN1dGVVbmRvUmVkbyhVbmRvT3JSZWRvIGFjdGlvbiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIHBh
Z2VDbGllbnQoKS5leGVjdXRlVW5kb1JlZG8oYWN0aW9uKTsKKyAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQpAQCAt
NjA2OSwyNSArNjA2OSwzMiBAQCBTcGVsbERvY3VtZW50VGFnIFdlYlBhZ2VQcm94eTo6c3BlbGxE
b2N1CiB9CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotdm9pZCBXZWJQYWdlUHJv
eHk6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uU2V0PFRl
eHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQsIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQordm9pZCBXZWJQYWdlUHJveHk6OmNo
ZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uU2V0PFRleHRDaGVj
a2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgcmVzdWx0cyA9IFRleHRDaGVja2VyOjpjaGVja1Rl
eHRPZlBhcmFncmFwaChzcGVsbERvY3VtZW50VGFnKCksIHRleHQsIGluc2VydGlvblBvaW50LCBj
aGVja2luZ1R5cGVzLCBtX2luaXRpYWxDYXBpdGFsaXphdGlvbkVuYWJsZWQpOworICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChzcGVsbERvY3Vt
ZW50VGFnKCksIHRleHQsIGluc2VydGlvblBvaW50LCBjaGVja2luZ1R5cGVzLCBtX2luaXRpYWxD
YXBpdGFsaXphdGlvbkVuYWJsZWQpKTsKIH0KICNlbmRpZgogCi12b2lkIFdlYlBhZ2VQcm94eTo6
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgaW50MzJfdCYgbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCit2b2lkIFdlYlBhZ2VQ
cm94eTo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChpbnQzMl90IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QgbWlzc3Bl
bGxpbmdMZW5ndGgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIGludDMyX3QgbWlzc3Bl
bGxpbmdMb2NhdGlvbiA9IDA7CisgICAgaW50MzJfdCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7CiAg
ICAgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnKCks
IHRleHQsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICBjb21w
bGV0aW9uSGFuZGxlcihtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBTdHJpbmcm
IHRleHQsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3QmIGJh
ZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiYsIGludDMyX3Qg
YmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90IGJhZEdyYW1tYXJMZW5ndGgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogeworICAgIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiBncmFtbWFyRGV0YWlsczsK
KyAgICBpbnQzMl90IGJhZEdyYW1tYXJMb2NhdGlvbiA9IDA7CisgICAgaW50MzJfdCBiYWRHcmFt
bWFyTGVuZ3RoID0gMDsKICAgICBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoc3Bl
bGxEb2N1bWVudFRhZygpLCB0ZXh0LCBncmFtbWFyRGV0YWlscywgYmFkR3JhbW1hckxvY2F0aW9u
LCBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGdyYW1t
YXJEZXRhaWxzKSwgYmFkR3JhbW1hckxvY2F0aW9uLCBiYWRHcmFtbWFyTGVuZ3RoKTsKIH0KIAot
dm9pZCBXZWJQYWdlUHJveHk6OnNwZWxsaW5nVUlJc1Nob3dpbmcoYm9vbCYgaXNTaG93aW5nKQor
dm9pZCBXZWJQYWdlUHJveHk6OnNwZWxsaW5nVUlJc1Nob3dpbmcoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpc1Nob3dpbmcgPSBUZXh0
Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZygpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFRl
eHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3Nw
ZWxsZWRXb3JkKQpAQCAtNjEwMCw5ICs2MTA3LDExIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRh
dGVTcGVsbGluZ1VJV2l0aEcKICAgICBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcoKSwgYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1h
ckRldGFpbCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpnZXRHdWVzc2VzRm9yV29yZChjb25z
dCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50MzJfdCBpbnNlcnRpb25Q
b2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0R3Vl
c3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIGlu
dDMyX3QgaW5zZXJ0aW9uUG9pbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmlu
Zz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nl
czsKICAgICBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZygp
LCB3b3JkLCBjb250ZXh0LCBpbnNlcnRpb25Qb2ludCwgZ3Vlc3NlcywgbV9pbml0aWFsQ2FwaXRh
bGl6YXRpb25FbmFibGVkKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGd1ZXNzZXMp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmIHdvcmQp
CkBAIC03NjAxLDI4ICs3NjEwLDMyIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp0b2dnbGVBdXRvbWF0
aWNUZXh0UmUKIAogI2lmIFBMQVRGT1JNKE1BQykKIAotdm9pZCBXZWJQYWdlUHJveHk6OnN1YnN0
aXR1dGlvbnNQYW5lbElzU2hvd2luZyhib29sJiBpc1Nob3dpbmcpCit2b2lkIFdlYlBhZ2VQcm94
eTo6c3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaXNTaG93aW5nID0gVGV4dENoZWNrZXI6
OnN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZygpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFRl
eHRDaGVja2VyOjpzdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmcoKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBlLCBjb25zdCBG
bG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogeworICAgIC8vIEZJWE1F
OiBNYWtlIEFsdGVybmF0aXZlVGV4dFR5cGUgYW4gZW51bSBjbGFzcyB3aXRoIEVudW1UcmFpdHMg
YW5kIHNlcmlhbGl6ZSBpdCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8vZnJvbSBhbiBpbnQzMl90Lgog
ICAgIHBhZ2VDbGllbnQoKS5zaG93Q29ycmVjdGlvblBhbmVsKChBbHRlcm5hdGl2ZVRleHRUeXBl
KXBhbmVsVHlwZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0cmluZywg
cmVwbGFjZW1lbnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCByZWFzb24p
CiB7CisgICAgLy8gRklYTUU6IE1ha2UgUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4
dCBhbiBlbnVtIGNsYXNzIHdpdGggRW51bVRyYWl0cyBhbmQgc2VyaWFsaXplIGl0IGluc3RlYWQg
b2YgY2FzdGluZyB0by9mcm9tIGFuIGludDMyX3QuCiAgICAgcGFnZUNsaWVudCgpLmRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpcmVhc29u
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKGlu
dDMyX3QgcmVhc29uLCBTdHJpbmcmIHJlc3VsdCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaXNtaXNz
Q29ycmVjdGlvblBhbmVsU29vbihpbnQzMl90IHJlYXNvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChTdHJpbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIHJlc3VsdCA9IHBhZ2VDbGll
bnQoKS5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbigoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVy
bmF0aXZlVGV4dClyZWFzb24pOworICAgIC8vIEZJWE1FOiBNYWtlIFJlYXNvbkZvckRpc21pc3Np
bmdBbHRlcm5hdGl2ZVRleHQgYW4gZW51bSBjbGFzcyB3aXRoIEVudW1UcmFpdHMgYW5kIHNlcmlh
bGl6ZSBpdCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8vZnJvbSBhbiBpbnQzMl90LgorICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHBhZ2VDbGllbnQoKS5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbigoUmVh
c29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dClyZWFzb24pKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoaW50MzJfdCByZXNwb25zZSwg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZykKIHsKKyAgICAvLyBGSVhNRTogTWFrZSBBdXRvY29ycmVjdGlvblJlc3BvbnNlIGFuIGVu
dW0gY2xhc3Mgd2l0aCBFbnVtVHJhaXRzIGFuZCBzZXJpYWxpemUgaXQgaW5zdGVhZCBvZiBjYXN0
aW5nIHRvL2Zyb20gYW4gaW50MzJfdC4KICAgICBwYWdlQ2xpZW50KCkucmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZShzdGF0aWNfY2FzdDxBdXRvY29ycmVjdGlvblJlc3BvbnNlPihyZXNwb25z
ZSksIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFN0cmluZyk7CiB9CiAKQEAgLTc2NDMsOSAr
NzY1Niw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZW1vdmVEaWN0YXRpb25BbHRlcm4KICAgICBw
YWdlQ2xpZW50KCkucmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKGRpY3RhdGlvbkNvbnRleHQp
OwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90
IGRpY3RhdGlvbkNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpCit2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgcmVzdWx0ID0gcGFnZUNsaWVudCgpLmRpY3RhdGlvbkFsdGVybmF0aXZlcyhk
aWN0YXRpb25Db250ZXh0KTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihwYWdlQ2xpZW50KCkuZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKGRpY3RhdGlvbkNvbnRleHQpKTsKIH0KICNlbmRpZgogCkBAIC03
NzI1LDcgKzc3MzgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0T3ZlcmxheVNjcm9sbGJhclN0
CiB9CiAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKLXZvaWQgV2ViUGFnZVByb3h5Ojp3cmFwQ3J5
cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBib29sJiBzdWNjZWVkZWQsIFZlY3Rv
cjx1aW50OF90PiYgd3JhcHBlZEtleSkKK3ZvaWQgV2ViUGFnZVByb3h5Ojp3cmFwQ3J5cHRvS2V5
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2ws
IFZlY3Rvcjx1aW50OF90PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBQYWdlQ2xp
ZW50UHJvdGVjdG9yIHByb3RlY3RvcihwYWdlQ2xpZW50KCkpOwogCkBAIC03NzM0LDEwICs3NzQ3
LDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp3cmFwQ3J5cHRvS2V5KGNvbnN0IFYKICAgICBpZiAo
YXV0byBrZXlEYXRhID0gbV9uYXZpZ2F0aW9uQ2xpZW50LT53ZWJDcnlwdG9NYXN0ZXJLZXkoKnRo
aXMpKQogICAgICAgICBtYXN0ZXJLZXkgPSBrZXlEYXRhLT5kYXRhUmVmZXJlbmNlKCkudmVjdG9y
KCk7CiAKLSAgICBzdWNjZWVkZWQgPSB3cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXks
IGtleSwgd3JhcHBlZEtleSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHdyYXBwZWRLZXk7CisgICAg
Ym9vbCBzdWNjZWVkZWQgPSB3cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXksIGtleSwg
d3JhcHBlZEtleSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoc3VjY2VlZGVkLCBXVEZNb3ZlKHdy
YXBwZWRLZXkpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnVud3JhcENyeXB0b0tleShjb25z
dCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXksIGJvb2wmIHN1Y2NlZWRlZCwgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXkpCit2b2lkIFdlYlBhZ2VQcm94eTo6dW53cmFwQ3J5cHRvS2V5KGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sLCBW
ZWN0b3I8dWludDhfdD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgUGFnZUNsaWVu
dFByb3RlY3RvciBwcm90ZWN0b3IocGFnZUNsaWVudCgpKTsKIApAQCAtNzc0NiwxNiArNzc2MSwy
MCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dW53cmFwQ3J5cHRvS2V5KGNvbnN0CiAgICAgaWYgKGF1
dG8ga2V5RGF0YSA9IG1fbmF2aWdhdGlvbkNsaWVudC0+d2ViQ3J5cHRvTWFzdGVyS2V5KCp0aGlz
KSkKICAgICAgICAgbWFzdGVyS2V5ID0ga2V5RGF0YS0+ZGF0YVJlZmVyZW5jZSgpLnZlY3Rvcigp
OwogCi0gICAgc3VjY2VlZGVkID0gdW53cmFwU2VyaWFsaXplZENyeXB0b0tleShtYXN0ZXJLZXks
IHdyYXBwZWRLZXksIGtleSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleTsKKyAgICBib29sIHN1
Y2NlZWRlZCA9IHVud3JhcFNlcmlhbGl6ZWRDcnlwdG9LZXkobWFzdGVyS2V5LCB3cmFwcGVkS2V5
LCBrZXkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKHN1Y2NlZWRlZCwgV1RGTW92ZShrZXkpKTsK
IH0KICNlbmRpZgogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nJiBjaGFsbGVuZ2VT
dHJpbmcsIGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcmIHJlc3VsdCkKK3ZvaWQgV2ViUGFnZVByb3h5
OjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4
LCBjb25zdCBTdHJpbmcmIGNoYWxsZW5nZVN0cmluZywgY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBQYWdl
Q2xpZW50UHJvdGVjdG9yIHByb3RlY3RvcihwYWdlQ2xpZW50KCkpOwogCiAgICAgaWYgKGF1dG8g
YXBpU3RyaW5nID0gbV9uYXZpZ2F0aW9uQ2xpZW50LT5zaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2VTdHJpbmcoKnRoaXMsIGtleVNpemVJbmRleCwgQVBJOjpTdHJpbmc6OmNyZWF0ZShjaGFsbGVu
Z2VTdHJpbmcpLCB1cmwpKQotICAgICAgICByZXN1bHQgPSBhcGlTdHJpbmctPnN0cmluZygpOwor
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoYXBpU3RyaW5nLT5zdHJpbmcoKSk7Cisg
ICAgCisgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OmFkZE1JTUVUeXBlV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcihjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQpAQCAtODU5Niw4ICs4NjE1LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmludmFsaWRhdGVB
bGxBdHRhY2htZQogICAgIG1fYXR0YWNobWVudElkZW50aWZpZXJUb0F0dGFjaG1lbnRNYXAuY2xl
YXIoKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YUZv
cklkZW50aWZpZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpZGVudGlmaWVycywgVmVjdG9yPFdl
YkNvcmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YT4mIHNlcmlhbGl6ZWREYXRhKQordm9pZCBX
ZWJQYWdlUHJveHk6OnNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YUZvcklkZW50aWZpZXJzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBpZGVudGlmaWVycywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8V2ViQ29yZTo6U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKKyAgICBWZWN0b3I8V2ViQ29yZTo6U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiBz
ZXJpYWxpemVkRGF0YTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGlkZW50aWZpZXIgOiBpZGVudGlm
aWVycykgewogICAgICAgICBhdXRvIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50Rm9ySWRlbnRpZmll
cihpZGVudGlmaWVyKTsKICAgICAgICAgaWYgKCFhdHRhY2htZW50KQpAQCAtODYwOSw2ICs4NjI5
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNlcmlhbGl6ZWRBdHRhY2htZW50RAogCiAgICAgICAg
IHNlcmlhbGl6ZWREYXRhLmFwcGVuZCh7IGlkZW50aWZpZXIsIGF0dGFjaG1lbnQtPm1pbWVUeXBl
KCksIGRhdGEucmVsZWFzZU5vbk51bGwoKSB9KTsKICAgICB9CisgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShzZXJpYWxpemVkRGF0YSkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlk
SW52YWxpZGF0ZURhdGFGb3JBdHRhY2htZW50KEFQSTo6QXR0YWNobWVudCYgYXR0YWNobWVudCkK
QEAgLTg4MzksMTMgKzg4NjAsMTQgQEAgV2ViUGFnZVByb3h5OjpTcGVlY2hTeW50aGVzaXNEYXRh
JiBXZWJQYQogICAgIHJldHVybiAqbV9zcGVlY2hTeW50aGVzaXNEYXRhOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6c3BlZWNoU3ludGhlc2lzVm9pY2VMaXN0KFZlY3RvcjxXZWJTcGVlY2hTeW50
aGVzaXNWb2ljZT4mIHJlc3VsdCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzcGVlY2hTeW50aGVzaXNW
b2ljZUxpc3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViU3BlZWNoU3ludGhlc2lz
Vm9pY2U+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8mIHZvaWNlTGlzdCA9
IHNwZWVjaFN5bnRoZXNpc0RhdGEoKS5zeW50aGVzaXplci0+dm9pY2VMaXN0KCk7Ci0gICAgZm9y
IChhdXRvJiB2b2ljZSA6IHZvaWNlTGlzdCkgewotICAgICAgICBXZWJTcGVlY2hTeW50aGVzaXNW
b2ljZSB2IHsgdm9pY2UtPnZvaWNlVVJJKCksIHZvaWNlLT5uYW1lKCksIHZvaWNlLT5sYW5nKCks
IHZvaWNlLT5sb2NhbFNlcnZpY2UoKSwgdm9pY2UtPmlzRGVmYXVsdCgpIH07Ci0gICAgICAgIHJl
c3VsdC5hcHBlbmQoV1RGTW92ZSh2KSk7Ci0gICAgfQorICAgIFZlY3RvcjxXZWJTcGVlY2hTeW50
aGVzaXNWb2ljZT4gcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZv
aWNlTGlzdC5zaXplKCkpOworICAgIGZvciAoYXV0byYgdm9pY2UgOiB2b2ljZUxpc3QpCisgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV2ViU3BlZWNoU3ludGhlc2lzVm9pY2UgeyB2b2lj
ZS0+dm9pY2VVUkkoKSwgdm9pY2UtPm5hbWUoKSwgdm9pY2UtPmxhbmcoKSwgdm9pY2UtPmxvY2Fs
U2VydmljZSgpLCB2b2ljZS0+aXNEZWZhdWx0KCkgfSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShyZXN1bHQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNwZWVjaFN5bnRoZXNp
c1NwZWFrKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBsYW5nLCBmbG9hdCB2b2x1
bWUsIGZsb2F0IHJhdGUsIGZsb2F0IHBpdGNoLCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSwgY29u
c3QgU3RyaW5nJiB2b2ljZVVSSSwgY29uc3QgU3RyaW5nJiB2b2ljZU5hbWUsIGNvbnN0IFN0cmlu
ZyYgdm9pY2VMYW5nLCBib29sIGxvY2FsU2VydmljZSwgYm9vbCBkZWZhdWx0Vm9pY2UsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNDMxODApCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1Mywx
NCArMTE1MywxMiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQREZLSVRfUExVR0lO
KQotICAgIHZvaWQgc2hvd1BERkNvbnRleHRNZW51KGNvbnN0IFdlYktpdDo6UERGQ29udGV4dE1l
bnUmLCBPcHRpb25hbDxpbnQzMl90PiYgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBzaG93UERG
Q29udGV4dE1lbnUoY29uc3QgV2ViS2l0OjpQREZDb250ZXh0TWVudSYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoT3B0aW9uYWw8aW50MzJfdD4mJik+JiYpOwogI2VuZGlmCiAgICAgV2ViQ29yZTo6
SW50UmVjdCB2aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Zpc2li
bGVTY3JvbGxlclRodW1iUmVjdDsgfQogCiAgICAgdWludDY0X3QgcmVuZGVyVHJlZVNpemUoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlclRyZWVTaXplOyB9CiAKLSAgICB2b2lkIHByaW50TWFpbkZy
YW1lKCk7Ci0gICAgCiAgICAgdm9pZCBzZXRNZWRpYVZvbHVtZShmbG9hdCk7CiAgICAgdm9pZCBz
ZXRNdXRlZChXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNdXRlZFN0YXRlRmxhZ3MpOwogICAgIHZv
aWQgc2V0TWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdyhib29sKTsKQEAgLTEyNTgsMTEgKzEyNTYs
MTEgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKLSAgICB2b2lk
IHdyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgYm9vbCYgc3VjY2VlZGVkLCBW
ZWN0b3I8dWludDhfdD4mKTsKLSAgICB2b2lkIHVud3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8
dWludDhfdD4mLCBib29sJiBzdWNjZWVkZWQsIFZlY3Rvcjx1aW50OF90PiYpOworICAgIHZvaWQg
d3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wsIFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CisgICAgdm9pZCB1bndyYXBDcnlwdG9L
ZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sLCBW
ZWN0b3I8dWludDhfdD4mJik+JiYpOwogI2VuZGlmCiAKLSAgICB2b2lkIHNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyYg
Y2hhbGxlbmdlU3RyaW5nLCBjb25zdCBVUkwmLCBTdHJpbmcmIHJlc3VsdCk7CisgICAgdm9pZCBz
aWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4LCBj
b25zdCBTdHJpbmcmIGNoYWxsZW5nZVN0cmluZywgY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTdHJpbmcpPiYmKTsKIAogICAgIHZvaWQgdGFrZVNuYXBzaG90KFdlYkNvcmU6Oklu
dFJlY3QsIFdlYkNvcmU6OkludFNpemUgYml0bWFwU2l6ZSwgU25hcHNob3RPcHRpb25zLCBXVEY6
OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgQ2FsbGJhY2tC
YXNlOjpFcnJvcik+JiYpOwogCkBAIC0xMzIyLDkgKzEzMjAsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBpbnN0YWxsQWN0aXZpdHlTdGF0ZUNoYW5nZUNvbXBsZXRpb25IYW5kbGVyKEZ1bmN0aW9uPHZv
aWQoKT4mJik7CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIHZvaWQgY2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25TZXQ8V2ViQ29yZTo6
VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgaW50MzJfdCBpbnNlcnRpb25Qb2ludCwg
VmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpOworICAgIHZvaWQg
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25TZXQ8V2ViQ29y
ZTo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgaW50MzJfdCBpbnNlcnRpb25Qb2lu
dCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVz
dWx0PiYmKT4mJik7CiAjZW5kaWYKLSAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0
cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBpbnQzMl90IGluc2VydGlvblBvaW50
LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlcyk7CisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChj
b25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50MzJfdCBpbnNlcnRp
b25Qb2ludCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJik7CiAK
ICAgICB2b2lkIHNldFNob3VsZERpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50cyhib29sKTsKIApA
QCAtMTQzMiw3ICsxNDMwLDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxBUEk6OkF0dGFjaG1lbnQ+
IGF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikgY29uc3Q7
CiAgICAgdm9pZCBpbnNlcnRBdHRhY2htZW50KFJlZjxBUEk6OkF0dGFjaG1lbnQ+JiYsIEZ1bmN0
aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgdXBkYXRlQXR0YWNo
bWVudEF0dHJpYnV0ZXMoY29uc3QgQVBJOjpBdHRhY2htZW50JiwgRnVuY3Rpb248dm9pZChDYWxs
YmFja0Jhc2U6OkVycm9yKT4mJik7Ci0gICAgdm9pZCBzZXJpYWxpemVkQXR0YWNobWVudERhdGFG
b3JJZGVudGlmaWVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIFZlY3RvcjxXZWJDb3JlOjpTZXJp
YWxpemVkQXR0YWNobWVudERhdGE+Jik7CisgICAgdm9pZCBzZXJpYWxpemVkQXR0YWNobWVudERh
dGFGb3JJZGVudGlmaWVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPFdlYkNvcmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YT4mJik+JiYpOwog
ICAgIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIGRpZEludmFsaWRhdGVEYXRhRm9yQXR0YWNobWVudChBUEk6OkF0dGFjaG1lbnQmKTsK
IApAQCAtMTQ4Miw3ICsxNDgwLDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnRVUkxTY2hlbWVU
YXNrU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIFVSTFNjaGVtZVRhc2tQYXJhbWV0ZXJz
JiYpOwogICAgIHZvaWQgbG9hZERhdGFXaXRoTmF2aWdhdGlvblNoYXJlZChSZWY8V2ViUHJvY2Vz
c1Byb3h5PiYmLCBBUEk6Ok5hdmlnYXRpb24mLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBj
b25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBjb25zdCBTdHJp
bmcmIGJhc2VVUkwsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSwgV2ViQ29yZTo6U2hvdWxkVHJlYXRB
c0NvbnRpbnVpbmdMb2FkLCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiYmID0gV1RGOjpu
dWxsb3B0KTsKICAgICB2b2lkIGxvYWRSZXF1ZXN0V2l0aE5hdmlnYXRpb25TaGFyZWQoUmVmPFdl
YlByb2Nlc3NQcm94eT4mJiwgQVBJOjpOYXZpZ2F0aW9uJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiYsIFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3ksIEFQSTo6T2JqZWN0
KiB1c2VyRGF0YSwgV2ViQ29yZTo6U2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkLCBPcHRpb25h
bDxXZWJzaXRlUG9saWNpZXNEYXRhPiYmID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lkIGJhY2tG
b3J3YXJkR29Ub0l0ZW1TaGFyZWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgY29uc3QgV2ViQ29y
ZTo6QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYp
OworICAgIHZvaWQgYmFja0ZvcndhcmRHb1RvSXRlbVNoYXJlZChSZWY8V2ViUHJvY2Vzc1Byb3h5
PiYmLCBjb25zdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik+JiYpOwogICAgIHZvaWQg
ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblN5bmNTaGFyZWQoUmVmPFdlYlByb2Nlc3NQ
cm94eT4mJiwgdWludDY0X3QgZnJhbWVJRCwgYm9vbCBpc01haW5GcmFtZSwgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhJiYsIFdlYkNvcmU6OlBvbGljeUNoZWNrSWRlbnRpZmllciwgdWludDY0
X3QgbmF2aWdhdGlvbklELCBOYXZpZ2F0aW9uQWN0aW9uRGF0YSYmLAogICAgICAgICBGcmFtZUlu
Zm9EYXRhJiYsIHVpbnQ2NF90IG9yaWdpbmF0aW5nUGFnZUlELCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYs
IElQQzo6Rm9ybURhdGFSZWZlcmVuY2UmJiByZXF1ZXN0Qm9keSwKICAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYmIHJlZGlyZWN0UmVzcG9uc2UsIGNvbnN0IFVzZXJEYXRhJiwgTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblN5bmM6
OkRlbGF5ZWRSZXBseSYmKTsKQEAgLTE0OTQsNyArMTQ5Miw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAK
ICNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKLSAgICB2b2lkIHNwZWVjaFN5bnRoZXNpc1Zv
aWNlTGlzdChWZWN0b3I8V2ViU3BlZWNoU3ludGhlc2lzVm9pY2U+JiByZXN1bHQpOworICAgIHZv
aWQgc3BlZWNoU3ludGhlc2lzVm9pY2VMaXN0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PFdlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlPiYmKT4mJik7CiAgICAgdm9pZCBzcGVlY2hTeW50aGVz
aXNTcGVhayhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBmbG9hdCB2b2x1bWUsIGZsb2F0
IHJhdGUsIGZsb2F0IHBpdGNoLCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSwgY29uc3QgU3RyaW5n
JiB2b2ljZVVSSSwgY29uc3QgU3RyaW5nJiB2b2ljZU5hbWUsIGNvbnN0IFN0cmluZyYgdm9pY2VM
YW5nLCBib29sIGxvY2FsU2VydmljZSwgYm9vbCBkZWZhdWx0Vm9pY2UsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBzcGVlY2hTeW50aGVzaXNDYW5jZWwoKTsKICAgICB2
b2lkIHNwZWVjaFN5bnRoZXNpc1BhdXNlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBA
IC0xNTg1LDcgKzE1ODMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkRmluaXNoUHJvZ3Jlc3Mo
KTsKICAgICB2b2lkIHNldE5ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3MoYm9vbCk7CiAKLSAgICB2
b2lkIGhhc0luc2VjdXJlQ29udGVudChXZWJDb3JlOjpIYXNJbnNlY3VyZUNvbnRlbnQmKTsKKyAg
ICB2b2lkIGhhc0luc2VjdXJlQ29udGVudChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6
Okhhc0luc2VjdXJlQ29udGVudCk+JiYpOwogCiAgICAgdm9pZCBkaWREZXN0cm95TmF2aWdhdGlv
bih1aW50NjRfdCBuYXZpZ2F0aW9uSUQpOwogCkBAIC0xNjQxLDE0ICsxNjM5LDE0IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzZXRJc1Jlc2l6YWJsZShib29sIGlzUmVzaXphYmxlKTsKICAgICB2b2lk
IHNjcmVlblRvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNjcmVlblBvaW50LCBN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTY3JlZW5Ub1Jvb3RWaWV3OjpEZWxheWVkUmVwbHkmJik7
CiAgICAgdm9pZCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdS
ZWN0LCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSb290Vmlld1RvU2NyZWVuOjpEZWxheWVkUmVw
bHkmJik7Ci0gICAgdm9pZCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgc2NyZWVuUG9pbnQsIFdlYkNvcmU6OkludFBvaW50JiB3aW5kb3dQb2lu
dCk7Ci0gICAgdm9pZCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiB2aWV3UmVjdCwgV2ViQ29yZTo6SW50UmVjdCYgcmVzdWx0KTsKKyAgICB2b2lk
IGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBz
Y3JlZW5Qb2ludCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpJbnRQb2ludCk+JiYp
OworICAgIHZvaWQgcm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4oY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgdmlld1JlY3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SW50UmVj
dCk+JiYpOwogICAgIHZvaWQgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKHVpbnQ2NF90IGZy
YW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBh
bmVsOjpEZWxheWVkUmVwbHkmJik7CiAgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRp
ZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7CiAgICAgdm9pZCBwYWdlRGlk
U2Nyb2xsKCk7CiAgICAgdm9pZCBydW5PcGVuUGFuZWwodWludDY0X3QgZnJhbWVJRCwgY29uc3Qg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgV2ViQ29yZTo6RmlsZUNob29zZXJT
ZXR0aW5ncyYpOwogICAgIHZvaWQgc2hvd1NoYXJlU2hlZXQoY29uc3QgV2ViQ29yZTo6U2hhcmVE
YXRhV2l0aFBhcnNlZFVSTCYsIFNoYXJlU2hlZXRDYWxsYmFja0lEKTsKLSAgICB2b2lkIHByaW50
RnJhbWUodWludDY0X3QgZnJhbWVJRCk7CisgICAgdm9pZCBwcmludEZyYW1lKHVpbnQ2NF90IGZy
YW1lSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBleGNlZWRlZERh
dGFiYXNlUXVvdGEodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50T3JpZ2luVXNhZ2UsIHVp
bnQ2NF90IGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1aW50NjRfdCBleHBlY3RlZFVzYWdlLCBNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpFeGNlZWRlZERhdGFiYXNlUXVvdGE6OkRlbGF5ZWRSZXBseSYm
KTsKICAgICB2b2lkIHJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoY29uc3QgU3Ry
aW5nJiBvcmlnaW5JZGVudGlmaWVyLCB1aW50NjRfdCBjdXJyZW50UXVvdGEsIHVpbnQ2NF90IHRv
dGFsQnl0ZXNOZWVkZWQsIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlYWNoZWRBcHBsaWNhdGlv
bkNhY2hlT3JpZ2luUXVvdGE6OkRlbGF5ZWRSZXBseSYmKTsKICAgICB2b2lkIHJlcXVlc3RHZW9s
b2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSh1aW50NjRfdCBnZW9sb2NhdGlvbklELCB1aW50NjRf
dCBmcmFtZUlELCBTdHJpbmcgb3JpZ2luSWRlbnRpZmllcik7CkBAIC0xNzE1LDIyICsxNzEzLDIy
IEBAIHByaXZhdGU6CiAKICAgICAvLyBCYWNrL0ZvcndhcmQgbGlzdCBtYW5hZ2VtZW50CiAgICAg
dm9pZCBiYWNrRm9yd2FyZEFkZEl0ZW0oQmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlJiYpOwotICAg
IHZvaWQgYmFja0ZvcndhcmRHb1RvSXRlbShjb25zdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1J
ZGVudGlmaWVyJiwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7Ci0gICAgdm9pZCBiYWNrRm9y
d2FyZEl0ZW1BdEluZGV4KGludDMyX3QgaW5kZXgsIE9wdGlvbmFsPFdlYkNvcmU6OkJhY2tGb3J3
YXJkSXRlbUlkZW50aWZpZXI+Jik7Ci0gICAgdm9pZCBiYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQo
dWludDMyX3QmIGNvdW50KTsKLSAgICB2b2lkIGJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3VudCh1
aW50MzJfdCYgY291bnQpOworICAgIHZvaWQgYmFja0ZvcndhcmRHb1RvSXRlbShjb25zdCBXZWJD
b3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik+JiYpOworICAgIHZvaWQgYmFja0ZvcndhcmRJdGVt
QXRJbmRleChpbnQzMl90IGluZGV4LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdl
YkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXI+JiYpPiYmKTsKKyAgICB2b2lkIGJhY2tG
b3J3YXJkQmFja0xpc3RDb3VudChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQzMl90KT4mJik7
CisgICAgdm9pZCBiYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCh1aW50MzJfdCk+JiYpOwogICAgIHZvaWQgYmFja0ZvcndhcmRDbGVhcigpOwogCiAgICAg
Ly8gVW5kbyBtYW5hZ2VtZW50CiAgICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyhX
ZWJVbmRvU3RlcElEIGNvbW1hbmRJRCwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CiAgICAgdm9pZCBy
ZWdpc3Rlckluc2VydGlvblVuZG9Hcm91cGluZygpOwogICAgIHZvaWQgY2xlYXJBbGxFZGl0Q29t
bWFuZHMoKTsKLSAgICB2b2lkIGNhblVuZG9SZWRvKFVuZG9PclJlZG8sIGJvb2wmIHJlc3VsdCk7
Ci0gICAgdm9pZCBleGVjdXRlVW5kb1JlZG8oVW5kb09yUmVkbyk7CisgICAgdm9pZCBjYW5VbmRv
UmVkbyhVbmRvT3JSZWRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2
b2lkIGV4ZWN1dGVVbmRvUmVkbyhVbmRvT3JSZWRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogCiAgICAgLy8gS2V5Ym9hcmQgaGFuZGxpbmcKICNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICB2b2lkIGV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IsIGJvb2wmIGhhbmRsZWQpOworICAgIHZvaWQgZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0
b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
Jik7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTE3NTQsMTEgKzE3NTIsMTEgQEAg
cHJpdmF0ZToKIAogICAgIC8vIFNlYXJjaCBwb3B1cCByZXN1bHRzCiAgICAgdm9pZCBzYXZlUmVj
ZW50U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlJlY2VudFNl
YXJjaD4mKTsKLSAgICB2b2lkIGxvYWRSZWNlbnRTZWFyY2hlcyhjb25zdCBTdHJpbmcmLCBWZWN0
b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiYpOworICAgIHZvaWQgbG9hZFJlY2VudFNlYXJjaGVz
KGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OlJl
Y2VudFNlYXJjaD4mJik+JiYpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gU3BlZWNo
LgotICAgIHZvaWQgZ2V0SXNTcGVha2luZyhib29sJik7CisgICAgdm9pZCBnZXRJc1NwZWFraW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgc3BlYWsoY29uc3Qg
U3RyaW5nJik7CiAgICAgdm9pZCBzdG9wU3BlYWtpbmcoKTsKIApAQCAtMTc4MSw5ICsxNzc5LDkg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgLy8gU3BlbGxpbmcgYW5kIGdyYW1tYXIuCi0gICAg
dm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBpbnQzMl90JiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgdm9p
ZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJDb3Jl
OjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYg
YmFkR3JhbW1hckxlbmd0aCk7Ci0gICAgdm9pZCBzcGVsbGluZ1VJSXNTaG93aW5nKGJvb2wmKTsK
KyAgICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoaW50MzJfdCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90IG1p
c3NwZWxsaW5nTGVuZ3RoKT4mJik7CisgICAgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25z
dCBTdHJpbmcmIHRleHQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6Okdy
YW1tYXJEZXRhaWw+JiYsIGludDMyX3QgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90IGJhZEdy
YW1tYXJMZW5ndGgpPiYmKTsKKyAgICB2b2lkIHNwZWxsaW5nVUlJc1Nob3dpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOwogICAgIHZvaWQgdXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBo
cmFzZSwgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpOwogICAgIHZvaWQgbGVhcm5Xb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCk7CkBAIC0xODI0LDcgKzE4MjIsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgYXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2soY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZs
b2F0UmVjdD4mLCBjb25zdCBTdHJpbmcmIGZvbnROYW1lLCBmbG9hdCBmb250U2l6ZSwgdWludDY0
X3QgZm9udFRyYWl0cywgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBhdXRvY29ycmVjdGlvbkNvbnRl
eHRDYWxsYmFjayhjb25zdCBXZWJBdXRvY29ycmVjdGlvbkNvbnRleHQmLCBDYWxsYmFja0lEKTsK
ICAgICB2b2lkIHNlbGVjdGlvbkNvbnRleHRDYWxsYmFjayhjb25zdCBTdHJpbmcmIHNlbGVjdGVk
VGV4dCwgY29uc3QgU3RyaW5nJiBiZWZvcmVUZXh0LCBjb25zdCBTdHJpbmcmIGFmdGVyVGV4dCwg
Q2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBFZGl0b3JTdGF0
ZSYsIGJvb2wgaXNDaGFyRXZlbnQsIGJvb2wmIGhhbmRsZWQpOworICAgIHZvaWQgaW50ZXJwcmV0
S2V5RXZlbnQoY29uc3QgRWRpdG9yU3RhdGUmLCBib29sIGlzQ2hhckV2ZW50LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tl
cihib29sIGhhc1ZpZGVvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBlbGVtZW50UmVjdCwgV2Vi
Q29yZTo6Um91dGVTaGFyaW5nUG9saWN5LCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNlbGVj
dGlvblJlY3RzQ2FsbGJhY2soY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+Jiwg
Q2FsbGJhY2tJRCk7CiAKQEAgLTE4NTUsMTYgKzE4NTMsMTYgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgc3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5n
KGJvb2wmKTsKKyAgICB2b2lkIHN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoaW50
MzJfdCBwYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBs
YWNlbWVudFN0cmluZ3MpOwogICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChpbnQzMl90
IHJlYXNvbik7Ci0gICAgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihpbnQzMl90IHJl
YXNvbiwgU3RyaW5nJiByZXN1bHQpOworICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNv
b24oaW50MzJfdCByZWFzb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJik7CiAg
ICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKGludDMyX3QgcmVzcG9uc2VUeXBl
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nKTsKIAogI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQogICAgIHZvaWQgc2hv
d0RpY3RhdGlvbkFsdGVybmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGlu
Z0JveE9mRGljdGF0ZWRUZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsKICAgICB2b2lk
IHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsK
LSAgICB2b2lkIGRpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0
LCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KTsKKyAgICB2b2lkIGRpY3RhdGlvbkFsdGVybmF0aXZl
cyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxTdHJpbmc+JiYpPiYmKTsKICNlbmRpZgogCiAgICAgdm9pZCBzZXRFZGl0YWJsZUVsZW1lbnRJ
c0ZvY3VzZWQoYm9vbCk7CkBAIC0xOTA4LDcgKzE5MDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
c2V0UmVuZGVyVHJlZVNpemUodWludDY0X3QgdHJlZVNpemUpIHsgbV9yZW5kZXJUcmVlU2l6ZSA9
IHRyZWVTaXplOyB9CiAKICNpZiBQTEFURk9STShYMTEpCi0gICAgdm9pZCBjcmVhdGVQbHVnaW5D
b250YWluZXIodWludDY0X3QmIHdpbmRvd0lEKTsKKyAgICB2b2lkIGNyZWF0ZVBsdWdpbkNvbnRh
aW5lcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4mJik7CiAgICAgdm9pZCB3aW5k
b3dlZFBsdWdpbkdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZyYW1l
UmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIHVpbnQ2NF90IHdpbmRvd0lE
KTsKICAgICB2b2lkIHdpbmRvd2VkUGx1Z2luVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlz
aWJsZSwgdWludDY0X3Qgd2luZG93SUQpOwogI2VuZGlmCkBAIC0xOTczLDcgKzE5NzEsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZGlkUmVzaWduSW5wdXRFbGVtZW50U3Ryb25nUGFzc3dvcmRBcHBl
YXJhbmNlKGNvbnN0IFVzZXJEYXRhJik7CiAKICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1l
c3NhZ2VCb2R5KTsKLSAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2Fn
ZUJvZHksIFVzZXJEYXRhJiByZXR1cm5Vc2VyRGF0YSk7CisgICAgdm9pZCBoYW5kbGVTeW5jaHJv
bm91c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwg
Y29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJE
YXRhJiYpPiYmKTsKIAogICAgIHZvaWQgdmlld0lzQmVjb21pbmdWaXNpYmxlKCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4J
KHJldmlzaW9uIDI0MzE4MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNjEsOCArNjEsOCBAQCBtZXNzYWdlcyAt
PiBXZWJQYWdlUHJveHkgewogICAgIEdldFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNvcmU6OkZsb2F0
UmVjdCB3aW5kb3dGcmFtZSkgRGVsYXllZAogICAgIFNjcmVlblRvUm9vdFZpZXcoV2ViQ29yZTo6
SW50UG9pbnQgc2NyZWVuUG9pbnQpIC0+IChXZWJDb3JlOjpJbnRQb2ludCB3aW5kb3dQb2ludCkg
RGVsYXllZAogICAgIFJvb3RWaWV3VG9TY3JlZW4oV2ViQ29yZTo6SW50UmVjdCByZWN0KSAtPiAo
V2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFtZSkgRGVsYXllZAotICAgIEFjY2Vzc2liaWxpdHlT
Y3JlZW5Ub1Jvb3RWaWV3KFdlYkNvcmU6OkludFBvaW50IHNjcmVlblBvaW50KSAtPiAoV2ViQ29y
ZTo6SW50UG9pbnQgd2luZG93UG9pbnQpIExlZ2FjeVN5bmMKLSAgICBSb290Vmlld1RvQWNjZXNz
aWJpbGl0eVNjcmVlbihXZWJDb3JlOjpJbnRSZWN0IHJlY3QpIC0+IChXZWJDb3JlOjpJbnRSZWN0
IHNjcmVlbkZyYW1lKSBMZWdhY3lTeW5jCisgICAgQWNjZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZp
ZXcoV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuUG9pbnQpIC0+IChXZWJDb3JlOjpJbnRQb2ludCB3
aW5kb3dQb2ludCkgRGVsYXllZAorICAgIFJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKFdl
YkNvcmU6OkludFJlY3QgcmVjdCkgLT4gKFdlYkNvcmU6OkludFJlY3Qgc2NyZWVuRnJhbWUpIERl
bGF5ZWQKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFNob3dWYWxpZGF0aW9uTWVzc2FnZShX
ZWJDb3JlOjpJbnRSZWN0IGFuY2hvclJlY3QsIFN0cmluZyBtZXNzYWdlKQpAQCAtNzMsNyArNzMs
NyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIFBhZ2VEaWRTY3JvbGwoKQogICAg
IFJ1bk9wZW5QYW5lbCh1aW50NjRfdCBmcmFtZUlELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhIGZyYW1lU2VjdXJpdHlPcmlnaW4sIHN0cnVjdCBXZWJDb3JlOjpGaWxlQ2hvb3Nl
clNldHRpbmdzIHBhcmFtZXRlcnMpCiAgICAgU2hvd1NoYXJlU2hlZXQoc3RydWN0IFdlYkNvcmU6
OlNoYXJlRGF0YVdpdGhQYXJzZWRVUkwgc2hhcmVEYXRhLCB1aW50NjRfdCBjYWxsYmFja0lEKQot
ICAgIFByaW50RnJhbWUodWludDY0X3QgZnJhbWVJRCkgLT4gKCkgTGVnYWN5U3luYworICAgIFBy
aW50RnJhbWUodWludDY0X3QgZnJhbWVJRCkgLT4gKCkgRGVsYXllZAogICAgIFJ1bk1vZGFsKCkK
ICAgICBOb3RpZnlTY3JvbGxlclRodW1iSXNWaXNpYmxlSW5SZWN0KFdlYkNvcmU6OkludFJlY3Qg
c2Nyb2xsZXJUaHVtYikKICAgICBSZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKGlu
dDMyX3QgbmV3U3R5bGUpCkBAIC0xNDMsNyArMTQzLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVBy
b3h5IHsKICAgICBEaWRDaGFuZ2VNYWluRG9jdW1lbnQodWludDY0X3QgZnJhbWVJRCk7CiAgICAg
RGlkRGVzdHJveU5hdmlnYXRpb24odWludDY0X3QgbmF2aWdhdGlvbklEKQogCi0gICAgSGFzSW5z
ZWN1cmVDb250ZW50KCkgLT4gKGVudW06Ym9vbCBXZWJDb3JlOjpIYXNJbnNlY3VyZUNvbnRlbnQg
aGFzSW5zZWN1cmVDb250ZW50KSBMZWdhY3lTeW5jCisgICAgSGFzSW5zZWN1cmVDb250ZW50KCkg
LT4gKGVudW06Ym9vbCBXZWJDb3JlOjpIYXNJbnNlY3VyZUNvbnRlbnQgaGFzSW5zZWN1cmVDb250
ZW50KSBEZWxheWVkCiAKICAgICBNYWluRnJhbWVQbHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVy
ZURpZENoYW5nZShib29sIG1haW5GcmFtZVBsdWdpbkhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlKQog
CkBAIC0xODcsNyArMTg3LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBBdXRv
Y29ycmVjdGlvbkRhdGFDYWxsYmFjayhWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiB0ZXh0UmVj
dHMsIFN0cmluZyBmb250TmFtZSwgZG91YmxlIGZvbnRTaXplLCB1aW50NjRfdCB0cmFpdHMsIFdl
YktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIEF1dG9jb3JyZWN0aW9uQ29udGV4dENh
bGxiYWNrKHN0cnVjdCBXZWJLaXQ6OldlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCBjb250ZXh0LCBX
ZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBTZWxlY3Rpb25Db250ZXh0Q2FsbGJh
Y2soU3RyaW5nIHNlbGVjdGVkVGV4dCwgU3RyaW5nIGJlZm9yZVRleHQsIFN0cmluZyBhZnRlclRl
eHQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQotICAgIEludGVycHJldEtleUV2ZW50
KHN0cnVjdCBXZWJLaXQ6OkVkaXRvclN0YXRlIHN0YXRlLCBib29sIGlzQ2hhckV2ZW50KSAtPiAo
Ym9vbCBoYW5kbGVkKSBMZWdhY3lTeW5jCisgICAgSW50ZXJwcmV0S2V5RXZlbnQoc3RydWN0IFdl
YktpdDo6RWRpdG9yU3RhdGUgc3RhdGUsIGJvb2wgaXNDaGFyRXZlbnQpIC0+IChib29sIGhhbmRs
ZWQpIERlbGF5ZWQKICAgICBEaWRSZWNlaXZlUG9zaXRpb25JbmZvcm1hdGlvbihzdHJ1Y3QgV2Vi
S2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiBpbmZvcm1hdGlvbikKICAgICBT
YXZlSW1hZ2VUb0xpYnJhcnkoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGUsIHVp
bnQ2NF90IHNpemUpCiAgICAgU2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGJvb2wgaGFzVmlkZW8s
IFdlYkNvcmU6OkludFJlY3QgZWxlbWVudFJlY3QsIGVudW06dWludDhfdCBXZWJDb3JlOjpSb3V0
ZVNoYXJpbmdQb2xpY3kgcG9saWN5LCBTdHJpbmcgcm91dGluZ0NvbnRleHRVSUQpCkBAIC0yMjMs
MTAgKzIyMywxMCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgIyBCYWNrRm9y
d2FyZCBtZXNzYWdlcwogICAgIEJhY2tGb3J3YXJkQWRkSXRlbShzdHJ1Y3QgV2ViS2l0OjpCYWNr
Rm9yd2FyZExpc3RJdGVtU3RhdGUgaXRlbVN0YXRlKQotICAgIEJhY2tGb3J3YXJkR29Ub0l0ZW0o
c3RydWN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXIgaXRlbUlEKSAtPiAoV2Vi
S2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkgTGVn
YWN5U3luYwotICAgIEJhY2tGb3J3YXJkSXRlbUF0SW5kZXgoaW50MzJfdCBpdGVtSW5kZXgpIC0+
IChPcHRpb25hbDxXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyPiBpdGVtSUQpIExl
Z2FjeVN5bmMKLSAgICBCYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQoKSAtPiAodWludDMyX3QgY291
bnQpIExlZ2FjeVN5bmMKLSAgICBCYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQoKSAtPiAodWlu
dDMyX3QgY291bnQpIExlZ2FjeVN5bmMKKyAgICBCYWNrRm9yd2FyZEdvVG9JdGVtKHN0cnVjdCBX
ZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyIGl0ZW1JRCkgLT4gKFdlYktpdDo6U2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpIERlbGF5ZWQKKyAg
ICBCYWNrRm9yd2FyZEl0ZW1BdEluZGV4KGludDMyX3QgaXRlbUluZGV4KSAtPiAoT3B0aW9uYWw8
V2ViQ29yZTo6QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllcj4gaXRlbUlEKSBEZWxheWVkCisgICAg
QmFja0ZvcndhcmRCYWNrTGlzdENvdW50KCkgLT4gKHVpbnQzMl90IGNvdW50KSBEZWxheWVkCisg
ICAgQmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50KCkgLT4gKHVpbnQzMl90IGNvdW50KSBEZWxh
eWVkCiAgICAgQmFja0ZvcndhcmRDbGVhcigpCiAgICAgV2lsbEdvVG9CYWNrRm9yd2FyZExpc3RJ
dGVtKHN0cnVjdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwgYm9v
bCBpblBhZ2VDYWNoZSkKIApAQCAtMjM0LDggKzIzNCw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQ
cm94eSB7CiAgICAgUmVnaXN0ZXJFZGl0Q29tbWFuZEZvclVuZG8odWludDY0X3QgY29tbWFuZElE
LCBTdHJpbmcgbGFiZWwpCiAgICAgQ2xlYXJBbGxFZGl0Q29tbWFuZHMoKQogICAgIFJlZ2lzdGVy
SW5zZXJ0aW9uVW5kb0dyb3VwaW5nKCkKLSAgICBDYW5VbmRvUmVkbyhlbnVtOmJvb2wgV2ViS2l0
OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pIC0+IChib29sIHJlc3VsdCkgTGVnYWN5U3luYwotICAg
IEV4ZWN1dGVVbmRvUmVkbyhlbnVtOmJvb2wgV2ViS2l0OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8p
IC0+ICgpIExlZ2FjeVN5bmMKKyAgICBDYW5VbmRvUmVkbyhlbnVtOmJvb2wgV2ViS2l0OjpVbmRv
T3JSZWRvIHVuZG9PclJlZG8pIC0+IChib29sIHJlc3VsdCkgRGVsYXllZAorICAgIEV4ZWN1dGVV
bmRvUmVkbyhlbnVtOmJvb2wgV2ViS2l0OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pIC0+ICgpIERl
bGF5ZWQKIAogICAgICMgRGlhZ25vc3RpYyBtZXNzYWdlcyBsb2dnaW5nCiAgICAgTG9nRGlhZ25v
c3RpY01lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBkZXNjcmlwdGlvbiwgZW51bTpib29s
IFdlYkNvcmU6OlNob3VsZFNhbXBsZSBzaG91bGRTYW1wbGUpCkBAIC0yOTYsMTQgKzI5NiwxNCBA
QCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgIyBTcGVsbGluZyBhbmQgZ3JhbW1h
ciBtZXNzYWdlcwogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpICAKLSAgICBDaGVja1Rl
eHRPZlBhcmFncmFwaChTdHJpbmcgdGV4dCwgT3B0aW9uU2V0PFdlYkNvcmU6OlRleHRDaGVja2lu
Z1R5cGU+IGNoZWNraW5nVHlwZXMsIGludDMyX3QgaW5zZXJ0aW9uUG9pbnQpIC0+IChWZWN0b3I8
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzKSBMZWdhY3lTeW5jCisgICAgQ2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nIHRleHQsIE9wdGlvblNldDxXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzLCBpbnQzMl90IGluc2VydGlvblBvaW50KSAtPiAoVmVj
dG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0cykgRGVsYXllZAogI2VuZGlm
Ci0gICAgQ2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZyB0ZXh0KSAtPiAoaW50MzJfdCBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90IG1pc3NwZWxsaW5nTGVuZ3RoKSBMZWdhY3lTeW5jCi0g
ICAgQ2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nIHRleHQpIC0+IChWZWN0b3I8V2ViQ29yZTo6
R3JhbW1hckRldGFpbD4gcmVzdWx0cywgaW50MzJfdCBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMy
X3QgYmFkR3JhbW1hckxlbmd0aCkgTGVnYWN5U3luYwotICAgIFNwZWxsaW5nVUlJc1Nob3dpbmco
KSAtPiAoYm9vbCBpc1Nob3dpbmcpIExlZ2FjeVN5bmMKKyAgICBDaGVja1NwZWxsaW5nT2ZTdHJp
bmcoU3RyaW5nIHRleHQpIC0+IChpbnQzMl90IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3Qg
bWlzc3BlbGxpbmdMZW5ndGgpIERlbGF5ZWQKKyAgICBDaGVja0dyYW1tYXJPZlN0cmluZyhTdHJp
bmcgdGV4dCkgLT4gKFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiByZXN1bHRzLCBpbnQz
Ml90IGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCBiYWRHcmFtbWFyTGVuZ3RoKSBEZWxheWVk
CisgICAgU3BlbGxpbmdVSUlzU2hvd2luZygpIC0+IChib29sIGlzU2hvd2luZykgRGVsYXllZAog
ICAgIFVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoU3RyaW5nIG1pc3NwZWxsZWRX
b3JkKQogICAgIFVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhTdHJpbmcgYmFkR3Jh
bW1hclBocmFzZSwgc3RydWN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwgZ3JhbW1hckRldGFpbCkK
LSAgICBHZXRHdWVzc2VzRm9yV29yZChTdHJpbmcgd29yZCwgU3RyaW5nIGNvbnRleHQsIGludDMy
X3QgaW5zZXJ0aW9uUG9pbnQpIC0+IChWZWN0b3I8U3RyaW5nPiBndWVzc2VzKSBMZWdhY3lTeW5j
CisgICAgR2V0R3Vlc3Nlc0ZvcldvcmQoU3RyaW5nIHdvcmQsIFN0cmluZyBjb250ZXh0LCBpbnQz
Ml90IGluc2VydGlvblBvaW50KSAtPiAoVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcykgRGVsYXllZAog
ICAgIExlYXJuV29yZChTdHJpbmcgd29yZCkKICAgICBJZ25vcmVXb3JkKFN0cmluZyB3b3JkKQog
ICAgIFJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCwgV2ViQ29yZTo6
VGV4dENoZWNraW5nUmVxdWVzdERhdGEgcmVxdWVzdCwgaW50MzJfdCBpbnNlcnRpb25Qb2ludCkK
QEAgLTMzNiw3ICszMzYsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIERpZFBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwKHN0cnVjdCBXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZv
IGRpY3Rpb25hcnlQb3B1cEluZm8pCiAKICAgICAjIEtleWJvYXJkIGlucHV0IHN1cHBvcnQgbWVz
c2FnZXMKLSAgICBFeGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3RvcihTdHJpbmcgc2VsZWN0b3Ip
IC0+IChib29sIGhhbmRsZWQpIExlZ2FjeVN5bmMKKyAgICBFeGVjdXRlU2F2ZWRDb21tYW5kQnlT
ZWxlY3RvcihTdHJpbmcgc2VsZWN0b3IpIC0+IChib29sIGhhbmRsZWQpIERlbGF5ZWQKIAogICAg
ICMgUmVtb3RlIGFjY2Vzc2liaWxpdHkgbWVzc2FnZXMKICAgICBSZWdpc3RlcldlYlByb2Nlc3NB
Y2Nlc3NpYmlsaXR5VG9rZW4oSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCkBAIC0zNDYsNyArMzQ2
LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBTZXRQbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIHVp
bnQ2NF90IGNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkKIAogICAgICMgU3BlZWNoIG1lc3NhZ2VzCi0g
ICAgR2V0SXNTcGVha2luZygpIC0+IChib29sIGlzU3BlYWtpbmcpIExlZ2FjeVN5bmMKKyAgICBH
ZXRJc1NwZWFraW5nKCkgLT4gKGJvb2wgaXNTcGVha2luZykgRGVsYXllZAogICAgIFNwZWFrKFN0
cmluZyBzdHJpbmcpCiAgICAgU3RvcFNwZWFraW5nKCkKIApAQCAtMzY0LDcgKzM2NCw3IEBAIG1l
c3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAjZW5kaWYKIAogI2lmIFVTRShBUFBLSVQpCi0gICAg
U3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKCkgLT4gKGJvb2wgaXNTaG93aW5nKSBMZWdhY3lT
eW5jCisgICAgU3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKCkgLT4gKGJvb2wgaXNTaG93aW5n
KSBEZWxheWVkCiAjZW5kaWYKICNpZiBVU0UoQVVUT01BVElDX1RFWFRfUkVQTEFDRU1FTlQpCiAg
ICAgdG9nZ2xlU21hcnRJbnNlcnREZWxldGUoKQpAQCAtMzc3LDcgKzM3Nyw3IEBAIG1lc3NhZ2Vz
IC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgIyBBdXRvY29ycmVjdGlvbiBtZXNzYWdlcwogICAgIFNo
b3dDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCBwYW5lbFR5cGUsIFdlYkNvcmU6OkZsb2F0UmVjdCBi
b3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIFN0cmluZyByZXBsYWNlZFN0cmluZywgU3RyaW5n
IHJlcGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50
U3RyaW5ncykKICAgICBEaXNtaXNzQ29ycmVjdGlvblBhbmVsKGludDMyX3QgcmVhc29uKQotICAg
IERpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKGludDMyX3QgcmVhc29uKSAtPiAoU3RyaW5nIHJl
c3VsdCkgTGVnYWN5U3luYworICAgIERpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKGludDMyX3Qg
cmVhc29uKSAtPiAoU3RyaW5nIHJlc3VsdCkgRGVsYXllZAogICAgIFJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UoaW50MzJfdCByZXNwb25zZSwgU3RyaW5nIHJlcGxhY2VkU3RyaW5nLCBTdHJp
bmcgcmVwbGFjZW1lbnRTdHJpbmcpOwogCiAgICAgU2V0RWRpdGFibGVFbGVtZW50SXNGb2N1c2Vk
KGJvb2wgZWRpdGFibGVFbGVtZW50SXNGb2N1c2VkKQpAQCAtMzg2LDEyICszODYsMTIgQEAgbWVz
c2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykK
ICAgICBTaG93RGljdGF0aW9uQWx0ZXJuYXRpdmVVSShXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRp
bmdCb3hPZkRpY3RhdGVkVGV4dCwgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKICAgICBSZW1v
dmVEaWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkKLSAgICBE
aWN0YXRpb25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCkgLT4gKFZlY3Rv
cjxTdHJpbmc+IGFsdGVybmF0aXZlcykgTGVnYWN5U3luYworICAgIERpY3RhdGlvbkFsdGVybmF0
aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KSAtPiAoVmVjdG9yPFN0cmluZz4gYWx0ZXJu
YXRpdmVzKSBEZWxheWVkCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFgxMSkKICAgICAjIFgxMSB3
aW5kb3dlZCBwbHVnaW4gbWVzc2FnZXMKLSAgICBDcmVhdGVQbHVnaW5Db250YWluZXIoKSAtPiAo
dWludDY0X3Qgd2luZG93SUQpIExlZ2FjeVN5bmMKKyAgICBDcmVhdGVQbHVnaW5Db250YWluZXIo
KSAtPiAodWludDY0X3Qgd2luZG93SUQpIERlbGF5ZWQKICAgICBXaW5kb3dlZFBsdWdpbkdlb21l
dHJ5RGlkQ2hhbmdlKFdlYkNvcmU6OkludFJlY3QgZnJhbWVSZWN0LCBXZWJDb3JlOjpJbnRSZWN0
IGNsaXBSZWN0LCB1aW50NjRfdCB3aW5kb3dJRCkKICAgICBXaW5kb3dlZFBsdWdpblZpc2liaWxp
dHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUsIHVpbnQ2NF90IHdpbmRvd0lEKQogI2VuZGlmCkBA
IC00MjksNyArNDI5LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAogICAgICMgU2Vh
cmNoIHBvcHVwIG1lbnVzCiAgICAgU2F2ZVJlY2VudFNlYXJjaGVzKFN0cmluZyBuYW1lLCBWZWN0
b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiBzZWFyY2hJdGVtcykKLSAgICBMb2FkUmVjZW50U2Vh
cmNoZXMoU3RyaW5nIG5hbWUpIC0+IChWZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiByZXN1
bHQpIExlZ2FjeVN5bmMKKyAgICBMb2FkUmVjZW50U2VhcmNoZXMoU3RyaW5nIG5hbWUpIC0+IChW
ZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiByZXN1bHQpIERlbGF5ZWQKIAogICAgIFNhdmVQ
REZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUsIFVSTCBv
cmlnaW5hdGluZ1VSTCwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCiAKQEAgLTQzOSw3ICs0Mzks
NyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogI2VuZGlmCiAKICNpZiBFTkFCTEUoUERG
S0lUX1BMVUdJTikKLSAgICBTaG93UERGQ29udGV4dE1lbnUoc3RydWN0IFdlYktpdDo6UERGQ29u
dGV4dE1lbnUgY29udGV4dE1lbnUpIC0+IChPcHRpb25hbDxpbnQzMl90PiBzZWxlY3RlZEl0ZW0p
IExlZ2FjeVN5bmMKKyAgICBTaG93UERGQ29udGV4dE1lbnUoc3RydWN0IFdlYktpdDo6UERGQ29u
dGV4dE1lbnUgY29udGV4dE1lbnUpIC0+IChPcHRpb25hbDxpbnQzMl90PiBzZWxlY3RlZEl0ZW0p
IERlbGF5ZWQKICNlbmRpZgogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC00
NTEsOCArNDUxLDggQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBEaWRTYXZlVG9Q
YWdlQ2FjaGUoKQogCiAjaWYgRU5BQkxFKFdFQl9DUllQVE8pCi0gICAgV3JhcENyeXB0b0tleShW
ZWN0b3I8dWludDhfdD4ga2V5KSAtPiAoYm9vbCBzdWNjZWVkZWQsIFZlY3Rvcjx1aW50OF90PiB3
cmFwcGVkS2V5KSBMZWdhY3lTeW5jCi0gICAgVW53cmFwQ3J5cHRvS2V5KFZlY3Rvcjx1aW50OF90
PiB3cmFwcGVkS2V5KSAtPiAoYm9vbCBzdWNjZWVkZWQsIFZlY3Rvcjx1aW50OF90PiBrZXkpIExl
Z2FjeVN5bmMKKyAgICBXcmFwQ3J5cHRvS2V5KFZlY3Rvcjx1aW50OF90PiBrZXkpIC0+IChib29s
IHN1Y2NlZWRlZCwgVmVjdG9yPHVpbnQ4X3Q+IHdyYXBwZWRLZXkpIERlbGF5ZWQKKyAgICBVbndy
YXBDcnlwdG9LZXkoVmVjdG9yPHVpbnQ4X3Q+IHdyYXBwZWRLZXkpIC0+IChib29sIHN1Y2NlZWRl
ZCwgVmVjdG9yPHVpbnQ4X3Q+IGtleSkgRGVsYXllZAogI2VuZGlmCiAKIApAQCAtNDg1LDcgKzQ4
NSw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgRGlkUGVyZm9ybUltbWVkaWF0
ZUFjdGlvbkhpdFRlc3Qoc3RydWN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEgcmVzdWx0
LCBib29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIFdlYktpdDo6VXNlckRhdGEgdXNlckRhdGEp
CiAjZW5kaWYKICAgICBIYW5kbGVNZXNzYWdlKFN0cmluZyBtZXNzYWdlTmFtZSwgV2ViS2l0OjpV
c2VyRGF0YSBtZXNzYWdlQm9keSkgV2FudHNDb25uZWN0aW9uCi0gICAgSGFuZGxlU3luY2hyb25v
dXNNZXNzYWdlKFN0cmluZyBtZXNzYWdlTmFtZSwgV2ViS2l0OjpVc2VyRGF0YSBtZXNzYWdlQm9k
eSkgLT4gKFdlYktpdDo6VXNlckRhdGEgcmV0dXJuRGF0YSkgTGVnYWN5U3luYyBXYW50c0Nvbm5l
Y3Rpb24KKyAgICBIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoU3RyaW5nIG1lc3NhZ2VOYW1lLCBX
ZWJLaXQ6OlVzZXJEYXRhIG1lc3NhZ2VCb2R5KSAtPiAoV2ViS2l0OjpVc2VyRGF0YSByZXR1cm5E
YXRhKSBEZWxheWVkIFdhbnRzQ29ubmVjdGlvbgogCiAgICAgSGFuZGxlQXV0b0ZpbGxCdXR0b25D
bGljayhXZWJLaXQ6OlVzZXJEYXRhIHVzZXJEYXRhKQogCkBAIC01NDYsMTMgKzU0NiwxMyBAQCBt
ZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIENsb25lQXR0YWNobWVudERhdGEoU3RyaW5n
IGZyb21JZGVudGlmaWVyLCBTdHJpbmcgdG9JZGVudGlmaWVyKQogICAgIERpZEluc2VydEF0dGFj
aG1lbnRXaXRoSWRlbnRpZmllcihTdHJpbmcgaWRlbnRpZmllciwgU3RyaW5nIHNvdXJjZSwgYm9v
bCBoYXNFbmNsb3NpbmdJbWFnZSkKICAgICBEaWRSZW1vdmVBdHRhY2htZW50V2l0aElkZW50aWZp
ZXIoU3RyaW5nIGlkZW50aWZpZXIpCi0gICAgU2VyaWFsaXplZEF0dGFjaG1lbnREYXRhRm9ySWRl
bnRpZmllcnMoVmVjdG9yPFN0cmluZz4gaWRlbnRpZmllcnMpIC0+IChWZWN0b3I8V2ViQ29yZTo6
U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiBzZXJhbGl6ZWREYXRhKSBMZWdhY3lTeW5jCisgICAg
U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhRm9ySWRlbnRpZmllcnMoVmVjdG9yPFN0cmluZz4gaWRl
bnRpZmllcnMpIC0+IChWZWN0b3I8V2ViQ29yZTo6U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiBz
ZXJhbGl6ZWREYXRhKSBEZWxheWVkCiAjZW5kaWYKIAotICAgIFNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIFN0cmluZyBjaGFsbGVuZ2VTdHJp
bmcsIFVSTCB1cmwpIC0+IChTdHJpbmcgcmVzdWx0KSBMZWdhY3lTeW5jCisgICAgU2lnbmVkUHVi
bGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgU3RyaW5nIGNo
YWxsZW5nZVN0cmluZywgVVJMIHVybCkgLT4gKFN0cmluZyByZXN1bHQpIERlbGF5ZWQKIAogI2lm
IEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFNwZWVjaFN5bnRoZXNpc1ZvaWNlTGlzdCgp
IC0+IChWZWN0b3I8V2ViS2l0OjpXZWJTcGVlY2hTeW50aGVzaXNWb2ljZT4gdm9pY2VMaXN0KSBM
ZWdhY3lTeW5jCisgICAgU3BlZWNoU3ludGhlc2lzVm9pY2VMaXN0KCkgLT4gKFZlY3RvcjxXZWJL
aXQ6OldlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlPiB2b2ljZUxpc3QpIERlbGF5ZWQKICAgICBTcGVl
Y2hTeW50aGVzaXNTcGVhayhTdHJpbmcgdGV4dCwgU3RyaW5nIGxhbmcsIGZsb2F0IHZvbHVtZSwg
ZmxvYXQgcmF0ZSwgZmxvYXQgcGl0Y2gsIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lLCBTdHJpbmcg
dm9pY2VVUkksIFN0cmluZyB2b2ljZU5hbWUsIFN0cmluZyB2b2ljZUxhbmcsIGJvb2wgbG9jYWxT
ZXJ2aWNlLCBib29sIGRlZmF1bHRWb2ljZSkgLT4gKCkgQXN5bmMKICAgICBTcGVlY2hTeW50aGVz
aXNDYW5jZWwoKQogICAgIFNwZWVjaFN5bnRoZXNpc1BhdXNlKCkgLT4gKCkgQXN5bmMKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29h
Lm1tCShyZXZpc2lvbiAyNDMxODApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQYWdlUHJveHlDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjMsMTQgKzYzLDE0IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpzYXZlUmVjZW50U2VhcmNoZXMoY28KICAgICBXZWJDb3JlOjpzYXZl
UmVjZW50U2VhcmNoZXMobmFtZSwgc2VhcmNoSXRlbXMpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94
eTo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IFN0cmluZyYgbmFtZSwgVmVjdG9yPFdlYkNvcmU6
OlJlY2VudFNlYXJjaD4mIHNlYXJjaEl0ZW1zKQordm9pZCBXZWJQYWdlUHJveHk6OmxvYWRSZWNl
bnRTZWFyY2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPFdlYkNvcmU6OlJlY2VudFNlYXJjaD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgaWYgKCFuYW1lKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3Nh
Z2UgY2hlY2suCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKHsgfSk7CiAgICAgfQogCi0gICAgc2VhcmNoSXRlbXMgPSBXZWJDb3JlOjpsb2FkUmVjZW50
U2VhcmNoZXMobmFtZSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoV2ViQ29yZTo6bG9hZFJlY2Vu
dFNlYXJjaGVzKG5hbWUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmJlZ2luU2FmZUJyb3dz
aW5nQ2hlY2soY29uc3QgVVJMJiB1cmwsIGJvb2wgZm9yTWFpbkZyYW1lTmF2aWdhdGlvbiwgV2Vi
RnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5JiBsaXN0ZW5lcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCShyZXZpc2lvbiAyNDMxODAp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjUsOSArNjUsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVSZWNl
bnRTZWFyY2hlcyhjbwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViUGFnZVBy
b3h5Ojpsb2FkUmVjZW50U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFdlYkNvcmU6OlJl
Y2VudFNlYXJjaD4mKQordm9pZCBXZWJQYWdlUHJveHk6OmxvYWRSZWNlbnRTZWFyY2hlcyhjb25z
dCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpSZWNlbnRT
ZWFyY2g+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpwbGF0Zm9ybVJlbW92ZVJlY2VudFNlYXJjaGVzKFdhbGxUaW1lIG9sZGVzdFRpbWVUb1JlbW92
ZSkKQEAgLTEwMiwxNSArMTAzLDE2IEBAIHN0YXRpYyBnYm9vbGVhbiBwbHVnaW5Db250YWluZXJQ
bHVnUmVtb3YKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpjcmVh
dGVQbHVnaW5Db250YWluZXIodWludDY0X3QmIHdpbmRvd0lEKQordm9pZCBXZWJQYWdlUHJveHk6
OmNyZWF0ZVBsdWdpbkNvbnRhaW5lcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChXZWJDb3JlOjpQbGF0
Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKS50eXBlKCkgPT0gV2ViQ29yZTo6UGxhdGZvcm1E
aXNwbGF5OjpUeXBlOjpYMTEpOwogICAgIEd0a1dpZGdldCogc29ja2V0ID0gZ3RrX3NvY2tldF9u
ZXcoKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHNvY2tldCwgInBsdWctcmVtb3ZlZCIsIEdfQ0FM
TEJBQ0socGx1Z2luQ29udGFpbmVyUGx1Z1JlbW92ZWQpLCAwKTsKICAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKHZpZXdXaWRnZXQoKSksIHNvY2tldCk7CiAKLSAgICB3aW5kb3dJ
RCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihndGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VUKHNv
Y2tldCkpKTsKKyAgICB1aW50NjRfdCB3aW5kb3dJRCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihn
dGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VUKHNvY2tldCkpKTsKICAgICBwbHVnaW5XaW5kb3dN
YXAoKS5zZXQod2luZG93SUQsIHNvY2tldCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIod2luZG93
SUQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6d2luZG93ZWRQbHVnaW5HZW9tZXRyeURpZENo
YW5nZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmcmFtZVJlY3QsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGNsaXBSZWN0LCB1aW50NjRfdCB3aW5kb3dJRCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkocmV2aXNpb24gMjQzMTgwKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsOSArNzgsMTAgQEAgU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRV
c2VyQWdlbnQoYwogICAgIHJldHVybiBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5h
bWUoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6
OmdldElzU3BlYWtpbmcoYm9vbCYpCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0SXNTcGVha2luZyhD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6c3BlYWsoY29uc3QgU3RyaW5nJikKQEAgLTc0MSwxMCArNzQyLDEw
IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojptb3ZlU2VsZWN0aW9uQnlPZmZzZXQKICAgICBtX3Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Ok1vdmVTZWxlY3Rpb25CeU9mZnNldChvZmZzZXQs
IGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjppbnRlcnBy
ZXRLZXlFdmVudChjb25zdCBFZGl0b3JTdGF0ZSYgc3RhdGUsIGJvb2wgaXNDaGFyRXZlbnQsIGJv
b2wmIGhhbmRsZWQpCit2b2lkIFdlYlBhZ2VQcm94eTo6aW50ZXJwcmV0S2V5RXZlbnQoY29uc3Qg
RWRpdG9yU3RhdGUmIHN0YXRlLCBib29sIGlzQ2hhckV2ZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fZWRpdG9yU3RhdGUgPSBz
dGF0ZTsKLSAgICBoYW5kbGVkID0gcGFnZUNsaWVudCgpLmludGVycHJldEtleUV2ZW50KG1fa2V5
RXZlbnRRdWV1ZS5maXJzdCgpLCBpc0NoYXJFdmVudCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIo
cGFnZUNsaWVudCgpLmludGVycHJldEtleUV2ZW50KG1fa2V5RXZlbnRRdWV1ZS5maXJzdCgpLCBp
c0NoYXJFdmVudCkpOwogfQogCiAvLyBDb21wbGV4IHRleHQgaW5wdXQgc3VwcG9ydCBmb3IgcGx1
Zy1pbnMuCkBAIC03OTEsOSArNzkyLDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQbHVnaW5D
b21wbGV4VGV4dEkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94
eTo6ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgYm9vbCYpCit2
b2lkIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3Ry
aW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsK
IH0KIAogYm9vbCBXZWJQYWdlUHJveHk6OnNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVu
dChjb25zdCBXZWJLaXQ6OldlYk1vdXNlRXZlbnQmKQpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiAyNDMxODApCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzEsMTAgKzEzMSwxMCBAQCBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVz
ZXJBZ2VudChjCiAgICAgcmV0dXJuIHN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFt
ZShhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6
Z2V0SXNTcGVha2luZyhib29sJiBpc1NwZWFraW5nKQordm9pZCBXZWJQYWdlUHJveHk6OmdldElz
U3BlYWtpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpD
YW5Db21tdW5pY2F0ZVdpdGhXaW5kb3dTZXJ2ZXIpKTsKLSAgICBpc1NwZWFraW5nID0gW05TQXBw
IGlzU3BlYWtpbmddOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFtOU0FwcCBpc1NwZWFraW5nXSk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzcGVhayhjb25zdCBTdHJpbmcmIHN0cmluZykKQEAg
LTQwNCwxMSArNDA0LDExIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQbHVnaW5Db21wbGV4VGV4
dEkKICAgICBwYWdlQ2xpZW50KCkuc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKHBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBzdGF0aWNfY2FzdDxQbHVnaW5Db21wbGV4VGV4
dElucHV0U3RhdGU+KHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkpOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgYm9vbCYgaGFuZGxlZCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpleGVjdXRlU2F2ZWRD
b21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIE1FU1NBR0VfQ0hFQ0so
aXNWYWxpZEtleXByZXNzQ29tbWFuZE5hbWUoc2VsZWN0b3IpKTsKIAotICAgIGhhbmRsZWQgPSBw
YWdlQ2xpZW50KCkuZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3Ioc2VsZWN0b3IpOworICAg
IGNvbXBsZXRpb25IYW5kbGVyKHBhZ2VDbGllbnQoKS5leGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxl
Y3RvcihzZWxlY3RvcikpOwogfQogCiBib29sIFdlYlBhZ2VQcm94eTo6c2hvdWxkRGVsYXlXaW5k
b3dPcmRlcmluZ0ZvckV2ZW50KGNvbnN0IFdlYktpdDo6V2ViTW91c2VFdmVudCYgZXZlbnQpCkBA
IC01NDgsMTAgKzU0OCwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6b3BlblBERkZyb21UZW1wb3Jh
cnlGCiB9CiAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKLXZvaWQgV2ViUGFnZVByb3h5Ojpz
aG93UERGQ29udGV4dE1lbnUoY29uc3QgV2ViS2l0OjpQREZDb250ZXh0TWVudSYgY29udGV4dE1l
bnUsIE9wdGlvbmFsPGludDMyX3Q+JiBzZWxlY3RlZEluZGV4KQordm9pZCBXZWJQYWdlUHJveHk6
OnNob3dQREZDb250ZXh0TWVudShjb25zdCBXZWJLaXQ6OlBERkNvbnRleHRNZW51JiBjb250ZXh0
TWVudSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxpbnQzMl90PiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWNvbnRleHRNZW51Lm1faXRlbXMuc2l6ZSgpKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om51
bGxvcHQpOwogICAgIAogICAgIFJldGFpblB0cjxXS1BERk1lbnVUYXJnZXQ+IG1lbnVUYXJnZXQg
PSBhZG9wdE5TKFtbV0tQREZNZW51VGFyZ2V0IGFsbG9jXSBpbml0XSk7CiAgICAgUmV0YWluUHRy
PE5TTWVudT4gbnNNZW51ID0gYWRvcHROUyhbW05TTWVudSBhbGxvY10gaW5pdF0pOwpAQCAtNTg0
LDcgKzU4NCw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzaG93UERGQ29udGV4dE1lbnUoY28KICAg
ICBbTlNNZW51IHBvcFVwQ29udGV4dE1lbnU6bnNNZW51LmdldCgpIHdpdGhFdmVudDpldmVudCBm
b3JWaWV3OnZpZXddOwogCiAgICAgaWYgKGF1dG8gc2VsZWN0ZWRNZW51SXRlbSA9IFttZW51VGFy
Z2V0IHNlbGVjdGVkTWVudUl0ZW1dKQotICAgICAgICBzZWxlY3RlZEluZGV4ID0gW3NlbGVjdGVk
TWVudUl0ZW0gdGFnXTsKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFtzZWxlY3Rl
ZE1lbnVJdGVtIHRhZ10pOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVsbG9wdCk7CiB9
CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94
eVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBh
Z2VQcm94eVdpbi5jcHAJKHJldmlzaW9uIDI0MzE4MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMiArNTAs
MTQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNhdmVSZWNlbnRTZWFyY2hlcyhjbwogICAgIHJldHVy
biBXZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnVEQjo6c2luZ2xldG9uKCkuc2F2ZVJlY2VudFNlYXJj
aGVzKG5hbWUsIHNlYXJjaEl0ZW1zKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmxvYWRSZWNl
bnRTZWFyY2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIFZlY3RvcjxXZWJDb3JlOjpSZWNlbnRTZWFy
Y2g+JiBzZWFyY2hJdGVtcykKK3ZvaWQgV2ViUGFnZVByb3h5Ojpsb2FkUmVjZW50U2VhcmNoZXMo
Y29uc3QgU3RyaW5nJiBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3Jl
OjpSZWNlbnRTZWFyY2g+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghbmFt
ZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9
KTsKIAotICAgIHJldHVybiBXZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnVEQjo6c2luZ2xldG9uKCku
bG9hZFJlY2VudFNlYXJjaGVzKG5hbWUsIHNlYXJjaEl0ZW1zKTsKKyAgICBWZWN0b3I8V2ViQ29y
ZTo6UmVjZW50U2VhcmNoPiBzZWFyY2hJdGVtczsKKyAgICBXZWJDb3JlOjpTZWFyY2hQb3B1cE1l
bnVEQjo6c2luZ2xldG9uKCkubG9hZFJlY2VudFNlYXJjaGVzKG5hbWUsIHNlYXJjaEl0ZW1zKTsK
KyAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHNlYXJjaEl0ZW1zKSk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjplZGl0b3JTdGF0ZUNoYW5nZWQoY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRv
clN0YXRlKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd3BlL1dlYlBhZ2VQcm94eVdQ
RS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd3BlL1dlYlBhZ2VQ
cm94eVdQRS5jcHAJKHJldmlzaW9uIDI0MzE4MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3dwZS9XZWJQYWdlUHJveHlXUEUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw5ICs1MywxMCBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVJlY2VudFNlYXJjaGVzKGNvCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmxvYWRSZWNlbnRTZWFyY2hlcyhjb25z
dCBTdHJpbmcmLCBWZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiYpCit2b2lkIFdlYlBhZ2VQ
cm94eTo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPFdlYkNvcmU6OlJlY2VudFNlYXJjaD4mJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtUmVtb3ZlUmVjZW50U2VhcmNo
ZXMoV2FsbFRpbWUpCg==
</data>
<flag name="review"
          id="381945"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>