<?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>183859</bug_id>
          
          <creation_ts>2018-03-21 10:33:49 -0700</creation_ts>
          <short_desc>Clean up platform VideoFullscreenLayerManager</short_desc>
          <delta_ts>2018-03-21 14:14:05 -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>Media</component>
          <version>Other</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="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jer.noble</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1408080</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-03-21 10:33:49 -0700</bug_when>
    <thetext>Every macOS/iOS MediaPlayerPrivate contains identical code for handling fullscreen. Make VideoFullscreenLayerManager an abstract class, add an ObjC version, and put the shared code there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408099</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-21 11:19:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/38715419&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408151</commentid>
    <comment_count>2</comment_count>
      <attachid>336230</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-03-21 13:49:15 -0700</bug_when>
    <thetext>Created attachment 336230
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408161</commentid>
    <comment_count>3</comment_count>
      <attachid>336230</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-03-21 14:14:03 -0700</bug_when>
    <thetext>Comment on attachment 336230
Patch

Clearing flags on attachment: 336230

Committed r229824: &lt;https://trac.webkit.org/changeset/229824&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408162</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-03-21 14:14:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336230</attachid>
            <date>2018-03-21 13:49:15 -0700</date>
            <delta_ts>2018-03-21 14:14:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183859-20180321134915.patch</filename>
            <type>text/plain</type>
            <size>60480</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5ODA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTIxMWFiMTk0ODBmZjUz
NGVjNzY2ZGJkZGIyMmViNGMwODA0MTRkYy4uYzg1MDY1MGZkMTcyMzMwNjIwZWM1NDFhZWQ2NTY5
YTUyOGRkYWM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDE4LTAzLTIxICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIHBs
YXRmb3JtIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzODU5CisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS8zODcxNTQxOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLgorCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1ZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb0Z1bGxzY3JlZW5M
YXllck1hbmFnZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkxheWVyTWFu
YWdlcjo6flZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxheWVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveVZpZGVvTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZv
cm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRWaWRlb0Z1bGxzY3JlZW5G
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjp1cGRhdGVWaWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpyZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OnN5bmNUZXh0VHJhY2tCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OmVuc3VyZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6ZGVzdHJveUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0VmlkZW9GdWxsc2NyZWVu
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpzZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnJlcXVpcmVzVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpzeW5jVGV4dFRyYWNrQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0VGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U3RyZWFtQVZGT2JqQzo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZW5z
dXJlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6ZGVzdHJveUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVN0cmVhbUFWRk9iakM6OnNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb0Z1bGxzY3JlZW5MYXllck1h
bmFnZXJPYmpDLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb0Z1bGxzY3JlZW5M
YXllck1hbmFnZXJPYmpDLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLm1t
LgorICAgICAgICAoLVtXZWJWaWRlb0NvbnRhaW5lckxheWVyIHNldEJvdW5kczpdKToKKyAgICAg
ICAgKC1bV2ViVmlkZW9Db250YWluZXJMYXllciBzZXRQb3NpdGlvbjpdKToKKyAgICAgICAgKFdl
YkNvcmU6OlZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlck9iakM6OlZpZGVvRnVsbHNjcmVlbkxh
eWVyTWFuYWdlck9iakMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2NyZWVuTGF5ZXJN
YW5hZ2VyT2JqQzo6c2V0VmlkZW9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxz
Y3JlZW5MYXllck1hbmFnZXJPYmpDOjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXJPYmpDOjpzZXRWaWRlb0Z1bGxz
Y3JlZW5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFn
ZXJPYmpDOjpkaWREZXN0cm95VmlkZW9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0Z1
bGxzY3JlZW5MYXllck1hbmFnZXJPYmpDOjpyZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlck9i
akM6OnN5bmNUZXh0VHJhY2tCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GdWxsc2Ny
ZWVuTGF5ZXJNYW5hZ2VyT2JqQzo6c2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24pOgorCiAyMDE4
LTAzLTIxICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
Q29vcmRHcmFwaGljc10gVHJhY2sgZGlydHkgcmVjdHMgdGhhdCBuZWVkIHVwZGF0ZSBpbiBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0OGI3MWM1MzNmODk0MWFkZmUxMWQ2ODdhZDU5YTU3
ZTE3MzFjN2JjLi5jZGM2MjM1MWVhOWRjZWE4MWNlY2JmZTU5ZjdlZDEzNGE3YmU1MDkwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMjYsNiArMTI2LDcgQEAKIAkJMDc0RTgyQkIxOEE2OUYwRTAwN0VGNTRDIC8qIFBsYXRmb3Jt
VGltZVJhbmdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDc0RTgyQjkxOEE2OUYwRTAwN0VGNTRDIC8qIFBsYXRmb3JtVGltZVJhbmdlcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3NTM4NjAyMTQ0
ODlFOTgwMEI3ODQ1MiAvKiBDYWNoZWRUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc1Mzg2MDAxNDQ4OUU5ODAwQjc4NDUyIC8qIENh
Y2hlZFRleHRUcmFjay5jcHAgKi87IH07CiAJCTA3NTM4NjAzMTQ0ODlFOTgwMEI3ODQ1MiAvKiBD
YWNoZWRUZXh0VHJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3NTM4NjAxMTQ0ODlFOTgwMEI3ODQ1MiAvKiBDYWNoZWRUZXh0VHJhY2suaCAqLzsg
fTsKKwkJMDc1QkE4NDkyMDYxOEFBNTAwRkNCNEFEIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFu
YWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc1
QkE4NDcyMDYxOEFBNTAwRkNCNEFEIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5oICov
OyB9OwogCQkwNzYzOEE5OTE4ODQ0ODcyMDBFMTVBMUIgLyogTWVkaWFTZXNzaW9uTWFuYWdlcklP
Uy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc2MzhB
OTcxODg0NDg3MjAwRTE1QTFCIC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXJJT1MuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwNzYzOEE5QTE4ODQ0ODcy
MDBFMTVBMUIgLyogTWVkaWFTZXNzaW9uTWFuYWdlcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NjM4QTk4MTg4NDQ4NzIwMEUxNUExQiAvKiBN
ZWRpYVNlc3Npb25NYW5hZ2VySU9TLm1tICovOyB9OwogCQkwNzY5NzA4NjE0NjNBRDg3MDBGNTAy
Q0YgLyogVGV4dFRyYWNrTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzY5NzA4NDE0NjNBRDg3MDBGNTAyQ0YgLyogVGV4dFRyYWNrTGlzdC5j
cHAgKi87IH07CkBAIC0xNTI1LDcgKzE1MjYsNyBAQAogCQk1MkIwRDRCRTFDNTdGRDFFMDA3N0NF
NTMgLyogUGxhdGZvcm1WaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZvcm1WaWV3LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJCMEQ0QzAx
QzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRCRjFDNTdGRDY2
MDA3N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkIwRDRDMjFDNTdGRjkxMDA3
N0NFNTMgLyogVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIwRDRDMTFDNTdGRjkxMDA3N0NFNTMgLyog
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTJENUExOEYxQzU0NTkyMzAwREUzNEEzIC8qIFZpZGVv
RnVsbHNjcmVlbkxheWVyTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyRDVBMThEMUM1NDU5MDMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3Jl
ZW5MYXllck1hbmFnZXIubW0gKi87IH07CisJCTUyRDVBMThGMUM1NDU5MjMwMERFMzRBMyAvKiBW
aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXJPYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExOEQxQzU0NTkwMzAwREUzNEEzIC8qIFZpZGVv
RnVsbHNjcmVlbkxheWVyTWFuYWdlck9iakMubW0gKi87IH07CiAJCTUyRDVBMUE3MUM1NzQ4OUQw
MERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQTQxQzU3NDg4OTAwREUzNEEzIC8qIFZpZGVv
RnVsbHNjcmVlbk1vZGVsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTJENUExQTgxQzU3NDhBMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkQ1QTFBNTFDNTc0ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MkUyQ0FGQzE5RkYwMjA3MDAxRUVCNEYgLyogTWVkaWFQcm9kdWNlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFMkNBRkIxOUZGMDIw
NzAwMUVFQjRGIC8qIE1lZGlhUHJvZHVjZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTI2Miw2ICs1MjYzLDcgQEAKIAkJMDc0RTgyQjkxOEE2
OUYwRTAwN0VGNTRDIC8qIFBsYXRmb3JtVGltZVJhbmdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVRpbWVSYW5nZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDc1Mzg2MDAxNDQ4OUU5ODAwQjc4NDUyIC8qIENhY2hlZFRleHRUcmFjay5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRUZXh0VHJhY2suY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzUzODYwMTE0NDg5RTk4MDBCNzg0NTIg
LyogQ2FjaGVkVGV4dFRyYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENh
Y2hlZFRleHRUcmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzVCQTg0NzIw
NjE4QUE1MDBGQ0I0QUQgLyogVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzYzOEE5NzE4ODQ0ODcyMDBFMTVBMUIgLyog
TWVkaWFTZXNzaW9uTWFuYWdlcklPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNZWRpYVNlc3Npb25NYW5hZ2VySU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA3NjM4QTk4MTg4NDQ4NzIwMEUxNUExQiAvKiBNZWRpYVNlc3Npb25NYW5hZ2VySU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTWVkaWFTZXNzaW9uTWFuYWdl
cklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc2OTcwODQxNDYzQUQ4NzAw
RjUwMkNGIC8qIFRleHRUcmFja0xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVGV4dFRyYWNrTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC04MDg2LDggKzgwODgsOCBAQAogCQk1MkIwRDRCRDFDNTdGRDFFMDA3N0NFNTMgLyogUGxhdGZv
cm1WaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVmlldy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIwRDRCRjFDNTdGRDY2MDA3N0NFNTMg
LyogVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTJCMEQ0QzExQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTJENUExOEQxQzU0NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVl
bkxheWVyTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTJENUExOEUx
QzU0NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJENUExOEQxQzU0NTkwMzAwREUzNEEzIC8q
IFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlck9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXJPYmpDLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkQ1QTE4RTFDNTQ1OTAzMDBERTM0QTMgLyog
VmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXJPYmpDLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUyRDVBMUE0MUM1NzQ4ODkwMERFMzRBMyAvKiBWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQ1QTFBNTFDNTc0
ODg5MDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJENUExQTYxQzU3NDg4OTAwREUz
NEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzQxMSw2ICsyMzQxMyw3IEBA
CiAJCQkJMDc2RTExQkUxRjY4M0UwRDAwMTc3Mzk1IC8qIFRyYWNrUHJpdmF0ZUJhc2UuY3BwICov
LAogCQkJCUJFOTEzRDdGMTgxRUY4RTUwMERDQjA5RSAvKiBUcmFja1ByaXZhdGVCYXNlLmggKi8s
CiAJCQkJRTRBRkNGQTQwREFGMjlBMzAwRjVGNTVDIC8qIFVuaXRCZXppZXIuaCAqLywKKwkJCQkw
NzVCQTg0NzIwNjE4QUE1MDBGQ0I0QUQgLyogVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLmgg
Ki8sCiAJCQkJQkVGMjlFRUExNzE1REQwOTAwQzRCNEM5IC8qIFZpZGVvVHJhY2tQcml2YXRlLmgg
Ki8sCiAJCQkJMTQxMURDQjAxNjRDMzlBODAwRDQ5QkMxIC8qIFdpZHRoQ2FjaGUuaCAqLywKIAkJ
CQk5MzlCMDJFQzBFQTJEQkM0MDBDNTQ1NzAgLyogV2lkdGhJdGVyYXRvci5jcHAgKi8sCkBAIC0y
NDYyOCw4ICsyNDYzMSw4IEBACiAJCQkJN0EyOUY1NzExOEM2OTUxNDAwNEQwRjgxIC8qIE91dE9m
QmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaCAqLywKIAkJCQlDREM4QjVBOTE4MDQ3RkYxMDAxNkU2
ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCAqLywKIAkJCQlDREM4QjVBODE4MDQ3
RkYxMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0gKi8sCi0JCQkJNTJE
NUExOEUxQzU0NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5oICov
LAotCQkJCTUyRDVBMThEMUM1NDU5MDMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5MYXllck1h
bmFnZXIubW0gKi8sCisJCQkJNTJENUExOEUxQzU0NTkwMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNj
cmVlbkxheWVyTWFuYWdlck9iakMuaCAqLywKKwkJCQk1MkQ1QTE4RDFDNTQ1OTAzMDBERTM0QTMg
LyogVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyT2JqQy5tbSAqLywKIAkJCQlDRDMzNkY2NTE3
RkEwQUM2MDBERERDRDAgLyogVmlkZW9UcmFja1ByaXZhdGVBVkZPYmpDLmNwcCAqLywKIAkJCQlD
RDMzNkY2NjE3RkEwQUM2MDBERERDRDAgLyogVmlkZW9UcmFja1ByaXZhdGVBVkZPYmpDLmggKi8s
CiAJCQkJQ0Q4QjVBNDExODBEMTQ5QTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmggKi8sCkBAIC0zMDM5OCw2ICszMDQwMSw3IEBACiAJCQkJNTJCMEQ0QzAx
QzU3RkQ2NjAwNzdDRTUzIC8qIFZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzRkJDNEFGNDE4OTg4MTU2MDA0NkVFMzggLyogVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQjBENEMyMUM1N0ZGOTEwMDc3
Q0U1MyAvKiBWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VNYWMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTA3NUJBODQ5MjA2MThBQTUwMEZDQjRBRCAvKiBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUyRDVBMUE3MUM1NzQ4OUQwMERFMzRBMyAvKiBWaWRlb0Z1
bGxzY3JlZW5Nb2RlbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJENUExQTgxQzU3NDhBMzAwREUz
NEEzIC8qIFZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlDREU4M0RCMjE4M0M0NDA2MDAzMUVBQTMgLyogVmlkZW9QbGF5YmFja1F1YWxpdHkuaCBp
biBIZWFkZXJzICovLApAQCAtMzE3NjksNyArMzE3NzMsNyBAQAogCQkJCTdDNzNGQjA3MTkxRUY0
MTcwMDdERTA2MSAvKiBVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTgzN0I3RDIwMURDM0Y1NTAwMEQwNTFGQyAvKiBWYWxpZGF0aW9uQnViYmxlSU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJM0ZCQzRBRjMxODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTJENUExOEYx
QzU0NTkyMzAwREUzNEEzIC8qIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTUyRDVBMThGMUM1NDU5MjMwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3JlZW5M
YXllck1hbmFnZXJPYmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkU4OEUwREUxNzE1RDJBMjAw
NjU4RDk4IC8qIFZpZGVvVHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkU4OEUwRTExNzE1
RDJBMjAwNjU4RDk4IC8qIFZpZGVvVHJhY2tMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNE
MzM2RjY3MTdGQTBBQzYwMERERENEMCAvKiBWaWRlb1RyYWNrUHJpdmF0ZUFWRk9iakMuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9WaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1ZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjMzlk
NGY0YTViOWU5M2Q2MzNlMTY5ZGY0ZGVhNGI5MDI2NzZkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9WaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFn
ZXIuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisj
aW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgSW50U2l6ZTsK
K2NsYXNzIFRleHRUcmFja1JlcHJlc2VudGF0aW9uOworCitjbGFzcyBWaWRlb0Z1bGxzY3JlZW5M
YXllck1hbmFnZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZpZGVvRnVsbHNjcmVlbkxh
eWVyTWFuYWdlcik7CitwdWJsaWM6CisgICAgVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyKCkg
PSBkZWZhdWx0OworICAgIHZpcnR1YWwgflZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlcigpIHsg
fQorCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyICp2aWRlb0lubGluZUxheWVyKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciAqdmlkZW9GdWxsc2NyZWVuTGF5ZXIoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlkZW9GdWxsc2NyZWVuRnJhbWUoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5ZXIoUGxhdGZvcm1MYXllcios
IEludFNpemUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
UGxhdGZvcm1MYXllciosIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKEZsb2F0UmVj
dCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWREZXN0cm95VmlkZW9MYXllcigpID0gMDsKKwor
ICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0VHJhY2tSZXByZXNlbnRhdGlvbihUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbiopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY1RleHRUcmFja0Jv
dW5kcygpID0gMDsKK307CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCmluZGV4IGI3MTc0Mjc4
YzgzNzMyZjgzNTlkYmVlZDgyYzM5ODJjODZmNjBiMGIuLmI4YTE4YTc3MGYxOTNkNzVkNDE3MWRl
YWQzZDdmMGJhYzE4YjY1MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKQEAgLTcyLDEyICs3Miw5
IEBAIGNsYXNzIFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1Y7CiBjbGFzcyBWaWRlb1RyYWNrUHJpdmF0
ZUFWRk9iakM7CiBjbGFzcyBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBUZXh0dXJl
Q2FjaGVDVjsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlck9iakM7CiBjbGFzcyBW
aWRlb1RleHR1cmVDb3BpZXJDVjsKIAotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLWNsYXNzIFZpZGVvRnVsbHNj
cmVlbkxheWVyTWFuYWdlcjsKLSNlbmRpZgotCiBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbiB7CiBw
dWJsaWM6CiAgICAgZXhwbGljaXQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyhN
ZWRpYVBsYXllciopOwpAQCAtMTg4LDEyICsxODUsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBh
aW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZv
aWQgcGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0IG92ZXJyaWRlOwotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKICAgICB2b2lkIHNldFZpZGVvRnVsbHNjcmVl
bkxheWVyKFBsYXRmb3JtTGF5ZXIqLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShGbG9h
dFJlY3QpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuR3Jhdml0eShNZWRp
YVBsYXllcjo6VmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKICAgICB2b2lkIHNldFZpZGVvRnVsbHNj
cmVlbk1vZGUoTWVkaWFQbGF5ZXI6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwotI2Vu
ZGlmCiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgTlNBcnJheSAqdGltZWRNZXRhZGF0YSgpIGNv
bnN0IG92ZXJyaWRlOwpAQCAtMzQzLDExICszMzgsOCBAQCBwcml2YXRlOgogICAgIFJldGFpblB0
cjxBVlBsYXllcj4gbV9hdlBsYXllcjsKICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJJdGVtPiBtX2F2
UGxheWVySXRlbTsKICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJMYXllcj4gbV92aWRlb0xheWVyOwot
I2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmlkZW9GdWxsc2NyZWVuTGF5ZXJN
YW5hZ2VyPiBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlcjsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8VmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyT2JqQz4gbV92aWRlb0Z1bGxzY3JlZW5MYXll
ck1hbmFnZXI7CiAgICAgTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eSBtX3ZpZGVvRnVsbHNjcmVl
bkdyYXZpdHk7Ci0gICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fdGV4dFRyYWNrUmVwcmVz
ZW50YXRpb25MYXllcjsKLSNlbmRpZgogICAgIFJldGFpblB0cjxXZWJDb3JlQVZGTW92aWVPYnNl
cnZlcj4gbV9vYmpjT2JzZXJ2ZXI7CiAgICAgUmV0YWluUHRyPGlkPiBtX3RpbWVPYnNlcnZlcjsK
ICAgICBtdXRhYmxlIFN0cmluZyBtX2xhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjazsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDLm1tCmluZGV4IGIyYmE3NDZhZWM4ZDdkYTg0Mzg1N2FlZjVkNTRkM2M1MGYy
ZmFiNjQuLjM0ZjNlMjZmOWY4ZTFmYTg1MDJhMWMyNDYxMDIyOTFjOWUxMjYzMjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5tbQpAQCAtNjAsNiArNjAsNyBAQAogI2ltcG9ydCAiVGV4dFRyYWNrUmVw
cmVzZW50YXRpb24uaCIKICNpbXBvcnQgIlRleHR1cmVDYWNoZUNWLmgiCiAjaW1wb3J0ICJVUkwu
aCIKKyNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlck9iakMuaCIKICNpbXBvcnQg
IlZpZGVvVGV4dHVyZUNvcGllckNWLmgiCiAjaW1wb3J0ICJWaWRlb1RyYWNrUHJpdmF0ZUFWRk9i
akMuaCIKICNpbXBvcnQgIldlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5oIgpAQCAtOTgsMTAgKzk5
LDYgQEAKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlBsYXllckxheWVyLmg+CiAjaW1wb3J0IDxB
VkZvdW5kYXRpb24vQVZUaW1lLmg+CiAKLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0jaW1wb3J0ICJWaWRlb0Z1
bGxzY3JlZW5MYXllck1hbmFnZXIuaCIKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oSU9TKQogI2lt
cG9ydCAiV0FLQXBwS2l0U3R1YnMuaCIKICNpbXBvcnQgPENvcmVJbWFnZS9Db3JlSW1hZ2UuaD4K
QEAgLTQ4OCwxMCArNDg1LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpjbGVhck1lZGlhQ2FjaGVGb3JPcmlnaW5zKGNvbnN0IFN0cmluZyYKIAogTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQyhNZWRpYVBsYXllciogcGxheWVyKQogICAgIDogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uKHBsYXllcikKLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0gICAgLCBtX3ZpZGVvRnVsbHNjcmVlbkxh
eWVyTWFuYWdlcihzdGQ6Om1ha2VfdW5pcXVlPFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlcj4o
KSkKKyAgICAsIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyKHN0ZDo6bWFrZV91bmlxdWU8
VmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyT2JqQz4oKSkKICAgICAsIG1fdmlkZW9GdWxsc2Ny
ZWVuR3Jhdml0eShNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0KQotI2VuZGlm
CiAgICAgLCBtX29iamNPYnNlcnZlcihhZG9wdE5TKFtbV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIg
YWxsb2NdIGluaXRXaXRoQ2FsbGJhY2s6dGhpc10pKQogICAgICwgbV92aWRlb0ZyYW1lSGFzRHJh
d24oZmFsc2UpCiAgICAgLCBtX2hhdmVDaGVja2VkUGxheWFiaWxpdHkoZmFsc2UpCkBAIC03MDcs
MTYgKzcwMiwxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNy
ZWF0ZUFWUGxheWVyTGF5ZXIoKQogICAgIEludFNpemUgZGVmYXVsdFNpemUgPSBzbmFwcGVkSW50
UmVjdChwbGF5ZXIoKS0+Y2xpZW50KCkubWVkaWFQbGF5ZXJDb250ZW50Qm94UmVjdCgpKS5zaXpl
KCk7CiAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUik7CiAKLSNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCiAgICAg
bV92aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXItPnNldFZpZGVvTGF5ZXIobV92aWRlb0xheWVy
LmdldCgpLCBkZWZhdWx0U2l6ZSk7CiAKICNpZiBQTEFURk9STShJT1MpICYmICFFTkFCTEUoRVhU
UkFfWk9PTV9NT0RFKQogICAgIGlmIChbbV92aWRlb0xheWVyIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Ioc2V0UElQTW9kZUVuYWJsZWQ6KV0pCiAgICAgICAgIFttX3ZpZGVvTGF5ZXIgc2V0
UElQTW9kZUVuYWJsZWQ6KHBsYXllcigpLT5mdWxsc2NyZWVuTW9kZSgpICYgTWVkaWFQbGF5ZXI6
OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKV07CiAjZW5kaWYKLSNlbHNlCi0g
ICAgW21fdmlkZW9MYXllciBzZXRGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIGRlZmF1bHRTaXplLndp
ZHRoKCksIGRlZmF1bHRTaXplLmhlaWdodCgpKV07Ci0jZW5kaWYKIH0KIAogdm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95VmlkZW9MYXllcigpCkBAIC03Mjgs
MTAgKzcxOSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVz
dHJveVZpZGVvTGF5ZXIoKQogCiAgICAgW21fdmlkZW9MYXllciByZW1vdmVPYnNlcnZlcjptX29i
amNPYnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOkAicmVhZHlGb3JEaXNwbGF5Il07CiAgICAgW21f
dmlkZW9MYXllciBzZXRQbGF5ZXI6bmlsXTsKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKICAgICBtX3ZpZGVv
RnVsbHNjcmVlbkxheWVyTWFuYWdlci0+ZGlkRGVzdHJveVZpZGVvTGF5ZXIoKTsKLSNlbmRpZgog
CiAgICAgbV92aWRlb0xheWVyID0gbmlsOwogfQpAQCAtMTE3Miw0MCArMTE2MCwxOCBAQCBQbGF0
Zm9ybU1lZGlhIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtTWVk
aWEoKSBjb25zdAogCiBQbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSNpZiBQTEFURk9STShJT1MpIHx8IChQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0gICAgcmV0
dXJuIG1faGF2ZUJlZW5Bc2tlZFRvQ3JlYXRlTGF5ZXIgPyBtX3ZpZGVvRnVsbHNjcmVlbkxheWVy
TWFuYWdlci0+dmlkZW9JbmxpbmVMYXllcigpIDogbnVsbHB0cjsKLSNlbHNlCi0gICAgcmV0dXJu
IG1faGF2ZUJlZW5Bc2tlZFRvQ3JlYXRlTGF5ZXIgPyBtX3ZpZGVvTGF5ZXIuZ2V0KCkgOiBudWxs
cHRyOwotI2VuZGlmCisgICAgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLT52
aWRlb0lubGluZUxheWVyKCk7CiB9CiAKLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCiB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3Jt
TGF5ZXIqIHZpZGVvRnVsbHNjcmVlbkxheWVyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIt
PnZpZGVvRnVsbHNjcmVlbkxheWVyKCkgPT0gdmlkZW9GdWxsc2NyZWVuTGF5ZXIpIHsKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFtD
QVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9u
czpZRVNdOwotCiAgICAgbV92aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXItPnNldFZpZGVvRnVs
bHNjcmVlbkxheWVyKHZpZGVvRnVsbHNjcmVlbkxheWVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0KLSAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXItPnZpZGVvRnVs
bHNjcmVlbkxheWVyKCkgJiYgbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkxheWVyKSB7Ci0gICAg
ICAgIHN5bmNUZXh0VHJhY2tCb3VuZHMoKTsKLSAgICAgICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5
ZXJNYW5hZ2VyLT52aWRlb0Z1bGxzY3JlZW5MYXllcigpIGFkZFN1YmxheWVyOm1fdGV4dFRyYWNr
UmVwcmVzZW50YXRpb25MYXllci5nZXQoKV07Ci0gICAgfQotCi0gICAgW0NBVHJhbnNhY3Rpb24g
Y29tbWl0XTsKLQogICAgIHVwZGF0ZURpc2FibGVFeHRlcm5hbFBsYXliYWNrKCk7CiB9CiAKIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0VmlkZW9GdWxsc2NyZWVu
RnJhbWUoRmxvYXRSZWN0IGZyYW1lKQogewogICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5h
Z2VyLT5zZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShmcmFtZSk7Ci0gICAgc3luY1RleHRUcmFja0Jv
dW5kcygpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNl
dFZpZGVvRnVsbHNjcmVlbkdyYXZpdHkoTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eSBncmF2aXR5
KQpAQCAtMTI0Myw4ICsxMjA5LDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpzZXRWaWRlb0Z1bGxzY3JlZW5Nb2RlKE1lZGlhUGxheWVyOjpWaWQKICNlbmRpZgog
fQogCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCiAjaWYgUExBVEZPUk0oSU9TKQogTlNBcnJheSAq
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dGltZWRNZXRhZGF0YSgpIGNvbnN0
CiB7CkBAIC0xODc3LDEyICsxODQxLDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6dXBkYXRlVmlkZW9MYXllckdyYXZpdHkoKQogICAgIGlmICghbV92aWRlb0xh
eWVyKQogICAgICAgICByZXR1cm47CiAKLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShN
QUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCiAgICAgLy8gRG8gbm90IGF0
dGVtcHQgdG8gY2hhbmdlIHRoZSB2aWRlbyBncmF2aXR5IHdoaWxlIGluIGZ1bGwgc2NyZWVuIG1v
ZGUuCiAgICAgLy8gU2VlIHNldFZpZGVvRnVsbHNjcmVlbkdyYXZpdHkoKS4KICAgICBpZiAobV92
aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXItPnZpZGVvRnVsbHNjcmVlbkxheWVyKCkpCiAgICAg
ICAgIHJldHVybjsKLSNlbmRpZgogCiAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwogICAgIFtD
QVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107ICAgIApAQCAtMjE3Nyw1NyArMjEz
OSwxNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnVwZGF0ZVZp
ZGVvVHJhY2tzKCkKIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpy
ZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgY29uc3QKIHsKLSNpZiBQTEFURk9STShJ
T1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkp
Ci0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLT52aWRlb0Z1bGxzY3JlZW5M
YXllcigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXItPnJlcXVpcmVzVGV4dFRy
YWNrUmVwcmVzZW50YXRpb24oKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpzeW5jVGV4dFRyYWNrQm91bmRzKCkKIHsKLSNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0gICAg
aWYgKCFtX3ZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci0+dmlkZW9GdWxsc2NyZWVuTGF5ZXIo
KSB8fCAhbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkxheWVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJs
ZUFjdGlvbnM6WUVTXTsKLQotICAgIEZsb2F0UmVjdCB2aWRlb0Z1bGxzY3JlZW5GcmFtZSA9IG1f
dmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLT52aWRlb0Z1bGxzY3JlZW5GcmFtZSgpOwotICAg
IENHUmVjdCB0ZXh0RnJhbWUgPSBtX3ZpZGVvTGF5ZXIgPyBbbV92aWRlb0xheWVyIHZpZGVvUmVj
dF0gOiBDR1JlY3RNYWtlKDAsIDAsIHZpZGVvRnVsbHNjcmVlbkZyYW1lLndpZHRoKCksIHZpZGVv
RnVsbHNjcmVlbkZyYW1lLmhlaWdodCgpKTsKLSAgICBbbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkxheWVyIHNldEZyYW1lOnRleHRGcmFtZV07Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRd
OwotI2VuZGlmCisgICAgbV92aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXItPnN5bmNUZXh0VHJh
Y2tCb3VuZHMoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpzZXRUZXh0VHJhY2tSZXByZXNlbnRhdGlvbihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiogcmVw
cmVzZW50YXRpb24pCiB7Ci0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotICAgIFBsYXRmb3JtTGF5ZXIqIHJlcHJl
c2VudGF0aW9uTGF5ZXIgPSByZXByZXNlbnRhdGlvbiA/IHJlcHJlc2VudGF0aW9uLT5wbGF0Zm9y
bUxheWVyKCkgOiBuaWw7Ci0gICAgaWYgKHJlcHJlc2VudGF0aW9uTGF5ZXIgPT0gbV90ZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkxheWVyKSB7Ci0gICAgICAgIHN5bmNUZXh0VHJhY2tCb3VuZHMoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAg
ICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotCi0gICAgaWYgKG1fdGV4
dFRyYWNrUmVwcmVzZW50YXRpb25MYXllcikKLSAgICAgICAgW21fdGV4dFRyYWNrUmVwcmVzZW50
YXRpb25MYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0KLSAgICBtX3RleHRUcmFja1JlcHJl
c2VudGF0aW9uTGF5ZXIgPSByZXByZXNlbnRhdGlvbkxheWVyOwotCi0gICAgaWYgKG1fdmlkZW9G
dWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLT52aWRlb0Z1bGxzY3JlZW5MYXllcigpICYmIG1fdGV4dFRy
YWNrUmVwcmVzZW50YXRpb25MYXllcikgewotICAgICAgICBzeW5jVGV4dFRyYWNrQm91bmRzKCk7
Ci0gICAgICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci0+dmlkZW9GdWxsc2NyZWVu
TGF5ZXIoKSBhZGRTdWJsYXllcjptX3RleHRUcmFja1JlcHJlc2VudGF0aW9uTGF5ZXIuZ2V0KCld
OwotICAgIH0KLQotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0KLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHJlcHJlc2VudGF0aW9uKTsKLSNlbmRpZgorICAgIG1fdmlkZW9GdWxsc2NyZWVu
TGF5ZXJNYW5hZ2VyLT5zZXRUZXh0VHJhY2tSZXByZXNlbnRhdGlvbihyZXByZXNlbnRhdGlvbik7
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qy5oCmluZGV4IDJlOGQ5NTk1YTczMjE0YTIwZDlmYTUyMjcwMTIwMGU4OTgwOTI2MTAuLmNlYThi
ZjI5OTIxZGUyYzIyYjcwM2NjMjM3ZTJmMTEyMmRmZjE5MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQy5oCkBAIC01MiwxMiArNTIsMTAgQEAgY2xhc3MgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2Jq
QzsKIGNsYXNzIFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1Y7CiBjbGFzcyBQbGF0Zm9ybUNsb2NrQ007
CiBjbGFzcyBUZXh0dXJlQ2FjaGVDVjsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdl
ck9iakM7CiBjbGFzcyBWaWRlb1RleHR1cmVDb3BpZXJDVjsKIGNsYXNzIFdlYkNvcmVEZWNvbXBy
ZXNzaW9uU2Vzc2lvbjsKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKQotY2xhc3MgVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyOwotI2VuZGlm
CiAKIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyA6IHB1YmxpYyBN
ZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogcHVibGljOgpAQCAtMTA4LDE2ICsxMDYsMTIg
QEAgcHVibGljOgogICAgIEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyKiBzYW1wbGVCdWZmZXJE
aXNwbGF5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5n
ZXQoKTsgfQogICAgIFdlYkNvcmVEZWNvbXByZXNzaW9uU2Vzc2lvbiogZGVjb21wcmVzc2lvblNl
c3Npb24oKSBjb25zdCB7IHJldHVybiBtX2RlY29tcHJlc3Npb25TZXNzaW9uLmdldCgpOyB9CiAK
LSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKICAg
ICB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRW
aWRlb0Z1bGxzY3JlZW5GcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwotI2VuZGlmCiAKLSNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCiAgICAgYm9vbCByZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0
aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiopIG92ZXJyaWRlOwogICAgIHZvaWQgc3luY1RleHRU
cmFja0JvdW5kcygpIG92ZXJyaWRlOwotI2VuZGlmCiAgICAgCiAjaWYgRU5BQkxFKExFR0FDWV9F
TkNSWVBURURfTUVESUEpCiAgICAgYm9vbCBoYXNTdHJlYW1TZXNzaW9uKCkgeyByZXR1cm4gbV9z
dHJlYW1TZXNzaW9uOyB9CkBAIC0zMDgsNyArMzAyLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
aGFzQmVlbkFza2VkVG9QYWludEdMIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzQXZhaWxhYmxl
VmlkZW9GcmFtZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2FsbFJlbmRlcmVyc0hhdmVBdmFpbGFi
bGVTYW1wbGVzIHsgZmFsc2UgfTsKLSAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV90ZXh0
VHJhY2tSZXByZXNlbnRhdGlvbkxheWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlQ2Fj
aGVDVj4gbV90ZXh0dXJlQ2FjaGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFZpZGVvVGV4dHVyZUNv
cGllckNWPiBtX3ZpZGVvVGV4dHVyZUNvcGllcjsKICAgICBSZXRhaW5QdHI8Q1ZPcGVuR0xUZXh0
dXJlUmVmPiBtX2xhc3RUZXh0dXJlOwpAQCAtMzE2LDkgKzMwOSw3IEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPE1lZGlhUGxheWJhY2tUYXJnZXQ+IG1fcGxheWJhY2tUYXJnZXQ7CiAgICAgYm9vbCBt
X3Nob3VsZFBsYXlUb1RhcmdldCB7IGZhbHNlIH07CiAjZW5kaWYKLSNpZiBQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
VmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyPiBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdl
cjsKLSNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFn
ZXJPYmpDPiBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlcjsKICNpZiBFTkFCTEUoRU5DUllQ
VEVEX01FRElBKQogICAgIFJlZlB0cjxDRE1JbnN0YW5jZT4gbV9jZG1JbnN0YW5jZTsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCmluZGV4IDgxN2Y3OGJmZmQ5MzAyNTFmN2M3MjJi
NmVhMDIyMzM5OGZiZjg2OWEuLmI0YmM5NDBhMTk3OGUzOGRhMzg1MGNkOTU1MDUzN2FiNzgwZGUx
OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0KQEAgLTQxLDYgKzQxLDcgQEAKICNpbXBv
cnQgIlBpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuaCIKICNpbXBvcnQgIlRleHRUcmFja1JlcHJlc2Vu
dGF0aW9uLmgiCiAjaW1wb3J0ICJUZXh0dXJlQ2FjaGVDVi5oIgorI2ltcG9ydCAiVmlkZW9GdWxs
c2NyZWVuTGF5ZXJNYW5hZ2VyT2JqQy5oIgogI2ltcG9ydCAiVmlkZW9UZXh0dXJlQ29waWVyQ1Yu
aCIKICNpbXBvcnQgIldlYkNvcmVEZWNvbXByZXNzaW9uU2Vzc2lvbi5oIgogI2ltcG9ydCA8QVZG
b3VuZGF0aW9uL0FWQXNzZXQuaD4KQEAgLTUzLDEwICs1NCw2IEBACiAjaW1wb3J0IDx3dGYvTWFp
blRocmVhZC5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKLSNpZiBQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKLSNpbXBvcnQgIlZpZGVv
RnVsbHNjcmVlbkxheWVyTWFuYWdlci5oIgotI2VuZGlmCi0KICNwcmFnbWEgbWFyayAtIFNvZnQg
TGlua2luZwogCiAjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KQEAgLTEzNCw5
ICsxMzEsNyBAQCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyhNZWRpYQogICAgICwgbV9wbGF5aW5nKDApCiAg
ICAgLCBtX3NlZWtpbmcoZmFsc2UpCiAgICAgLCBtX2xvYWRpbmdQcm9ncmVzc2VkKGZhbHNlKQot
I2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQotICAg
ICwgbV92aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIoc3RkOjptYWtlX3VuaXF1ZTxWaWRlb0Z1
bGxzY3JlZW5MYXllck1hbmFnZXI+KCkpCi0jZW5kaWYKKyAgICAsIG1fdmlkZW9GdWxsc2NyZWVu
TGF5ZXJNYW5hZ2VyKHN0ZDo6bWFrZV91bmlxdWU8VmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2Vy
T2JqQz4oKSkKIHsKICAgICBDTVRpbWViYXNlUmVmIHRpbWViYXNlID0gW21fc3luY2hyb25pemVy
IHRpbWViYXNlXTsKICAgICBDTU5vdGlmaWNhdGlvbkNlbnRlclJlZiBuYyA9IENNTm90aWZpY2F0
aW9uQ2VudGVyR2V0RGVmYXVsdExvY2FsQ2VudGVyKCk7CkBAIC0yOTAsMTEgKzI4NSw3IEBAIFBs
YXRmb3JtTWVkaWEgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwbGF0Zm9y
bU1lZGlhKCkgY29uc3QKIAogUGxhdGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSNpZiBQTEFURk9STShNQUMp
ICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKICAgICByZXR1cm4gbV92aWRlb0Z1
bGxzY3JlZW5MYXllck1hbmFnZXItPnZpZGVvSW5saW5lTGF5ZXIoKTsKLSNlbHNlCi0gICAgcmV0
dXJuIG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmdldCgpOwotI2VuZGlmCiB9CiAKIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpwbGF5KCkKQEAgLTcxMyw5ICs3
MDQsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6ZW5zdXJl
TGF5ZXIoKQogICAgIFttX3N5bmNocm9uaXplciBhZGRSZW5kZXJlcjptX3NhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllci5nZXQoKV07CiAgICAgaWYgKG1fbWVkaWFTb3VyY2VQcml2YXRlKQogICAgICAg
ICBtX21lZGlhU291cmNlUHJpdmF0ZS0+c2V0VmlkZW9MYXllcihtX3NhbXBsZUJ1ZmZlckRpc3Bs
YXlMYXllci5nZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQogICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5
ZXJNYW5hZ2VyLT5zZXRWaWRlb0xheWVyKG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmdldCgp
LCBzbmFwcGVkSW50UmVjdChtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJDb250ZW50Qm94
UmVjdCgpKS5zaXplKCkpOwotI2VuZGlmCiAgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxh
eWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQobV9wbGF5ZXIpOwogfQogCkBAIC03MzEsOSArNzIwLDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmRlc3Ryb3lMYXll
cigpCiAKICAgICBpZiAobV9tZWRpYVNvdXJjZVByaXZhdGUpCiAgICAgICAgIG1fbWVkaWFTb3Vy
Y2VQcml2YXRlLT5zZXRWaWRlb0xheWVyKG51bGxwdHIpOwotI2lmIFBMQVRGT1JNKElPUykgfHwg
KFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKICAgICBt
X3ZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci0+ZGlkRGVzdHJveVZpZGVvTGF5ZXIoKTsKLSNl
bmRpZgogICAgIG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyID0gbnVsbHB0cjsKICAgICBzZXRI
YXNBdmFpbGFibGVWaWRlb0ZyYW1lKGZhbHNlKTsKICAgICBtX3BsYXllci0+Y2xpZW50KCkubWVk
aWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXllcik7CkBAIC0xMDc5LDkwICsxMDY2
LDMwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjaGFyYWN0
ZXJpc3RpY3NDaGFuZ2VkKCkKICAgICBtX3BsYXllci0+Y2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCk7
CiB9CiAKLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZXRWaWRlb0Z1
bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyICp2aWRlb0Z1bGxzY3JlZW5MYXllciwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1fdmlkZW9G
dWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLT52aWRlb0Z1bGxzY3JlZW5MYXllcigpID09IHZpZGVvRnVs
bHNjcmVlbkxheWVyKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNh
Y3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLQogICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5
ZXJNYW5hZ2VyLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcih2aWRlb0Z1bGxzY3JlZW5MYXllciwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGlmIChtX3ZpZGVvRnVsbHNj
cmVlbkxheWVyTWFuYWdlci0+dmlkZW9GdWxsc2NyZWVuTGF5ZXIoKSAmJiBtX3RleHRUcmFja1Jl
cHJlc2VudGF0aW9uTGF5ZXIpIHsKLSAgICAgICAgc3luY1RleHRUcmFja0JvdW5kcygpOwotICAg
ICAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXItPnZpZGVvRnVsbHNjcmVlbkxheWVy
KCkgYWRkU3VibGF5ZXI6bV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkxheWVyLmdldCgpXTsKLSAg
ICB9Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwogfQogCiB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0VmlkZW9GdWxsc2NyZWVuRnJhbWUoRmxvYXRS
ZWN0IGZyYW1lKQogewogICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLT5zZXRWaWRl
b0Z1bGxzY3JlZW5GcmFtZShmcmFtZSk7Ci0gICAgc3luY1RleHRUcmFja0JvdW5kcygpOwogfQot
I2VuZGlmCi0gICAgCisKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
OjpyZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgY29uc3QKIHsKLSNpZiBQTEFURk9S
TShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkpCi0gICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLT52aWRlb0Z1bGxzY3Jl
ZW5MYXllcigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXItPnZpZGVvRnVsbHNj
cmVlbkxheWVyKCk7CiB9CiAgICAgCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6c3luY1RleHRUcmFja0JvdW5kcygpCiB7Ci0jaWYgUExBVEZPUk0oSU9TKSB8fCAo
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotICAgIGlm
ICghbV92aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXItPnZpZGVvRnVsbHNjcmVlbkxheWVyKCkg
fHwgIW1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb25MYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVB
Y3Rpb25zOllFU107Ci0KLSAgICBhdXRvIHZpZGVvRnVsbHNjcmVlbkZyYW1lID0gbV92aWRlb0Z1
bGxzY3JlZW5MYXllck1hbmFnZXItPnZpZGVvRnVsbHNjcmVlbkZyYW1lKCk7Ci0gICAgYXV0byB2
aWRlb1JlY3QgPSBbbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgYm91bmRzXTsKLSAgICBhdXRv
IHRleHRGcmFtZSA9IG1fc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyID8gdmlkZW9SZWN0IDogQ0dS
ZWN0TWFrZSgwLCAwLCB2aWRlb0Z1bGxzY3JlZW5GcmFtZS53aWR0aCgpLCB2aWRlb0Z1bGxzY3Jl
ZW5GcmFtZS5oZWlnaHQoKSk7Ci0gICAgW21fdGV4dFRyYWNrUmVwcmVzZW50YXRpb25MYXllciBz
ZXRGcmFtZTp0ZXh0RnJhbWVdOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLSNlbmRp
ZgorICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLT5zeW5jVGV4dFRyYWNrQm91bmRz
KCk7CiB9CiAgICAgCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6
c2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24oVGV4dFRyYWNrUmVwcmVzZW50YXRpb24qIHJlcHJl
c2VudGF0aW9uKQogewotI2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKLSAgICBQbGF0Zm9ybUxheWVyKiByZXByZXNl
bnRhdGlvbkxheWVyID0gcmVwcmVzZW50YXRpb24gPyByZXByZXNlbnRhdGlvbi0+cGxhdGZvcm1M
YXllcigpIDogbmlsOwotICAgIGlmIChyZXByZXNlbnRhdGlvbkxheWVyID09IG1fdGV4dFRyYWNr
UmVwcmVzZW50YXRpb25MYXllcikgewotICAgICAgICBzeW5jVGV4dFRyYWNrQm91bmRzKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAg
W0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLQotICAgIGlmIChtX3RleHRU
cmFja1JlcHJlc2VudGF0aW9uTGF5ZXIpCi0gICAgICAgIFttX3RleHRUcmFja1JlcHJlc2VudGF0
aW9uTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgIAotICAgIG1fdGV4dFRyYWNrUmVw
cmVzZW50YXRpb25MYXllciA9IHJlcHJlc2VudGF0aW9uTGF5ZXI7Ci0gICAgCi0gICAgaWYgKG1f
dmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLT52aWRlb0Z1bGxzY3JlZW5MYXllcigpICYmIG1f
dGV4dFRyYWNrUmVwcmVzZW50YXRpb25MYXllcikgewotICAgICAgICBzeW5jVGV4dFRyYWNrQm91
bmRzKCk7Ci0gICAgICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci0+dmlkZW9GdWxs
c2NyZWVuTGF5ZXIoKSBhZGRTdWJsYXllcjptX3RleHRUcmFja1JlcHJlc2VudGF0aW9uTGF5ZXIu
Z2V0KCldOwotICAgIH0KLQotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0gICAgCi0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShyZXByZXNlbnRhdGlvbik7Ci0jZW5kaWYKKyAgICBtX3ZpZGVv
RnVsbHNjcmVlbkxheWVyTWFuYWdlci0+c2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24ocmVwcmVz
ZW50YXRpb24pOwogfQotICAgIAogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdF
VCkKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZXRXaXJlbGVz
c1BsYXliYWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmIHRhcmdldCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTdHJlYW1BVkZPYmpDLmgKaW5kZXggMDAxZDFkNWVmZjM3Mzg0ZjgwNGY1MGRlYTkzMzU3ZGQz
MzAyM2FmMi4uZDYxZTcyMjYyYjhlM2M4ZTY1NDU5YTE3ZDlkNDc1OGFiZmJjZmZhNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDLmgKQEAgLTU0LDEyICs1NCw5IEBAIGNsYXNzIEF1ZGlvVHJhY2tQ
cml2YXRlTWVkaWFTdHJlYW1Db2NvYTsKIGNsYXNzIEFWVmlkZW9DYXB0dXJlU291cmNlOwogY2xh
c3MgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50OwogY2xhc3MgUGl4ZWxCdWZmZXJDb25mb3JtZXJD
VjsKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlck9iakM7CiBjbGFzcyBWaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU3RyZWFtOwogCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotY2xhc3MgVmlkZW9GdWxs
c2NyZWVuTGF5ZXJNYW5hZ2VyOwotI2VuZGlmCi0KIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU3RyZWFtQVZGT2JqQyBmaW5hbCA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZh
Y2UsIHByaXZhdGUgTWVkaWFTdHJlYW1Qcml2YXRlOjpPYnNlcnZlciwgcHJpdmF0ZSBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAg
ICAsIHByaXZhdGUgTG9nZ2VySGVscGVyCkBAIC0yMjMsMTAgKzIyMCw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzYW1wbGVCdWZmZXJVcGRhdGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiwgTWVk
aWFTYW1wbGUmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlYWR5U3RhdGVDaGFuZ2VkKE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlJikgb3ZlcnJpZGU7CiAKLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCiAgICAgdm9pZCBz
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0VmlkZW9GdWxs
c2NyZWVuRnJhbWUoRmxvYXRSZWN0KSBvdmVycmlkZTsKLSNlbmRpZgogCiAgICAgTWVkaWFUaW1l
IHN0cmVhbVRpbWUoKSBjb25zdDsKIApAQCAtMjY5LDYgKzI2NCwxMyBAQCBwcml2YXRlOgogICAg
IFBsYXliYWNrU3RhdGUgbV9wbGF5YmFja1N0YXRlIHsgUGxheWJhY2tTdGF0ZTo6Tm9uZSB9Owog
ICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIG1fdmlkZW9Sb3RhdGlvbiB7IE1lZGlhU2Ft
cGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lIH07CiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbV92aWRl
b1RyYW5zZm9ybTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5h
Z2VyT2JqQz4gbV92aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXI7CisKKyNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKKyAgICBSZWY8Y29uc3QgTG9nZ2VyPiBtX2xvZ2dlcjsKKyAgICBjb25zdCB2
b2lkKiBtX2xvZ0lkZW50aWZpZXI7CisjZW5kaWYKKwogICAgIGJvb2wgbV92aWRlb01pcnJvcmVk
IHsgZmFsc2UgfTsKICAgICBib29sIG1fcGxheWluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX211
dGVkIHsgZmFsc2UgfTsKQEAgLTI3OSwxNiArMjgxLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
dHJhbnNmb3JtSXNWYWxpZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Zpc2libGUgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9oYXZlU2Vlbk1ldGFkYXRhIHsgZmFsc2UgfTsKLQotI2lmIFBMQVRGT1JN
KElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyPiBtX3Zp
ZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlcjsKLSNlbmRpZgotCi0jaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECi0gICAgUmVmPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7Ci0gICAgY29uc3Qgdm9pZCog
bV9sb2dJZGVudGlmaWVyOwotI2VuZGlmCi0KIH07CiAgICAgCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFW
Rk9iakMubW0KaW5kZXggOTMxZmIwMDZiMzA4ZTQzZDA3YWFmZTI1Y2U4ZDFmNDA1YzFlZDZhNC4u
ZDdhZjNhMzQ0MDkxZjY3ZDIxNTFlYTdiYTU0ZWFjYzZhMzRjOGU2MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQy5tbQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2lt
cG9ydCAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCiAjaW1wb3J0ICJQaXhlbEJ1ZmZlckNvbmZvcm1l
ckNWLmgiCisjaW1wb3J0ICJWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXJPYmpDLmgiCiAjaW1w
b3J0ICJWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRp
b24vQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuaD4KICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FM
YXllci5oPgpAQCAtNDUsOSArNDYsNiBAQAogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KICNp
bXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotI2ltcG9ydCAi
VmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLmgiCi0jZW5kaWYKIAogI3ByYWdtYSBtYXJrIC0g
U29mdCBMaW5raW5nCiAKQEAgLTE5MSw5ICsxODksNyBAQCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakM6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQyhNZWRp
YQogICAgIDogbV9wbGF5ZXIocGxheWVyKQogICAgICwgbV9zdGF0dXNDaGFuZ2VMaXN0ZW5lcihh
ZG9wdE5TKFtbV2ViQVZTYW1wbGVCdWZmZXJTdGF0dXNDaGFuZ2VMaXN0ZW5lciBhbGxvY10gaW5p
dFdpdGhQYXJlbnQ6dGhpc10pKQogICAgICwgbV9jbG9jayhQQUw6OkNsb2NrOjpjcmVhdGUoKSkK
LSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVT
RU5UQVRJT05fTU9ERSkpCi0gICAgLCBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlcihzdGQ6
Om1ha2VfdW5pcXVlPFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlcj4oKSkKLSNlbmRpZgorICAg
ICwgbV92aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIoc3RkOjptYWtlX3VuaXF1ZTxWaWRlb0Z1
bGxzY3JlZW5MYXllck1hbmFnZXJPYmpDPigpKQogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAog
ICAgICwgbV9sb2dnZXIocGxheWVyLT5tZWRpYVBsYXllckxvZ2dlcigpKQogICAgICwgbV9sb2dJ
ZGVudGlmaWVyKHBsYXllci0+bWVkaWFQbGF5ZXJMb2dJZGVudGlmaWVyKCkpCkBAIC01MDAsOSAr
NDk2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OmVuc3Vy
ZUxheWVycygpCiAgICAgdXBkYXRlUmVuZGVyaW5nTW9kZSgpOwogICAgIHVwZGF0ZURpc3BsYXlM
YXllcigpOwogCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUo
VklERU9fUFJFU0VOVEFUSU9OX01PREUpKQogICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5h
Z2VyLT5zZXRWaWRlb0xheWVyKG1fYmFja2dyb3VuZExheWVyLmdldCgpLCBzbmFwcGVkSW50UmVj
dChtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJDb250ZW50Qm94UmVjdCgpKS5zaXplKCkp
OwotI2VuZGlmCiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
OjpkZXN0cm95TGF5ZXJzKCkKQEAgLTUxOCw5ICs1MTIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6ZGVzdHJveUxheWVycygpCiAKICAgICB1cGRhdGVSZW5k
ZXJpbmdNb2RlKCk7CiAgICAgCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAm
JiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQogICAgIG1fdmlkZW9GdWxsc2NyZWVu
TGF5ZXJNYW5hZ2VyLT5kaWREZXN0cm95VmlkZW9MYXllcigpOwotI2VuZGlmCiB9CiAKICNwcmFn
bWEgbWFyayAtCkBAIC01ODYsMTEgKzU3OCw3IEBAIFBsYXRmb3JtTGF5ZXIqIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiAgICAgaWYg
KCFtX2JhY2tncm91bmRMYXllciB8fCBtX2Rpc3BsYXlNb2RlID09IE5vbmUpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQogICAgIHJldHVybiBtX3ZpZGVvRnVsbHNj
cmVlbkxheWVyTWFuYWdlci0+dmlkZW9JbmxpbmVMYXllcigpOwotI2Vsc2UKLSAgICByZXR1cm4g
bV9iYWNrZ3JvdW5kTGF5ZXIuZ2V0KCk7Ci0jZW5kaWYKIH0KIAogUGxhdGZvcm1MYXllciogTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpkaXNwbGF5TGF5ZXIoKQpAQCAtOTA5
LDE0ICs4OTcsOCBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6
c3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
I2lmIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNF
TlRBVElPTl9NT0RFKSkKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKiB2aWRlb0Z1bGxzY3JlZW5M
YXllciwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
aWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLT52aWRlb0Z1bGxzY3JlZW5MYXllcigp
ID09IHZpZGVvRnVsbHNjcmVlbkxheWVyKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyTWFu
YWdlci0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIodmlkZW9GdWxsc2NyZWVuTGF5ZXIsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIApAQCAtOTI0LDcgKzkwNiw2IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzZXRWaWRlb0Z1bGxzY3JlZW5GcmFt
ZShGbG9hdFJlY3QgZnJhCiB7CiAgICAgbV92aWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXItPnNl
dFZpZGVvRnVsbHNjcmVlbkZyYW1lKGZyYW1lKTsKIH0KLSNlbmRpZgogCiB0eXBlZGVmIGVudW0g
ewogICAgIEFkZCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL1ZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvVmlkZW9GdWxsc2Ny
ZWVuTGF5ZXJNYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlOGY0NWJk
NzI0ODVjZDNlMzdkNWQ5ZDc0NDA2NDRmMzFlNDM0NzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IChQTEFURk9S
TShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCi0KLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXll
ci5oIgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlcik7Ci1wdWJsaWM6Ci0gICAgVmlkZW9G
dWxsc2NyZWVuTGF5ZXJNYW5hZ2VyKCk7Ci0KLSAgICBQbGF0Zm9ybUxheWVyICp2aWRlb0lubGlu
ZUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0lubGluZUxheWVyLmdldCgpOyB9Ci0gICAg
UGxhdGZvcm1MYXllciAqdmlkZW9GdWxsc2NyZWVuTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Zp
ZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpOyB9Ci0gICAgRmxvYXRSZWN0IHZpZGVvRnVsbHNjcmVl
bkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5GcmFtZTsgfQotICAgIHZv
aWQgc2V0VmlkZW9MYXllcihQbGF0Zm9ybUxheWVyICosIEludFNpemUgY29udGVudFNpemUpOwot
ICAgIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllciAqLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgdm9pZCBzZXRWaWRlb0Z1
bGxzY3JlZW5GcmFtZShGbG9hdFJlY3QpOwotICAgIHZvaWQgZGlkRGVzdHJveVZpZGVvTGF5ZXIo
KTsKLQotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0lubGlu
ZUxheWVyOwotICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVvRnVsbHNjcmVlbkxh
eWVyOwotICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVvTGF5ZXI7Ci0gICAgRmxv
YXRSZWN0IG1fdmlkZW9GdWxsc2NyZWVuRnJhbWU7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBQTEFU
Rk9STShJT1MpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05f
TU9ERSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9WaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXIubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9WaWRlb0Z1bGxzY3JlZW5M
YXllck1hbmFnZXIubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMDExYjQyYmJl
NzI0NmVhZjNlZmQ0MTBhODVhZDNlNjEyMzZhNWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyLm1tCisrKyAvZGV2L251
bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlZpZGVvRnVsbHNjcmVlbkxh
eWVyTWFuYWdlci5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01PREUpKQotCi0jaW1wb3J0ICJDb2xvci5oIgotI2lt
cG9ydCAiV2ViQ29yZUNBTGF5ZXJFeHRyYXMuaCIKLSNpbXBvcnQgPG1hY2gvbWFjaF9pbml0Lmg+
Ci0jaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5oPgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFy
dHpDb3JlU1BJLmg+Ci0jaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KLQotQGludGVyZmFjZSBXZWJW
aWRlb0NvbnRhaW5lckxheWVyIDogQ0FMYXllcgotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2Vi
VmlkZW9Db250YWluZXJMYXllcgotCi0tICh2b2lkKXNldEJvdW5kczooQ0dSZWN0KWJvdW5kcwot
ewotICAgIFtzdXBlciBzZXRCb3VuZHM6Ym91bmRzXTsKLSAgICBmb3IgKENBTGF5ZXIqIGxheWVy
IGluIHNlbGYuc3VibGF5ZXJzKQotICAgICAgICBsYXllci5mcmFtZSA9IGJvdW5kczsKLX0KLQot
LSAodm9pZClzZXRQb3NpdGlvbjooQ0dQb2ludClwb3NpdGlvbgotewotICAgIGlmICghQ0FUcmFu
c2Zvcm0zRElzSWRlbnRpdHkoc2VsZi50cmFuc2Zvcm0pKSB7Ci0gICAgICAgIC8vIFByZS1hcHBs
eSB0aGUgdHJhbnNmb3JtIGFkZGVkIGluIHRoZSBXZWJQcm9jZXNzIHRvIGZpeCA8cmRhcjovL3By
b2JsZW0vMTgzMTY1NDI+IHRvIHRoZSBwb3NpdGlvbi4KLSAgICAgICAgcG9zaXRpb24gPSBDR1Bv
aW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocG9zaXRpb24sIENBVHJhbnNmb3JtM0RHZXRBZmZpbmVU
cmFuc2Zvcm0oc2VsZi50cmFuc2Zvcm0pKTsKLSAgICB9Ci0gICAgW3N1cGVyIHNldFBvc2l0aW9u
OnBvc2l0aW9uXTsKLX0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1WaWRlb0Z1bGxz
Y3JlZW5MYXllck1hbmFnZXI6OlZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlcigpCi17Ci19Ci0K
LXZvaWQgVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyOjpzZXRWaWRlb0xheWVyKFBsYXRmb3Jt
TGF5ZXIgKnZpZGVvTGF5ZXIsIEludFNpemUgY29udGVudFNpemUpCi17Ci0gICAgbV92aWRlb0xh
eWVyID0gdmlkZW9MYXllcjsKLQotICAgIFttX3ZpZGVvTGF5ZXIgd2ViX2Rpc2FibGVBbGxBY3Rp
b25zXTsKLSAgICBtX3ZpZGVvSW5saW5lTGF5ZXIgPSBhZG9wdE5TKFtbV2ViVmlkZW9Db250YWlu
ZXJMYXllciBhbGxvY10gaW5pdF0pOwotI2lmbmRlZiBOREVCVUcKLSAgICBbbV92aWRlb0lubGlu
ZUxheWVyIHNldE5hbWU6QCJXZWJWaWRlb0NvbnRhaW5lckxheWVyIl07Ci0jZW5kaWYKLSAgICBb
bV92aWRlb0lubGluZUxheWVyIHNldEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgY29udGVudFNpemUu
d2lkdGgoKSwgY29udGVudFNpemUuaGVpZ2h0KCkpXTsKLSAgICBpZiAobV92aWRlb0Z1bGxzY3Jl
ZW5MYXllcikgewotICAgICAgICBbbV92aWRlb0xheWVyIHNldEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgbV92aWRlb0Z1bGxzY3JlZW5GcmFtZS53aWR0aCgpLCBtX3ZpZGVvRnVsbHNjcmVlbkZyYW1l
LmhlaWdodCgpKV07Ci0gICAgICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIGluc2VydFN1Ymxh
eWVyOm1fdmlkZW9MYXllci5nZXQoKSBhdEluZGV4OjBdOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IFttX3ZpZGVvSW5saW5lTGF5ZXIgaW5zZXJ0U3VibGF5ZXI6bV92aWRlb0xheWVyLmdldCgpIGF0
SW5kZXg6MF07Ci0gICAgICAgIFttX3ZpZGVvTGF5ZXIgc2V0RnJhbWU6bV92aWRlb0lubGluZUxh
eWVyLmdldCgpLmJvdW5kc107Ci0gICAgfQotfQotCi12b2lkIFZpZGVvRnVsbHNjcmVlbkxheWVy
TWFuYWdlcjo6c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllciAqdmlkZW9GdWxs
c2NyZWVuTGF5ZXIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID09IHZpZGVvRnVsbHNjcmVlbkxheWVy
KSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID0gdmlkZW9GdWxsc2NyZWVuTGF5ZXI7Ci0K
LSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJs
ZUFjdGlvbnM6WUVTXTsKLQotICAgIGlmIChtX3ZpZGVvTGF5ZXIpIHsKLSAgICAgICAgQ0FDb250
ZXh0ICpvbGRDb250ZXh0ID0gW21fdmlkZW9MYXllciBjb250ZXh0XTsKLQotICAgICAgICBpZiAo
bV92aWRlb0Z1bGxzY3JlZW5MYXllcikgewotICAgICAgICAgICAgW21fdmlkZW9GdWxsc2NyZWVu
TGF5ZXIgaW5zZXJ0U3VibGF5ZXI6bV92aWRlb0xheWVyLmdldCgpIGF0SW5kZXg6MF07Ci0gICAg
ICAgICAgICBbbV92aWRlb0xheWVyIHNldEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgbV92aWRlb0Z1
bGxzY3JlZW5GcmFtZS53aWR0aCgpLCBtX3ZpZGVvRnVsbHNjcmVlbkZyYW1lLmhlaWdodCgpKV07
Ci0gICAgICAgIH0gZWxzZSBpZiAobV92aWRlb0lubGluZUxheWVyKSB7Ci0gICAgICAgICAgICBb
bV92aWRlb0xheWVyIHNldEZyYW1lOlttX3ZpZGVvSW5saW5lTGF5ZXIgYm91bmRzXV07Ci0gICAg
ICAgICAgICBbbV92aWRlb0lubGluZUxheWVyIGluc2VydFN1YmxheWVyOm1fdmlkZW9MYXllci5n
ZXQoKSBhdEluZGV4OjBdOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFttX3ZpZGVvTGF5
ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotCi0gICAgICAgIENBQ29udGV4dCAqbmV3Q29udGV4
dCA9IFttX3ZpZGVvTGF5ZXIgY29udGV4dF07Ci0gICAgICAgIGlmIChvbGRDb250ZXh0ICYmIG5l
d0NvbnRleHQgJiYgb2xkQ29udGV4dCAhPSBuZXdDb250ZXh0KSB7Ci0jaWYgUExBVEZPUk0oTUFD
KQotICAgICAgICAgICAgb2xkQ29udGV4dC5jb21taXRQcmlvcml0eSA9IDA7Ci0gICAgICAgICAg
ICBuZXdDb250ZXh0LmNvbW1pdFByaW9yaXR5ID0gMTsKLSNlbmRpZgotICAgICAgICAgICAgbWFj
aF9wb3J0X3QgZmVuY2VQb3J0ID0gW29sZENvbnRleHQgY3JlYXRlRmVuY2VQb3J0XTsKLSAgICAg
ICAgICAgIFtuZXdDb250ZXh0IHNldEZlbmNlUG9ydDpmZW5jZVBvcnRdOwotICAgICAgICAgICAg
bWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgZmVuY2VQb3J0KTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIFtDQVRyYW5zYWN0aW9uIHNldENvbXBsZXRpb25CbG9jazpCbG9j
a1B0cjx2b2lkICgpPjo6ZnJvbUNhbGxhYmxlKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAg
fSkuZ2V0KCldOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLX0KLQotdm9pZCBWaWRl
b0Z1bGxzY3JlZW5MYXllck1hbmFnZXI6OnNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKEZsb2F0UmVj
dCB2aWRlb0Z1bGxzY3JlZW5GcmFtZSkKLXsKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbkZyYW1lID0g
dmlkZW9GdWxsc2NyZWVuRnJhbWU7Ci0gICAgaWYgKCFtX3ZpZGVvRnVsbHNjcmVlbkxheWVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBbbV92aWRlb0xheWVyIHNldEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgdmlkZW9GdWxsc2NyZWVuRnJhbWUud2lkdGgoKSwgdmlkZW9GdWxsc2NyZWVuRnJhbWUu
aGVpZ2h0KCkpXTsKLX0KLQotdm9pZCBWaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXI6OmRpZERl
c3Ryb3lWaWRlb0xheWVyKCkKLXsKLSAgICBbbV92aWRlb0xheWVyIHJlbW92ZUZyb21TdXBlcmxh
eWVyXTsKLQotICAgIG1fdmlkZW9JbmxpbmVMYXllciA9IG5pbDsKLSAgICBtX3ZpZGVvTGF5ZXIg
PSBuaWw7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgKFBMQVRGT1JNKE1B
QykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1ZpZGVvRnVsbHNj
cmVlbkxheWVyTWFuYWdlck9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL1ZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlck9iakMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ZDdmNDY3YzRlOGZjZDI2NWRlMzk3YzE1Y2JkZDMyNGYzZjQwMWUyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyT2JqQy5oCkBAIC0wLDAgKzEsNjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5h
Z2VyLmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlck9iakMgZmluYWwgOiBwdWJsaWMg
VmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyIHsKK3B1YmxpYzoKKyAgICBWaWRlb0Z1bGxzY3Jl
ZW5MYXllck1hbmFnZXJPYmpDKCk7CisKKyAgICBQbGF0Zm9ybUxheWVyICp2aWRlb0lubGluZUxh
eWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92aWRlb0lubGluZUxheWVyLmdldCgpOyB9Cisg
ICAgUGxhdGZvcm1MYXllciAqdmlkZW9GdWxsc2NyZWVuTGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpOyB9CisgICAgRmxvYXRSZWN0IHZpZGVv
RnVsbHNjcmVlbkZyYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5G
cmFtZTsgfQorICAgIHZvaWQgc2V0VmlkZW9MYXllcihQbGF0Zm9ybUxheWVyICosIEludFNpemUg
Y29udGVudFNpemUpIGZpbmFsOworICAgIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxh
dGZvcm1MYXllciAqLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikg
ZmluYWw7CisgICAgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShGbG9hdFJlY3QpIGZpbmFs
OworICAgIHZvaWQgZGlkRGVzdHJveVZpZGVvTGF5ZXIoKSBmaW5hbDsKKworICAgIGJvb2wgcmVx
dWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0
VGV4dFRyYWNrUmVwcmVzZW50YXRpb24oVGV4dFRyYWNrUmVwcmVzZW50YXRpb24qKSBmaW5hbDsK
KyAgICB2b2lkIHN5bmNUZXh0VHJhY2tCb3VuZHMoKSBmaW5hbDsKKworcHJpdmF0ZToKKyAgICBS
ZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkxheWVyOwor
ICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVvSW5saW5lTGF5ZXI7CisgICAgUmV0
YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXI7CisgICAgUmV0YWlu
UHRyPFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9MYXllcjsKKyAgICBGbG9hdFJlY3QgbV92aWRlb0Z1
bGxzY3JlZW5GcmFtZTsKKyAgICBGbG9hdFJlY3QgbV92aWRlb0lubGluZUZyYW1lOworfTsKKwor
fQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9WaWRlb0Z1bGxzY3JlZW5MYXllck1hbmFnZXJPYmpDLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvVmlkZW9GdWxsc2NyZWVu
TGF5ZXJNYW5hZ2VyT2JqQy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yY2JmZWVmMmM5NGNiNmQzN2NkYjlmN2E2
NDBjZjg2MzdhNTZmOWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2Vy
T2JqQy5tbQpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVmlkZW9GdWxsc2Ny
ZWVuTGF5ZXJNYW5hZ2VyT2JqQy5oIgorCisjaW1wb3J0ICJDb2xvci5oIgorI2ltcG9ydCAiVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24uaCIKKyNpbXBvcnQgIldlYkNvcmVDQUxheWVyRXh0cmFzLmgi
CisjaW1wb3J0IDxtYWNoL21hY2hfaW5pdC5oPgorI2ltcG9ydCA8bWFjaC9tYWNoX3BvcnQuaD4K
KyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgorI2ltcG9ydCA8d3RmL0Js
b2NrUHRyLmg+CisKK0BpbnRlcmZhY2UgV2ViVmlkZW9Db250YWluZXJMYXllciA6IENBTGF5ZXIK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlZpZGVvQ29udGFpbmVyTGF5ZXIKKworLSAodm9p
ZClzZXRCb3VuZHM6KENHUmVjdClib3VuZHMKK3sKKyAgICBbc3VwZXIgc2V0Qm91bmRzOmJvdW5k
c107CisgICAgZm9yIChDQUxheWVyKiBsYXllciBpbiBzZWxmLnN1YmxheWVycykKKyAgICAgICAg
bGF5ZXIuZnJhbWUgPSBib3VuZHM7Cit9CisKKy0gKHZvaWQpc2V0UG9zaXRpb246KENHUG9pbnQp
cG9zaXRpb24KK3sKKyAgICBpZiAoIUNBVHJhbnNmb3JtM0RJc0lkZW50aXR5KHNlbGYudHJhbnNm
b3JtKSkgeworICAgICAgICAvLyBQcmUtYXBwbHkgdGhlIHRyYW5zZm9ybSBhZGRlZCBpbiB0aGUg
V2ViUHJvY2VzcyB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzE4MzE2NTQyPiB0byB0aGUgcG9zaXRp
b24uCisgICAgICAgIHBvc2l0aW9uID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKHBvc2l0
aW9uLCBDQVRyYW5zZm9ybTNER2V0QWZmaW5lVHJhbnNmb3JtKHNlbGYudHJhbnNmb3JtKSk7Cisg
ICAgfQorICAgIFtzdXBlciBzZXRQb3NpdGlvbjpwb3NpdGlvbl07Cit9CitAZW5kCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyT2JqQzo6VmlkZW9G
dWxsc2NyZWVuTGF5ZXJNYW5hZ2VyT2JqQygpCisgICAgOiBWaWRlb0Z1bGxzY3JlZW5MYXllck1h
bmFnZXIoKQoreworfQorCit2b2lkIFZpZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlck9iakM6OnNl
dFZpZGVvTGF5ZXIoUGxhdGZvcm1MYXllciAqdmlkZW9MYXllciwgSW50U2l6ZSBjb250ZW50U2l6
ZSkKK3sKKyAgICBtX3ZpZGVvTGF5ZXIgPSB2aWRlb0xheWVyOworICAgIG1fdmlkZW9JbmxpbmVG
cmFtZSA9IENHUmVjdE1ha2UoMCwgMCwgY29udGVudFNpemUud2lkdGgoKSwgY29udGVudFNpemUu
aGVpZ2h0KCkpOworCisgICAgW21fdmlkZW9MYXllciB3ZWJfZGlzYWJsZUFsbEFjdGlvbnNdOwor
ICAgIG1fdmlkZW9JbmxpbmVMYXllciA9IGFkb3B0TlMoW1tXZWJWaWRlb0NvbnRhaW5lckxheWVy
IGFsbG9jXSBpbml0XSk7CisjaWZuZGVmIE5ERUJVRworICAgIFttX3ZpZGVvSW5saW5lTGF5ZXIg
c2V0TmFtZTpAIldlYlZpZGVvQ29udGFpbmVyTGF5ZXIiXTsKKyNlbmRpZgorICAgIFttX3ZpZGVv
SW5saW5lTGF5ZXIgc2V0RnJhbWU6bV92aWRlb0lubGluZUZyYW1lXTsKKyAgICBpZiAobV92aWRl
b0Z1bGxzY3JlZW5MYXllcikgeworICAgICAgICBbbV92aWRlb0xheWVyIHNldEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgbV92aWRlb0Z1bGxzY3JlZW5GcmFtZS53aWR0aCgpLCBtX3ZpZGVvRnVsbHNj
cmVlbkZyYW1lLmhlaWdodCgpKV07CisgICAgICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIGlu
c2VydFN1YmxheWVyOm1fdmlkZW9MYXllci5nZXQoKSBhdEluZGV4OjBdOworICAgIH0gZWxzZSB7
CisgICAgICAgIFttX3ZpZGVvSW5saW5lTGF5ZXIgaW5zZXJ0U3VibGF5ZXI6bV92aWRlb0xheWVy
LmdldCgpIGF0SW5kZXg6MF07CisgICAgICAgIFttX3ZpZGVvTGF5ZXIgc2V0RnJhbWU6bV92aWRl
b0lubGluZUxheWVyLmdldCgpLmJvdW5kc107CisgICAgfQorfQorCit2b2lkIFZpZGVvRnVsbHNj
cmVlbkxheWVyTWFuYWdlck9iakM6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5
ZXIgKnZpZGVvRnVsbHNjcmVlbkxheWVyLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5MYXllciA9PSB2aWRlb0Z1
bGxzY3JlZW5MYXllcikgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV92aWRlb0Z1bGxzY3JlZW5MYXllciA9IHZpZGVvRnVsbHNj
cmVlbkxheWVyOworCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0
aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisKKyAgICBpZiAobV92aWRlb0xheWVyKSB7Cisg
ICAgICAgIENBQ29udGV4dCAqb2xkQ29udGV4dCA9IFttX3ZpZGVvTGF5ZXIgY29udGV4dF07CisK
KyAgICAgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIpIHsKKyAgICAgICAgICAgIFttX3Zp
ZGVvRnVsbHNjcmVlbkxheWVyIGluc2VydFN1YmxheWVyOm1fdmlkZW9MYXllci5nZXQoKSBhdElu
ZGV4OjBdOworICAgICAgICAgICAgW21fdmlkZW9MYXllciBzZXRGcmFtZTpDR1JlY3RNYWtlKDAs
IDAsIG1fdmlkZW9GdWxsc2NyZWVuRnJhbWUud2lkdGgoKSwgbV92aWRlb0Z1bGxzY3JlZW5GcmFt
ZS5oZWlnaHQoKSldOworICAgICAgICB9IGVsc2UgaWYgKG1fdmlkZW9JbmxpbmVMYXllcikgewor
ICAgICAgICAgICAgW21fdmlkZW9MYXllciBzZXRGcmFtZTpbbV92aWRlb0lubGluZUxheWVyIGJv
dW5kc11dOworICAgICAgICAgICAgW21fdmlkZW9JbmxpbmVMYXllciBpbnNlcnRTdWJsYXllcjpt
X3ZpZGVvTGF5ZXIuZ2V0KCkgYXRJbmRleDowXTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBbbV92aWRlb0xheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKworICAgICAgICBDQUNvbnRl
eHQgKm5ld0NvbnRleHQgPSBbbV92aWRlb0xheWVyIGNvbnRleHRdOworICAgICAgICBpZiAob2xk
Q29udGV4dCAmJiBuZXdDb250ZXh0ICYmIG9sZENvbnRleHQgIT0gbmV3Q29udGV4dCkgeworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgIG9sZENvbnRleHQuY29tbWl0UHJpb3JpdHkgPSAw
OworICAgICAgICAgICAgbmV3Q29udGV4dC5jb21taXRQcmlvcml0eSA9IDE7CisjZW5kaWYKKyAg
ICAgICAgICAgIG1hY2hfcG9ydF90IGZlbmNlUG9ydCA9IFtvbGRDb250ZXh0IGNyZWF0ZUZlbmNl
UG9ydF07CisgICAgICAgICAgICBbbmV3Q29udGV4dCBzZXRGZW5jZVBvcnQ6ZmVuY2VQb3J0XTsK
KyAgICAgICAgICAgIG1hY2hfcG9ydF9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIGZlbmNl
UG9ydCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRDb21wbGV0
aW9uQmxvY2s6QmxvY2tQdHI8dm9pZCAoKT46OmZyb21DYWxsYWJsZShbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgIH0pLmdldCgpXTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9
CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVuTGF5ZXJNYW5hZ2VyT2JqQzo6c2V0VmlkZW9GdWxsc2Ny
ZWVuRnJhbWUoRmxvYXRSZWN0IHZpZGVvRnVsbHNjcmVlbkZyYW1lKQoreworICAgIG1fdmlkZW9G
dWxsc2NyZWVuRnJhbWUgPSB2aWRlb0Z1bGxzY3JlZW5GcmFtZTsKKyAgICBpZiAoIW1fdmlkZW9G
dWxsc2NyZWVuTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFttX3ZpZGVvTGF5ZXIgc2V0
RnJhbWU6bV92aWRlb0Z1bGxzY3JlZW5GcmFtZV07Cit9CisKK3ZvaWQgVmlkZW9GdWxsc2NyZWVu
TGF5ZXJNYW5hZ2VyT2JqQzo6ZGlkRGVzdHJveVZpZGVvTGF5ZXIoKQoreworICAgIFttX3ZpZGVv
TGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworCisgICAgbV92aWRlb0lubGluZUxheWVyID0g
bmlsOworICAgIG1fdmlkZW9MYXllciA9IG5pbDsKK30KKworYm9vbCBWaWRlb0Z1bGxzY3JlZW5M
YXllck1hbmFnZXJPYmpDOjpyZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKK30KKwordm9pZCBWaWRlb0Z1
bGxzY3JlZW5MYXllck1hbmFnZXJPYmpDOjpzeW5jVGV4dFRyYWNrQm91bmRzKCkKK3sKKyAgICBp
ZiAoIW1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgfHwgIW1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb25M
YXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAg
IFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisKKyAgICBDR1JlY3QgdGV4
dEZyYW1lID0gbV92aWRlb0xheWVyID8gbV92aWRlb0lubGluZUZyYW1lIDogbV92aWRlb0Z1bGxz
Y3JlZW5GcmFtZTsKKyAgICBbbV90ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkxheWVyIHNldEZyYW1l
OnRleHRGcmFtZV07CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCit2b2lkIFZp
ZGVvRnVsbHNjcmVlbkxheWVyTWFuYWdlck9iakM6OnNldFRleHRUcmFja1JlcHJlc2VudGF0aW9u
KFRleHRUcmFja1JlcHJlc2VudGF0aW9uKiByZXByZXNlbnRhdGlvbikKK3sKKyAgICBQbGF0Zm9y
bUxheWVyKiByZXByZXNlbnRhdGlvbkxheWVyID0gcmVwcmVzZW50YXRpb24gPyByZXByZXNlbnRh
dGlvbi0+cGxhdGZvcm1MYXllcigpIDogbmlsOworICAgIGlmIChyZXByZXNlbnRhdGlvbkxheWVy
ID09IG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb25MYXllcikgeworICAgICAgICBzeW5jVGV4dFRy
YWNrQm91bmRzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbQ0FUcmFuc2FjdGlv
biBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKwor
ICAgIGlmIChtX3RleHRUcmFja1JlcHJlc2VudGF0aW9uTGF5ZXIpCisgICAgICAgIFttX3RleHRU
cmFja1JlcHJlc2VudGF0aW9uTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworCisgICAgbV90
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkxheWVyID0gcmVwcmVzZW50YXRpb25MYXllcjsKKworICAg
IGlmIChtX3ZpZGVvRnVsbHNjcmVlbkxheWVyICYmIG1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb25M
YXllcikgeworICAgICAgICBzeW5jVGV4dFRyYWNrQm91bmRzKCk7CisgICAgICAgIFttX3ZpZGVv
RnVsbHNjcmVlbkxheWVyIGFkZFN1YmxheWVyOm1fdGV4dFRyYWNrUmVwcmVzZW50YXRpb25MYXll
ci5nZXQoKV07CisgICAgfQorCisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKworfQorCit9
CisK
</data>

          </attachment>
      

    </bug>

</bugzilla>