<?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>82407</bug_id>
          
          <creation_ts>2012-03-27 18:27:27 -0700</creation_ts>
          <short_desc>[chromium] Merge ChromiumDataObject and DataTransferItemListChromium.</short_desc>
          <delta_ts>2012-03-28 15:03:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Cheng">dcheng</reporter>
          <assigned_to name="Daniel Cheng">dcheng</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>589542</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-03-27 18:27:27 -0700</bug_when>
    <thetext>[chromium] Merge ChromiumDataObject and DataTransferItemListChromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589544</commentid>
    <comment_count>1</comment_count>
      <attachid>134191</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-03-27 18:31:50 -0700</bug_when>
    <thetext>Created attachment 134191
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590056</commentid>
    <comment_count>2</comment_count>
      <attachid>134191</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-03-28 09:47:44 -0700</bug_when>
    <thetext>Comment on attachment 134191
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=134191&amp;action=review

Looks like your patch needs to be rebased.  Please make sure to have a green ews run on all the bots before landing.

&gt; Source/WebCore/ChangeLog:14
&gt; +        * platform/chromium/ChromiumDataObject.cpp:

Please mention here that this is replacing DataTransferItemListChromium.

&gt; Source/WebCore/platform/chromium/ChromiumDataObject.h:59
&gt; +    // DataTransferItemList support.
&gt; +    size_t length() const;

Should ChromiumDataObject implement DataTransferItemList?

&gt; Source/WebCore/platform/chromium/ChromiumDataObjectItem.h:49
&gt; +class ChromiumDataObjectItem : public RefCounted&lt;ChromiumDataObjectItem&gt; {

Should ChromiumDataObjectItem implement DataTransferItem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590199</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-03-28 11:34:10 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 134191 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134191&amp;action=review
&gt; 
&gt; Looks like your patch needs to be rebased.  Please make sure to have a green ews run on all the bots before landing.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; +        * platform/chromium/ChromiumDataObject.cpp:
&gt; 
&gt; Please mention here that this is replacing DataTransferItemListChromium.
&gt; 

Done.

&gt; &gt; Source/WebCore/platform/chromium/ChromiumDataObject.h:59
&gt; &gt; +    // DataTransferItemList support.
&gt; &gt; +    size_t length() const;
&gt; 
&gt; Should ChromiumDataObject implement DataTransferItemList?
&gt; 
&gt; &gt; Source/WebCore/platform/chromium/ChromiumDataObjectItem.h:49
&gt; &gt; +class ChromiumDataObjectItem : public RefCounted&lt;ChromiumDataObjectItem&gt; {
&gt; 
&gt; Should ChromiumDataObjectItem implement DataTransferItem?

We don&apos;t implement these interfaces because the signatures of some functions are a little different, plus we avoid virtual dispatch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590202</commentid>
    <comment_count>4</comment_count>
      <attachid>134352</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-03-28 11:37:05 -0700</bug_when>
    <thetext>Created attachment 134352
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590481</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-03-28 15:03:51 -0700</bug_when>
    <thetext>Committed r112448: &lt;http://trac.webkit.org/changeset/112448&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134191</attachid>
            <date>2012-03-27 18:31:50 -0700</date>
            <delta_ts>2012-03-28 11:37:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82407-20120327183148.patch</filename>
            <type>text/plain</type>
            <size>58953</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWE3Yzg1MzJiZmFkMGJi
NTkxM2UyYjkwZTQ3YWEyYmEyNTYxZmJjNS4uZWQyY2ExM2VjNjc5NmJkNWU3YWQyMTQ3ZDUxYmY0
ZjRiYTVhYzA1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEyLTAzLTI3ICBEYW5p
ZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWVy
Z2UgQ2hyb21pdW1EYXRhT2JqZWN0IGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI0MDcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSBDaHJv
bWl1bURhdGFPYmplY3QgaXMganVzdCBhIHZlcnkgdGhpbiB3cmFwcGVyIGZvciBEYXRhVHJhbnNm
ZXJJdGVtTGlzdENocm9taXVtIG5vdywKKyAgICAgICAgY29tYmluZSB0aGUgdHdvIGFuZCByZW1v
dmUgYSBsYXllciBvZiBpbmRpcmVjdGlvbi4KKworICAgICAgICBObyBmdW5jdGlvbmFsaXR5IGNo
YW5nZSwgc2hvdWxkIGJlIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlRnJv
bVBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpsZW5ndGgpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6Oml0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpkZWxldGVJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21p
dW1EYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9taXVtRGF0YU9iamVjdDo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRh
T2JqZWN0OjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6
c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnVybEFuZFRp
dGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0VVJMQW5kVGl0
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpodG1sQW5kQmFzZVVS
TCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEhUTUxBbmRCYXNl
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y29udGFpbnNGaWxl
bmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlbmFtZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjphZGRGaWxlbmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmFkZFNoYXJlZEJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0YU9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmZpbmRTdHJpbmdJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6aW50ZXJuYWxBZGRTdHJpbmdJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6aW50ZXJuYWxBZGRG
aWxlSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENocm9taXVtRGF0YU9iamVjdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0SXRlbS5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW0uY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWl1bURhdGFPYmplY3RJdGVtOjpjcmVhdGVGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9taXVtRGF0YU9iamVjdEl0ZW06OmNyZWF0ZUZyb21GaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdEl0ZW06OmNyZWF0ZUZyb21VUkwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Y3JlYXRlRnJvbUhUTUwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Y3JlYXRlRnJvbVNoYXJlZEJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RJdGVtOjpjcmVhdGVGcm9t
UGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RJdGVtOjpD
aHJvbWl1bURhdGFPYmplY3RJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdEl0ZW06OmdldEFzU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdEl0ZW06OmdldEFzRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmpl
Y3RJdGVtOjppbnRlcm5hbEdldEFzU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVt
RGF0YU9iamVjdEl0ZW06OmlzRmlsZW5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtRGF0YU9iamVjdEl0ZW0uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChDaHJvbWl1bURhdGFPYmplY3RJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9taXVtRGF0YU9iamVjdEl0ZW06OmtpbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0SXRlbTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURh
dGFPYmplY3RJdGVtOjpzaGFyZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1E
YXRhT2JqZWN0SXRlbTo6dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2Jq
ZWN0SXRlbTo6YmFzZVVSTCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJk
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmZpbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpoYXNEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjppdGVtcyk6CisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5o
OiBSZW1vdmVkLgorCiAyMDEyLTAzLTI3ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVuYW1lIG9wYXF1ZUNvbnRlbnRzUmVnaW9uKCkg
dG8gdmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCA5OGZmZjk0ZWFiMzFmMGIwMmFmOGU2ODI4NTVjNTIyZmNjZGY1MmUzLi40ZjRmZDhhYzYw
YTkwMGU2Y2UxZDFkMzZjNjZhODViNmM5ZDlmZDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAzLTI3ICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWVyZ2UgQ2hyb21pdW1EYXRhT2JqZWN0
IGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI0MDcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9XZWJEcmFnRGF0YS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkRyYWdEYXRhOjppdGVtcyk6CisKIDIwMTItMDMtMjcgIERhbmEgSmFuc2Vu
cyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZW5hbWUgb3Bh
cXVlQ29udGVudHNSZWdpb24oKSB0byB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggZGQxNDIxZTQ3OTI4ZWViMGY4MTIxNjBjYTBlZGVlMmM3Y2U4N2EyZi4u
ZDc4ZTE2ZDE1ZTliN2MwYmM2ZjVmMzllZTg3MDljYWM1MWVlZmZmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMzE5Nyw2ICszMTk3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jZi9TaGFyZWRC
dWZmZXJDRi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0
YU9iamVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0
YU9iamVjdC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFP
YmplY3RJdGVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1E
YXRhT2JqZWN0SXRlbS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2Fy
ZENocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtUG9zaXguY3BwJywKQEAgLTMyMDgsMTAgKzMyMTAsNiBAQAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2Nocm9taXVtL0NvbnRleHRNZW51Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9Db250ZXh0TWVudUl0ZW1DaHJvbWl1bS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0N1cnNvckNocm9taXVtLmNwcCcsCi0gICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmgnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0u
Y3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hy
b21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YVJlZi5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bU1hYy5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1EYXRhT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtRGF0YU9iamVjdC5jcHAKaW5kZXggNjc5ZjQyZDNmNmRhMTBlMDc2ZTEwYmU0OGUwNWU1YmFi
MDEwNDY2Ny4uMGExZjhiNjZkNjYzYmVhN2RlZGIwZjMxY2Y4NjIxZTRhOWU5NmM3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFP
YmplY3QuY3BwCkBAIC0zNCwyOCArMzQsMjYgQEAKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlw
ZXMuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkRhdGFUcmFuc2Zlckl0ZW0uaCIKLSNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9t
aXVtLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGVQbGFjZWhvbGRlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1
bT4gZmluZEl0ZW0oUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBpdGVt
TGlzdCwgY29uc3QgU3RyaW5nJiB0eXBlKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aXRlbUxpc3QtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGl0ZW1MaXN0LT5pdGVtKGkp
LT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZyAmJiBpdGVtTGlzdC0+aXRl
bShpKS0+dHlwZSgpID09IHR5cGUpCi0gICAgICAgICAgICByZXR1cm4gaXRlbUxpc3QtPml0ZW0o
aSk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCiBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9i
amVjdD4gQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGVGcm9tUGFzdGVib2FyZCgpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoRGF0YVRyYW5zZmVySXRlbUxp
c3RDaHJvbWl1bTo6Y3JlYXRlRnJvbVBhc3RlYm9hcmQoKSkpOworICAgIFJlZlB0cjxDaHJvbWl1
bURhdGFPYmplY3Q+IGRhdGFPYmplY3QgPSBjcmVhdGUoKTsKKyAgICB1aW50NjRfdCBzZXF1ZW5j
ZU51bWJlciA9IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkU2VxdWVuY2VOdW1iZXIoY3VycmVu
dFBhc3RlYm9hcmRCdWZmZXIoKSk7CisgICAgYm9vbCBpZ25vcmVkOworICAgIEhhc2hTZXQ8U3Ry
aW5nPiB0eXBlcyA9IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVz
KGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksICZpZ25vcmVkKTsKKyAgICBmb3IgKEhhc2hTZXQ8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSB0eXBlcy5l
bmQoKTsgKytpdCkKKyAgICAgICAgZGF0YU9iamVjdC0+bV9pdGVtTGlzdC5hcHBlbmQoQ2hyb21p
dW1EYXRhT2JqZWN0SXRlbTo6Y3JlYXRlRnJvbVBhc3RlYm9hcmQoKml0LCBzZXF1ZW5jZU51bWJl
cikpOworICAgIHJldHVybiBkYXRhT2JqZWN0LnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxD
aHJvbWl1bURhdGFPYmplY3Q+IENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKCkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdChEYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtOjpjcmVhdGUoKSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1E
YXRhT2JqZWN0KCkpOwogfQogCiBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gQ2hyb21p
dW1EYXRhT2JqZWN0Ojpjb3B5KCkgY29uc3QKQEAgLTYzLDMyICs2MSw2MCBAQCBQYXNzUmVmUHRy
PENocm9taXVtRGF0YU9iamVjdD4gQ2hyb21pdW1EYXRhT2JqZWN0Ojpjb3B5KCkgY29uc3QKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdCgqdGhpcykpOwogfQogCi1Q
YXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IENocm9taXVtRGF0YU9iamVj
dDo6aXRlbXMoKSBjb25zdAorc2l6ZV90IENocm9taXVtRGF0YU9iamVjdDo6bGVuZ3RoKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9pdGVtTGlzdDsKKyAgICByZXR1cm4gbV9pdGVtTGlzdC5zaXpl
KCk7Cit9CisKK1Bhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4gQ2hyb21pdW1EYXRh
T2JqZWN0OjppdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgaWYgKGluZGV4ID49IGxl
bmd0aCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9pdGVtTGlzdFtpbmRleF07
Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcg
aW5kZXgpCit7CisgICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9pdGVtTGlzdC5yZW1vdmUoaW5kZXgpOworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVj
dDo6Y2xlYXJBbGwoKQoreworICAgIG1faXRlbUxpc3QuY2xlYXIoKTsKK30KKwordm9pZCBDaHJv
bWl1bURhdGFPYmplY3Q6OmFkZChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdHlw
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFpbnRlcm5hbEFkZFN0cmluZ0l0ZW0o
Q2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Y3JlYXRlRnJvbVN0cmluZyh0eXBlLCBkYXRhKSkpCisg
ICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2Jq
ZWN0OjphZGQoUGFzc1JlZlB0cjxGaWxlPiBmaWxlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQoreworICAgIGlmICghZmlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pdGVt
TGlzdC5hcHBlbmQoQ2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Y3JlYXRlRnJvbUZpbGUoZmlsZSkp
OwogfQogCiB2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3QtPmxlbmd0aCgp
OyArK2kpIHsKLSAgICAgICAgaWYgKG1faXRlbUxpc3QtPml0ZW0oaSktPmtpbmQoKSA9PSBEYXRh
VHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nICYmIG1faXRlbUxpc3QtPml0ZW0oaSktPnR5cGUoKSA9
PSB0eXBlKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1MaXN0LnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChtX2l0ZW1MaXN0W2ldLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVy
SXRlbTo6a2luZFN0cmluZyAmJiBtX2l0ZW1MaXN0W2ldLT50eXBlKCkgPT0gdHlwZSkgewogICAg
ICAgICAgICAgLy8gUGVyIHRoZSBzcGVjLCB0eXBlIG11c3QgYmUgdW5pcXVlIGFtb25nIGFsbCBp
dGVtcyBvZiBraW5kICdzdHJpbmcnLgotICAgICAgICAgICAgbV9pdGVtTGlzdC0+ZGVsZXRlSXRl
bShpKTsKKyAgICAgICAgICAgIG1faXRlbUxpc3QucmVtb3ZlKGkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xl
YXJBbGwoKQotewotICAgIG1faXRlbUxpc3QtPmNsZWFyKCk7Ci19Ci0KIHZvaWQgQ2hyb21pdW1E
YXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKCkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1faXRlbUxpc3QtPmxlbmd0aCgpOyApIHsKLSAgICAgICAgaWYgKG1faXRlbUxpc3Qt
Pml0ZW0oaSktPmtpbmQoKSAhPSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSkgewotICAgICAg
ICAgICAgbV9pdGVtTGlzdC0+ZGVsZXRlSXRlbShpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1faXRlbUxpc3Quc2l6ZSgpOyApIHsKKyAgICAgICAgaWYgKG1faXRlbUxpc3RbaV0tPmtp
bmQoKSAhPSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSkgeworICAgICAgICAgICAgbV9pdGVt
TGlzdC5yZW1vdmUoaSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAg
ICArK2k7CkBAIC05OSwxMCArMTI1LDEwIEBAIEhhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bURhdGFP
YmplY3Q6OnR5cGVzKCkgY29uc3QKIHsKICAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKICAg
ICBib29sIGNvbnRhaW5zRmlsZXMgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1faXRlbUxpc3QtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1faXRlbUxpc3QtPml0
ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nKQotICAgICAgICAg
ICAgcmVzdWx0cy5hZGQobV9pdGVtTGlzdC0+aXRlbShpKS0+dHlwZSgpKTsKLSAgICAgICAgZWxz
ZSBpZiAobV9pdGVtTGlzdC0+aXRlbShpKS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06Omtp
bmRGaWxlKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtTGlzdC5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAobV9pdGVtTGlzdFtpXS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0
ZW06OmtpbmRTdHJpbmcpCisgICAgICAgICAgICByZXN1bHRzLmFkZChtX2l0ZW1MaXN0W2ldLT50
eXBlKCkpOworICAgICAgICBlbHNlIGlmIChtX2l0ZW1MaXN0W2ldLT5raW5kKCkgPT0gRGF0YVRy
YW5zZmVySXRlbTo6a2luZEZpbGUpCiAgICAgICAgICAgICBjb250YWluc0ZpbGVzID0gdHJ1ZTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTQs
OSArMTQwLDkgQEAgSGFzaFNldDxTdHJpbmc+IENocm9taXVtRGF0YU9iamVjdDo6dHlwZXMoKSBj
b25zdAogCiBTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3QtPmxl
bmd0aCgpOyArK2kpICB7Ci0gICAgICAgIGlmIChtX2l0ZW1MaXN0LT5pdGVtKGkpLT5raW5kKCkg
PT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZyAmJiBtX2l0ZW1MaXN0LT5pdGVtKGkpLT50
eXBlKCkgPT0gdHlwZSkKLSAgICAgICAgICAgIHJldHVybiBtX2l0ZW1MaXN0LT5pdGVtKGkpLT5p
bnRlcm5hbEdldEFzU3RyaW5nKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1M
aXN0LnNpemUoKTsgKytpKSAgeworICAgICAgICBpZiAobV9pdGVtTGlzdFtpXS0+a2luZCgpID09
IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcgJiYgbV9pdGVtTGlzdFtpXS0+dHlwZSgpID09
IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gbV9pdGVtTGlzdFtpXS0+aW50ZXJuYWxHZXRBc1N0
cmluZygpOwogICAgIH0KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CkBAIC0xMjQsMTMgKzE1MCwx
MyBAQCBTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSkgY29uc3QKIGJvb2wgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogewogICAgIGNsZWFyRGF0YSh0eXBlKTsKLSAgICBt
X2l0ZW1MaXN0LT5hZGQoZGF0YSwgdHlwZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgYWRk
KGRhdGEsIHR5cGUsIEFTU0VSVF9OT19FWENFUFRJT04pOwogICAgIHJldHVybiB0cnVlOwogfQog
CiB2b2lkIENocm9taXVtRGF0YU9iamVjdDo6dXJsQW5kVGl0bGUoU3RyaW5nJiB1cmwsIFN0cmlu
ZyogdGl0bGUpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4g
aXRlbSA9IGZpbmRJdGVtKG1faXRlbUxpc3QsIG1pbWVUeXBlVGV4dFVSSUxpc3QpOworICAgIFJl
ZlB0cjxDaHJvbWl1bURhdGFPYmplY3RJdGVtPiBpdGVtID0gZmluZFN0cmluZ0l0ZW0obWltZVR5
cGVUZXh0VVJJTGlzdCk7CiAgICAgaWYgKCFpdGVtKQogICAgICAgICByZXR1cm47CiAgICAgdXJs
ID0gY29udmVydFVSSUxpc3RUb1VSTChpdGVtLT5pbnRlcm5hbEdldEFzU3RyaW5nKCkpOwpAQCAt
MTQxLDEyICsxNjcsMTIgQEAgdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OnVybEFuZFRpdGxlKFN0
cmluZyYgdXJsLCBTdHJpbmcqIHRpdGxlKSBjb25zdAogdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6
OnNldFVSTEFuZFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQog
ewogICAgIGNsZWFyRGF0YShtaW1lVHlwZVRleHRVUklMaXN0KTsKLSAgICBtX2l0ZW1MaXN0LT5p
bnRlcm5hbEFkZFN0cmluZ0l0ZW0oRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9t
VVJMKHVybCwgdGl0bGUpKTsKKyAgICBpbnRlcm5hbEFkZFN0cmluZ0l0ZW0oQ2hyb21pdW1EYXRh
T2JqZWN0SXRlbTo6Y3JlYXRlRnJvbVVSTCh1cmwsIHRpdGxlKSk7CiB9CiAKIHZvaWQgQ2hyb21p
dW1EYXRhT2JqZWN0OjpodG1sQW5kQmFzZVVSTChTdHJpbmcmIGh0bWwsIEtVUkwmIGJhc2VVUkwp
IGNvbnN0CiB7Ci0gICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSA9IGZp
bmRJdGVtKG1faXRlbUxpc3QsIG1pbWVUeXBlVGV4dEhUTUwpOworICAgIFJlZlB0cjxDaHJvbWl1
bURhdGFPYmplY3RJdGVtPiBpdGVtID0gZmluZFN0cmluZ0l0ZW0obWltZVR5cGVUZXh0SFRNTCk7
CiAgICAgaWYgKCFpdGVtKQogICAgICAgICByZXR1cm47CiAgICAgaHRtbCA9IGl0ZW0tPmludGVy
bmFsR2V0QXNTdHJpbmcoKTsKQEAgLTE1NiwxMyArMTgyLDEzIEBAIHZvaWQgQ2hyb21pdW1EYXRh
T2JqZWN0OjpodG1sQW5kQmFzZVVSTChTdHJpbmcmIGh0bWwsIEtVUkwmIGJhc2VVUkwpIGNvbnN0
CiB2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0SFRNTEFuZEJhc2VVUkwoY29uc3QgU3RyaW5n
JiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKQogewogICAgIGNsZWFyRGF0YShtaW1lVHlwZVRl
eHRIVE1MKTsKLSAgICBtX2l0ZW1MaXN0LT5pbnRlcm5hbEFkZFN0cmluZ0l0ZW0oRGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tSFRNTChodG1sLCBiYXNlVVJMKSk7CisgICAgaW50
ZXJuYWxBZGRTdHJpbmdJdGVtKENocm9taXVtRGF0YU9iamVjdEl0ZW06OmNyZWF0ZUZyb21IVE1M
KGh0bWwsIGJhc2VVUkwpKTsKIH0KIAogYm9vbCBDaHJvbWl1bURhdGFPYmplY3Q6OmNvbnRhaW5z
RmlsZW5hbWVzKCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxp
c3QtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgIGlmIChtX2l0ZW1MaXN0LT5pdGVtKGkpLT5pc0Zp
bGVuYW1lKCkpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1MaXN0LnNpemUoKTsg
KytpKQorICAgICAgICBpZiAobV9pdGVtTGlzdFtpXS0+aXNGaWxlbmFtZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTcwLDI0ICsxOTYsMjMg
QEAgYm9vbCBDaHJvbWl1bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3QKIFZl
Y3RvcjxTdHJpbmc+IENocm9taXVtRGF0YU9iamVjdDo6ZmlsZW5hbWVzKCkgY29uc3QKIHsKICAg
ICBWZWN0b3I8U3RyaW5nPiByZXN1bHRzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9p
dGVtTGlzdC0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgaWYgKG1faXRlbUxpc3QtPml0ZW0oaSkt
PmlzRmlsZW5hbWUoKSkKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHN0YXRpY19jYXN0PEZp
bGUqPihtX2l0ZW1MaXN0LT5pdGVtKGkpLT5nZXRBc0ZpbGUoKS5nZXQoKSktPnBhdGgoKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1MaXN0LnNpemUoKTsgKytpKQorICAgICAg
ICBpZiAobV9pdGVtTGlzdFtpXS0+aXNGaWxlbmFtZSgpKQorICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQoc3RhdGljX2Nhc3Q8RmlsZSo+KG1faXRlbUxpc3RbaV0tPmdldEFzRmlsZSgpLmdldCgp
KS0+cGF0aCgpKTsKICAgICByZXR1cm4gcmVzdWx0czsKIH0KIAogdm9pZCBDaHJvbWl1bURhdGFP
YmplY3Q6OmFkZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiB7Ci0gICAgbV9pdGVt
TGlzdC0+aW50ZXJuYWxBZGRGaWxlSXRlbShEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0
ZUZyb21GaWxlKEZpbGU6OmNyZWF0ZShmaWxlbmFtZSkpKTsKKyAgICBpbnRlcm5hbEFkZEZpbGVJ
dGVtKENocm9taXVtRGF0YU9iamVjdEl0ZW06OmNyZWF0ZUZyb21GaWxlKEZpbGU6OmNyZWF0ZShm
aWxlbmFtZSkpKTsKIH0KIAogdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmFkZFNoYXJlZEJ1ZmZl
cihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCiB7
Ci0gICAgbV9pdGVtTGlzdC0+aW50ZXJuYWxBZGRGaWxlSXRlbShEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW06OmNyZWF0ZUZyb21TaGFyZWRCdWZmZXIobmFtZSwgYnVmZmVyKSk7CisgICAgaW50ZXJu
YWxBZGRGaWxlSXRlbShDaHJvbWl1bURhdGFPYmplY3RJdGVtOjpjcmVhdGVGcm9tU2hhcmVkQnVm
ZmVyKG5hbWUsIGJ1ZmZlcikpOwogfQogCi1DaHJvbWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0
YU9iamVjdChQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGl0ZW1MaXN0
KQotICAgIDogbV9pdGVtTGlzdChpdGVtTGlzdCkKK0Nocm9taXVtRGF0YU9iamVjdDo6Q2hyb21p
dW1EYXRhT2JqZWN0KCkKIHsKIH0KIApAQCAtMTk3LDQgKzIyMiwzMCBAQCBDaHJvbWl1bURhdGFP
YmplY3Q6OkNocm9taXVtRGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmIG90aGVy
KQogewogfQogCitQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IENocm9taXVtRGF0
YU9iamVjdDo6ZmluZFN0cmluZ0l0ZW0oY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtTGlzdC5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAobV9pdGVtTGlzdFtpXS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJp
bmcgJiYgbV9pdGVtTGlzdFtpXS0+dHlwZSgpID09IHR5cGUpCisgICAgICAgICAgICByZXR1cm4g
bV9pdGVtTGlzdFtpXTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgQ2hyb21pdW1E
YXRhT2JqZWN0OjppbnRlcm5hbEFkZFN0cmluZ0l0ZW0oUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFP
YmplY3RJdGVtPiBpdGVtKQoreworICAgIEFTU0VSVChpdGVtLT5raW5kKCkgPT0gRGF0YVRyYW5z
ZmVySXRlbTo6a2luZFN0cmluZyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1M
aXN0LnNpemUoKTsgKytpKQorICAgICAgICBpZiAobV9pdGVtTGlzdFtpXS0+a2luZCgpID09IERh
dGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcgJiYgbV9pdGVtTGlzdFtpXS0+dHlwZSgpID09IGl0
ZW0tPnR5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXRlbUxpc3Qu
YXBwZW5kKGl0ZW0pOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENocm9taXVtRGF0YU9i
amVjdDo6aW50ZXJuYWxBZGRGaWxlSXRlbShQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0
ZW0+IGl0ZW0pCit7CisgICAgQVNTRVJUKGl0ZW0tPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVt
OjpraW5kRmlsZSk7CisgICAgbV9pdGVtTGlzdC5hcHBlbmQoaXRlbSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0Nocm9taXVtRGF0YU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKaW5kZXggNWExYzQyZTQwYTIwYTRlMzE0ZmU5ZTY1NzYx
NTJmNDM4NGY2N2VjZS4uNDQxOTgyOGE1MjQ4ZWIwMGY1ODVkYjMzZGRhZGViZDQ2NDU0NTIyMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1E
YXRhT2JqZWN0LmgKQEAgLTMxLDcgKzMxLDcgQEAKICNpZm5kZWYgQ2hyb21pdW1EYXRhT2JqZWN0
X2gKICNkZWZpbmUgQ2hyb21pdW1EYXRhT2JqZWN0X2gKIAotI2luY2x1ZGUgIkRhdGFUcmFuc2Zl
ckl0ZW1MaXN0Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3RJdGVtLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQzLDYgKzQzLDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgS1VSTDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAordHlwZWRlZiBpbnQgRXhj
ZXB0aW9uQ29kZTsKKwogLy8gQSBkYXRhIG9iamVjdCBmb3IgaG9sZGluZyBkYXRhIHRoYXQgd291
bGQgYmUgaW4gYSBjbGlwYm9hcmQgb3IgbW92ZWQKIC8vIGR1cmluZyBhIGRyYWctbi1kcm9wIG9w
ZXJhdGlvbi4gIFRoaXMgaXMgdGhlIGRhdGEgdGhhdCBXZWJDb3JlIGlzIGF3YXJlCiAvLyBvZiBh
bmQgaXMgbm90IHNwZWNpZmljIHRvIGEgcGxhdGZvcm0uCkBAIC01MywxMCArNTUsMTcgQEAgcHVi
bGljOgogCiAgICAgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGNvcHkoKSBjb25zdDsK
IAotICAgIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gaXRlbXMoKSBj
b25zdDsKKyAgICAvLyBEYXRhVHJhbnNmZXJJdGVtTGlzdCBzdXBwb3J0LgorICAgIHNpemVfdCBs
ZW5ndGgoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGl0
ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBWOERhdGFU
cmFuc2Zlckl0ZW1MaXN0OjppbmRleGVkUHJvcGVydHlEZWxldGVyIHRvIGdldCB0aGlzIGNhbGxl
ZC4KKyAgICB2b2lkIGRlbGV0ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgdm9pZCBj
bGVhckFsbCgpOworICAgIHZvaWQgYWRkKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5n
JiB0eXBlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBhZGQoUGFzc1JlZlB0cjxGaWxlPiwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCisgICAgLy8gV2ViQ29yZSBoZWxwZXJzLgogICAg
IHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7Ci0gICAgdm9pZCBjbGVhckFsbCgp
OwogICAgIHZvaWQgY2xlYXJBbGxFeGNlcHRGaWxlcygpOwogCiAgICAgSGFzaFNldDxTdHJpbmc+
IHR5cGVzKCkgY29uc3Q7CkBAIC03NywxMCArODYsMTQgQEAgcHVibGljOgogICAgIHZvaWQgYWRk
U2hhcmVkQnVmZmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
KTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDaHJvbWl1bURhdGFPYmplY3QoUGFzc1JlZlB0
cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPik7CisgICAgQ2hyb21pdW1EYXRhT2JqZWN0
KCk7CiAgICAgZXhwbGljaXQgQ2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9i
amVjdCYpOwogCi0gICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IG1faXRl
bUxpc3Q7CisgICAgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RJdGVtPiBmaW5kU3RyaW5n
SXRlbShjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0OworICAgIGJvb2wgaW50ZXJuYWxBZGRTdHJp
bmdJdGVtKFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4pOworICAgIHZvaWQgaW50
ZXJuYWxBZGRGaWxlSXRlbShQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+KTsKKwor
ICAgIFZlY3RvcjxSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4gPiBtX2l0ZW1MaXN0Owog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0SXRlbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RJdGVtLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iNGRkYzhjZjE4ZjgxNjMwYmRhODYwNmE4OWU3NTU0OWZhOGRiZjhlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0SXRlbS5jcHAKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ2hyb21pdW1EYXRhT2JqZWN0SXRlbS5oIgorCisjaWYgRU5BQkxFKERBVEFfVFJBTlNGRVJf
SVRFTVMpCisKKyNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisjaW5j
bHVkZSAiQ2xpcGJvYXJkQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMu
aCIKKyNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRh
dGFUcmFuc2Zlckl0ZW0uaCIKKyNpbmNsdWRlICJGaWxlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dXBwb3J0LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiU3RyaW5nQ2Fs
bGJhY2suaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPENocm9taXVtRGF0
YU9iamVjdEl0ZW0+IENocm9taXVtRGF0YU9iamVjdEl0ZW06OmNyZWF0ZUZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCit7CisgICAgUmVmUHRyPENocm9t
aXVtRGF0YU9iamVjdEl0ZW0+IGl0ZW0gPSBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0
SXRlbShEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nLCB0eXBlKSk7CisgICAgaXRlbS0+bV9k
YXRhID0gZGF0YTsKKyAgICByZXR1cm4gaXRlbS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8
Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4gQ2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Y3JlYXRlRnJv
bUZpbGUoUGFzc1JlZlB0cjxGaWxlPiBmaWxlKQoreworICAgIFJlZlB0cjxDaHJvbWl1bURhdGFP
YmplY3RJdGVtPiBpdGVtID0gYWRvcHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdEl0ZW0oRGF0
YVRyYW5zZmVySXRlbTo6a2luZEZpbGUsIGZpbGUtPnR5cGUoKSkpOworICAgIGl0ZW0tPm1fZmls
ZSA9IGZpbGU7CisgICAgcmV0dXJuIGl0ZW0ucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPENo
cm9taXVtRGF0YU9iamVjdEl0ZW0+IENocm9taXVtRGF0YU9iamVjdEl0ZW06OmNyZWF0ZUZyb21V
UkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAgUmVmUHRy
PENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGl0ZW0gPSBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRh
T2JqZWN0SXRlbShEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nLCBtaW1lVHlwZVRleHRVUklM
aXN0KSk7CisgICAgaXRlbS0+bV9kYXRhID0gdXJsOworICAgIGl0ZW0tPm1fdGl0bGUgPSB0aXRs
ZTsKKyAgICByZXR1cm4gaXRlbS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q2hyb21pdW1E
YXRhT2JqZWN0SXRlbT4gQ2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Y3JlYXRlRnJvbUhUTUwoY29u
c3QgU3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKQoreworICAgIFJlZlB0cjxDaHJv
bWl1bURhdGFPYmplY3RJdGVtPiBpdGVtID0gYWRvcHRSZWYobmV3IENocm9taXVtRGF0YU9iamVj
dEl0ZW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZywgbWltZVR5cGVUZXh0SFRNTCkpOwor
ICAgIGl0ZW0tPm1fZGF0YSA9IGh0bWw7CisgICAgaXRlbS0+bV9iYXNlVVJMID0gYmFzZVVSTDsK
KyAgICByZXR1cm4gaXRlbS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q2hyb21pdW1EYXRh
T2JqZWN0SXRlbT4gQ2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Y3JlYXRlRnJvbVNoYXJlZEJ1ZmZl
cihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7
CisgICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGl0ZW0gPSBhZG9wdFJlZihuZXcg
Q2hyb21pdW1EYXRhT2JqZWN0SXRlbShEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSwgU3RyaW5n
KCkpKTsKKyAgICBpdGVtLT5tX3NoYXJlZEJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBpdGVtLT5tX3Rp
dGxlID0gbmFtZTsKKyAgICByZXR1cm4gaXRlbS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8
Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4gQ2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Y3JlYXRlRnJv
bVBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiB0eXBlLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJlcikK
K3sKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZUltYWdlUG5nKQorICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdEl0ZW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZEZp
bGUsIHR5cGUsIHNlcXVlbmNlTnVtYmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJv
bWl1bURhdGFPYmplY3RJdGVtKERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcsIHR5cGUsIHNl
cXVlbmNlTnVtYmVyKSk7Cit9CisKK0Nocm9taXVtRGF0YU9iamVjdEl0ZW06OkNocm9taXVtRGF0
YU9iamVjdEl0ZW0oY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAg
OiBtX3NvdXJjZShJbnRlcm5hbFNvdXJjZSkKKyAgICAsIG1fa2luZChraW5kKQorICAgICwgbV90
eXBlKHR5cGUpCit7Cit9CisKK0Nocm9taXVtRGF0YU9iamVjdEl0ZW06OkNocm9taXVtRGF0YU9i
amVjdEl0ZW0oY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIHR5cGUsIHVpbnQ2NF90
IHNlcXVlbmNlTnVtYmVyKQorICAgIDogbV9zb3VyY2UoUGFzdGVib2FyZFNvdXJjZSkKKyAgICAs
IG1fa2luZChraW5kKQorICAgICwgbV90eXBlKHR5cGUpCisgICAgLCBtX3NlcXVlbmNlTnVtYmVy
KHNlcXVlbmNlTnVtYmVyKQoreworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVjdEl0ZW06Omdl
dEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghY2FsbGJhY2sgfHwga2lu
ZCgpICE9IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxiYWNrKGNvbnRleHQsIGludGVybmFsR2V0QXNTdHJp
bmcoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYj4gQ2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Z2V0
QXNGaWxlKCkgY29uc3QKK3sKKyAgICBpZiAoa2luZCgpICE9IERhdGFUcmFuc2Zlckl0ZW06Omtp
bmRGaWxlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChtX3NvdXJjZSA9PSBJbnRlcm5h
bFNvdXJjZSkgeworICAgICAgICBpZiAobV9maWxlKQorICAgICAgICAgICAgcmV0dXJuIG1fZmls
ZTsKKyAgICAgICAgQVNTRVJUKG1fc2hhcmVkQnVmZmVyKTsKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgY29kZSBpcyBjdXJyZW50bHkgaW1wb3NzaWJsZS0td2UgbmV2ZXIgcG9wdWxhdGUgbV9zaGFy
ZWRCdWZmZXIgd2hlbiBkcmFnZ2luZworICAgICAgICAvLyBpbi4gQXQgc29tZSBwb2ludCB0aG91
Z2gsIHdlIG1heSBuZWVkIHRvIHN1cHBvcnQgY29ycmVjdGx5IGNvbnZlcnRpbmcgYSBzaGFyZWQg
YnVmZmVyCisgICAgICAgIC8vIGludG8gYSBmaWxlLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBBU1NFUlQobV9zb3VyY2UgPT0gUGFzdGVib2FyZFNvdXJjZSk7CisgICAgaWYgKHR5
cGUoKSA9PSBtaW1lVHlwZUltYWdlUG5nKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHBy
ZXR0eSBpbmVmZmljaWVudC4gV2UgY29weSB0aGUgZGF0YSBmcm9tIHRoZSBicm93c2VyCisgICAg
ICAgIC8vIHRvIHRoZSByZW5kZXJlci4gV2UgdGhlbiBwbGFjZSBpdCBpbiBhIGJsb2IgaW4gV2Vi
S2l0LCB3aGljaAorICAgICAgICAvLyByZWdpc3RlcnMgaXQgYW5kIGNvcGllcyBpdCAqYmFjayog
dG8gdGhlIGJyb3dzZXIuIFdoZW4gYSBjb25zdW1lcgorICAgICAgICAvLyB3YW50cyB0byByZWFk
IHRoZSBkYXRhLCB3ZSB0aGVuIGNvcHkgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSByZW5kZXJlci4K
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4MTA3
IGhhcyBiZWVuIGZpbGVkIHRvIHRyYWNrCisgICAgICAgIC8vIGltcHJvdmVtZW50cyB0byB0aGlz
IGNvZGUgKGluIHBhcnRpY3VsYXIsIGFkZCBhIHJlZ2lzdGVyQ2xpcGJvYXJkQmxvYgorICAgICAg
ICAvLyBtZXRob2QgdG8gdGhlIGJsb2IgcmVnaXN0cnk7IHRoYXQgd2F5IHRoZSBkYXRhIGlzIG9u
bHkgY29waWVkIG92ZXIKKyAgICAgICAgLy8gaW50byB0aGUgcmVuZGVyZXIgd2hlbiBpdCdzIGFj
dHVhbGx5IHJlYWQsIG5vdCB3aGVuIHRoZSBibG9iIGlzCisgICAgICAgIC8vIGluaXRpYWxseSBj
b25zdHJ1Y3RlZCkuCisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBQbGF0Zm9y
bVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRJbWFnZShQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRC
dWZmZXIpOworICAgICAgICBSZWZQdHI8UmF3RGF0YT4gcmF3RGF0YSA9IFJhd0RhdGE6OmNyZWF0
ZSgpOworICAgICAgICByYXdEYXRhLT5tdXRhYmxlRGF0YSgpLT5hcHBlbmQoZGF0YS0+ZGF0YSgp
LCBkYXRhLT5zaXplKCkpOworICAgICAgICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxv
YkRhdGE6OmNyZWF0ZSgpOworICAgICAgICBibG9iRGF0YS0+YXBwZW5kRGF0YShyYXdEYXRhLCAw
LCAtMSk7CisgICAgICAgIGJsb2JEYXRhLT5zZXRDb250ZW50VHlwZShtaW1lVHlwZUltYWdlUG5n
KTsKKyAgICAgICAgcmV0dXJuIEJsb2I6OmNyZWF0ZShibG9iRGF0YS5yZWxlYXNlKCksIGRhdGEt
PnNpemUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBDaHJvbWl1bURh
dGFPYmplY3RJdGVtOjppbnRlcm5hbEdldEFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9raW5kID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpOworCisgICAgaWYgKG1fc291
cmNlID09IEludGVybmFsU291cmNlKQorICAgICAgICByZXR1cm4gbV9kYXRhOworCisgICAgQVNT
RVJUKG1fc291cmNlID09IFBhc3RlYm9hcmRTb3VyY2UpOworCisgICAgU3RyaW5nIGRhdGE7Cisg
ICAgLy8gVGhpcyBpcyB1Z2x5IGJ1dCB0aGVyZSdzIG5vIHJlYWwgYWx0ZXJuYXRpdmUuCisgICAg
aWYgKG1fdHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikKKyAgICAgICAgZGF0YSA9IFBsYXRmb3Jt
U3VwcG9ydDo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigp
KTsKKyAgICBlbHNlIGlmIChtX3R5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgeworICAgICAgICBL
VVJMIGlnbm9yZWRTb3VyY2VVUkw7CisgICAgICAgIHVuc2lnbmVkIGlnbm9yZWQ7CisgICAgICAg
IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoY3VycmVudFBhc3RlYm9hcmRCdWZm
ZXIoKSwgJmRhdGEsICZpZ25vcmVkU291cmNlVVJMLCAmaWdub3JlZCwgJmlnbm9yZWQpOworICAg
IH0gZWxzZQorICAgICAgICBkYXRhID0gUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkQ3Vz
dG9tRGF0YShjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLCBtX3R5cGUpOworCisgICAgcmV0dXJu
IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkU2VxdWVuY2VOdW1iZXIoY3VycmVudFBhc3RlYm9h
cmRCdWZmZXIoKSkgPT0gbV9zZXF1ZW5jZU51bWJlciA/IGRhdGEgOiBTdHJpbmcoKTsKK30KKwor
Ym9vbCBDaHJvbWl1bURhdGFPYmplY3RJdGVtOjppc0ZpbGVuYW1lKCkgY29uc3QKK3sKKyAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMjYxOiBX
aGVuIHdlIHByb3Blcmx5IHN1cHBvcnQgRmlsZSBkcmFnb3V0LAorICAgIC8vIHdlJ2xsIG5lZWQg
dG8gbWFrZSBzdXJlIHRoaXMgd29ya3MgYXMgZXhwZWN0ZWQgZm9yIERyYWdEYXRhQ2hyb21pdW0u
CisgICAgcmV0dXJuIG1fa2luZCA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSAmJiBtX2Zp
bGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShEQVRB
X1RSQU5TRkVSX0lURU1TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0SXRlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0SXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0OWE4MmYzOGE4
OWU4YzdlYTcyZDVmNzEzMWExNTI0NTA0NmZhNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RJdGVtLmgKQEAgLTAs
MCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ2hyb21pdW1EYXRhT2JqZWN0SXRlbV9oIAorI2RlZmluZSBDaHJv
bWl1bURhdGFPYmplY3RJdGVtX2gKKworI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQor
CisjaW5jbHVkZSAiRmlsZS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBCbG9iOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNz
IFN0cmluZ0NhbGxiYWNrOworCitjbGFzcyBDaHJvbWl1bURhdGFPYmplY3RJdGVtIDogcHVibGlj
IFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGNyZWF0ZUZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGNyZWF0ZUZyb21GaWxlKFBhc3NSZWZQdHI8Rmls
ZT4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGNyZWF0
ZUZyb21VUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGNyZWF0ZUZyb21IVE1MKGNv
bnN0IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFzZVVSTCk7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4gY3JlYXRlRnJvbVNoYXJlZEJ1ZmZlcihjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGNyZWF0ZUZyb21QYXN0ZWJvYXJk
KGNvbnN0IFN0cmluZyYgdHlwZSwgdWludDY0X3Qgc2VxdWVuY2VOdW1iZXIpOworCisgICAgU3Ry
aW5nIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBTdHJpbmcgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHZvaWQgZ2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxT
dHJpbmdDYWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsKKyAgICBQYXNz
UmVmUHRyPEJsb2I+IGdldEFzRmlsZSgpIGNvbnN0OworCisgICAgLy8gVXNlZCB0byBzdXBwb3J0
IGxlZ2FjeSBEYXRhVHJhbnNmZXIgQVBJcyBhbmQgcmVuZGVyZXItPmJyb3dzZXIgc2VyaWFsaXph
dGlvbi4KKyAgICBTdHJpbmcgaW50ZXJuYWxHZXRBc1N0cmluZygpIGNvbnN0OworICAgIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBzaGFyZWRCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX3NoYXJl
ZEJ1ZmZlcjsgfQorICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGl0bGU7IH0K
KyAgICBLVVJMIGJhc2VVUkwoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VVUkw7IH0KKyAgICBib29s
IGlzRmlsZW5hbWUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBlbnVtIERhdGFTb3VyY2Ugewor
ICAgICAgICBQYXN0ZWJvYXJkU291cmNlLAorICAgICAgICBJbnRlcm5hbFNvdXJjZSwKKyAgICB9
OworCisgICAgQ2hyb21pdW1EYXRhT2JqZWN0SXRlbShjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0
IFN0cmluZyYgdHlwZSk7CisgICAgQ2hyb21pdW1EYXRhT2JqZWN0SXRlbShjb25zdCBTdHJpbmcm
IGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSwgdWludDY0X3Qgc2VxdWVuY2VOdW1iZXIpOworCisg
ICAgRGF0YVNvdXJjZSBtX3NvdXJjZTsKKyAgICBTdHJpbmcgbV9raW5kOworICAgIFN0cmluZyBt
X3R5cGU7CisKKyAgICBTdHJpbmcgbV9kYXRhOworICAgIFJlZlB0cjxGaWxlPiBtX2ZpbGU7Cisg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9zaGFyZWRCdWZmZXI7CisgICAgLy8gT3B0aW9uYWwg
bWV0YWRhdGEuIEN1cnJlbnRseSB1c2VkIGZvciBVUkwsIEhUTUwsIGFuZCBkcmFnZ2luZyBmaWxl
cyBpbi4KKyAgICBTdHJpbmcgbV90aXRsZTsKKyAgICBLVVJMIG1fYmFzZVVSTDsKKworICAgIHVp
bnQ2NF90IG1fc2VxdWVuY2VOdW1iZXI7IC8vIE9ubHkgdmFsaWQgd2hlbiBtX3NvdXJjZSA9PSBQ
YXN0ZWJvYXJkU291cmNlCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKKworI2VuZGlmIC8vIENocm9taXVtRGF0YU9i
amVjdEl0ZW1faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW0uY3BwCmluZGV4IDMxMjFlYTgwOTE2ZjRiNmQzNDU0ODhkZDQ1ZjM5
YzAwZWNkNDE4MTEuLjE4MjFjODhiZDZmYTg3ZjUyNWI3ZWRjMjhmMTA1NmNiYmU5YzY4NmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRD
aHJvbWl1bS5jcHAKQEAgLTI5LDEyICsyOSwxMSBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2Uu
aCIKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKKyNpbmNsdWRlICJDaHJvbWl1bURh
dGFPYmplY3RJdGVtLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVk
ZSAiQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCIKICNpbmNsdWRlICJEYXRhVHJhbnNmZXJJ
dGVtLmgiCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmgiCiAjaW5jbHVkZSAi
RGF0YVRyYW5zZmVySXRlbUxpc3QuaCIKLSNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdENo
cm9taXVtLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEcmFnRGF0YS5oIgog
I2luY2x1ZGUgIkVsZW1lbnQuaCIKQEAgLTY0LDcgKzYzLDcgQEAgbmFtZXNwYWNlIHsKIGNsYXNz
IERhdGFUcmFuc2Zlckl0ZW1MaXN0UG9saWN5V3JhcHBlciA6IHB1YmxpYyBEYXRhVHJhbnNmZXJJ
dGVtTGlzdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRl
bUxpc3RQb2xpY3lXcmFwcGVyPiBjcmVhdGUoCi0gICAgICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJk
Q2hyb21pdW0+LCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+KTsKKyAg
ICAgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NSZWZQdHI8Q2hyb21pdW1E
YXRhT2JqZWN0Pik7CiAKICAgICB2aXJ0dWFsIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gaXRlbSh1bnNpZ25lZCBsb25nIGlu
ZGV4KTsKQEAgLTc0LDE2ICs3MywxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZChQ
YXNzUmVmUHRyPEZpbGU+KTsKIAogcHJpdmF0ZToKLSAgICBEYXRhVHJhbnNmZXJJdGVtTGlzdFBv
bGljeVdyYXBwZXIoUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4pOworICAgIERhdGFUcmFuc2Zlckl0ZW1MaXN0UG9s
aWN5V3JhcHBlcihQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiwgUGFzc1JlZlB0cjxDaHJv
bWl1bURhdGFPYmplY3Q+KTsKIAogICAgIFJlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gbV9jbGlw
Ym9hcmQ7Ci0gICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IG1fbGlzdDsK
KyAgICBSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBtX2RhdGFPYmplY3Q7CiB9OwogCiBjbGFz
cyBEYXRhVHJhbnNmZXJJdGVtUG9saWN5V3JhcHBlciA6IHB1YmxpYyBEYXRhVHJhbnNmZXJJdGVt
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtUG9saWN5
V3JhcHBlcj4gY3JlYXRlKAotICAgICAgICBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiwg
UGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+KTsKKyAgICAgICAgUGFzc1JlZlB0
cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4p
OwogCiAgICAgdmlydHVhbCBTdHJpbmcga2luZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5n
IHR5cGUoKSBjb25zdDsKQEAgLTkyLDE0ICs5MSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEJsb2I+IGdldEFzRmlsZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIERhdGFU
cmFuc2Zlckl0ZW1Qb2xpY3lXcmFwcGVyKFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+LCBQ
YXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4pOworICAgIERhdGFUcmFuc2Zlckl0
ZW1Qb2xpY3lXcmFwcGVyKFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+LCBQYXNzUmVmUHRy
PENocm9taXVtRGF0YU9iamVjdEl0ZW0+KTsKIAogICAgIFJlZlB0cjxDbGlwYm9hcmRDaHJvbWl1
bT4gbV9jbGlwYm9hcmQ7Ci0gICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gbV9p
dGVtOworICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RJdGVtPiBtX2l0ZW07CiB9OwogCiBQ
YXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0UG9saWN5V3JhcHBlcj4gRGF0YVRyYW5zZmVy
SXRlbUxpc3RQb2xpY3lXcmFwcGVyOjpjcmVhdGUoCi0gICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRD
aHJvbWl1bT4gY2xpcGJvYXJkLCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21p
dW0+IGxpc3QpCisgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gY2xpcGJvYXJkLCBQ
YXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gbGlzdCkKIHsKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1MaXN0UG9saWN5V3JhcHBlcihjbGlwYm9hcmQsIGxpc3Qp
KTsKIH0KQEAgLTEwOCwxNCArMTA3LDE0IEBAIHNpemVfdCBEYXRhVHJhbnNmZXJJdGVtTGlzdFBv
bGljeVdyYXBwZXI6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKG1fY2xpcGJvYXJkLT5wb2xp
Y3koKSA9PSBDbGlwYm9hcmROdW1iKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9s
aXN0LT5sZW5ndGgoKTsKKyAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5sZW5ndGgoKTsKIH0KIAog
UGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiBEYXRhVHJhbnNmZXJJdGVtTGlzdFBvbGljeVdy
YXBwZXI6Oml0ZW0odW5zaWduZWQgbG9uZyBpbmRleCkKIHsKICAgICBpZiAobV9jbGlwYm9hcmQt
PnBvbGljeSgpID09IENsaXBib2FyZE51bWIpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0
cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0gPSBtX2xpc3QtPml0ZW0oaW5kZXgpOwor
ICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RJdGVtPiBpdGVtID0gbV9kYXRhT2JqZWN0LT5p
dGVtKGluZGV4KTsKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVy
biBEYXRhVHJhbnNmZXJJdGVtUG9saWN5V3JhcHBlcjo6Y3JlYXRlKG1fY2xpcGJvYXJkLCBpdGVt
KTsKQEAgLTEyNywzOSArMTI2LDM5IEBAIHZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3RQb2xpY3lX
cmFwcGVyOjpkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvCiAgICAgICAg
IGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9s
aXN0LT5kZWxldGVJdGVtKGluZGV4KTsKKyAgICBtX2RhdGFPYmplY3QtPmRlbGV0ZUl0ZW0oaW5k
ZXgpOwogfQogCiB2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0UG9saWN5V3JhcHBlcjo6Y2xlYXIo
KQogewogICAgIGlmIChtX2NsaXBib2FyZC0+cG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUp
CiAgICAgICAgIHJldHVybjsKLSAgICBtX2xpc3QtPmNsZWFyKCk7CisgICAgbV9kYXRhT2JqZWN0
LT5jbGVhckFsbCgpOwogfQogCiB2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0UG9saWN5V3JhcHBl
cjo6YWRkKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBpZiAobV9jbGlwYm9hcmQtPnBvbGljeSgpICE9IENsaXBib2FyZFdy
aXRhYmxlKQogICAgICAgICByZXR1cm47Ci0gICAgbV9saXN0LT5hZGQoZGF0YSwgdHlwZSwgZWMp
OworICAgIG1fZGF0YU9iamVjdC0+YWRkKGRhdGEsIHR5cGUsIGVjKTsKIH0KIAogdm9pZCBEYXRh
VHJhbnNmZXJJdGVtTGlzdFBvbGljeVdyYXBwZXI6OmFkZChQYXNzUmVmUHRyPEZpbGU+IGZpbGUp
CiB7CiAgICAgaWYgKG1fY2xpcGJvYXJkLT5wb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIG1fbGlzdC0+YWRkKGZpbGUsIG1fY2xpcGJvYXJkLT5mcmFt
ZSgpLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIG1fZGF0YU9i
amVjdC0+YWRkKGZpbGUsIG1fY2xpcGJvYXJkLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpOwogfQogCiBEYXRhVHJhbnNmZXJJdGVtTGlzdFBvbGljeVdyYXBw
ZXI6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0UG9saWN5V3JhcHBlcigKLSAgICBQYXNzUmVmUHRyPENs
aXBib2FyZENocm9taXVtPiBjbGlwYm9hcmQsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxp
c3RDaHJvbWl1bT4gbGlzdCkKKyAgICBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBjbGlw
Ym9hcmQsIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBkYXRhT2JqZWN0KQogICAgIDog
bV9jbGlwYm9hcmQoY2xpcGJvYXJkKQotICAgICwgbV9saXN0KGxpc3QpCisgICAgLCBtX2RhdGFP
YmplY3QoZGF0YU9iamVjdCkKIHsKIH0KIAogUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtUG9s
aWN5V3JhcHBlcj4gRGF0YVRyYW5zZmVySXRlbVBvbGljeVdyYXBwZXI6OmNyZWF0ZSgKLSAgICBQ
YXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBjbGlwYm9hcmQsIFBhc3NSZWZQdHI8RGF0YVRy
YW5zZmVySXRlbUNocm9taXVtPiBpdGVtKQorICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21p
dW0+IGNsaXBib2FyZCwgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RJdGVtPiBpdGVtKQog
ewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbVBvbGljeVdyYXBwZXIo
Y2xpcGJvYXJkLCBpdGVtKSk7CiB9CkBAIC0xOTUsNyArMTk0LDcgQEAgUGFzc1JlZlB0cjxCbG9i
PiBEYXRhVHJhbnNmZXJJdGVtUG9saWN5V3JhcHBlcjo6Z2V0QXNGaWxlKCkgY29uc3QKIH0KIAog
RGF0YVRyYW5zZmVySXRlbVBvbGljeVdyYXBwZXI6OkRhdGFUcmFuc2Zlckl0ZW1Qb2xpY3lXcmFw
cGVyKAotICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IGNsaXBib2FyZCwgUGFzc1Jl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0pCisgICAgUGFzc1JlZlB0cjxDbGlw
Ym9hcmRDaHJvbWl1bT4gY2xpcGJvYXJkLCBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0
ZW0+IGl0ZW0pCiAgICAgOiBtX2NsaXBib2FyZChjbGlwYm9hcmQpCiAgICAgLCBtX2l0ZW0oaXRl
bSkKIHsKQEAgLTMyMCwxMCArMzE5LDkgQEAgUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJk
Q2hyb21pdW06OmZpbGVzKCkgY29uc3QKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVh
ZGFibGUpCiAgICAgICAgIHJldHVybiBmaWxlcy5yZWxlYXNlKCk7CiAKLSAgICBSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbGlzdCA9IG1fZGF0YU9iamVjdC0+aXRlbXMoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKGxpc3QtPml0ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmls
ZSkgewotICAgICAgICAgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBsaXN0LT5pdGVtKGkpLT5nZXRB
c0ZpbGUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGF0YU9iamVjdC0+bGVuZ3Ro
KCk7ICsraSkgeworICAgICAgICBpZiAobV9kYXRhT2JqZWN0LT5pdGVtKGkpLT5raW5kKCkgPT0g
RGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUpIHsKKyAgICAgICAgICAgIFJlZlB0cjxCbG9iPiBi
bG9iID0gbV9kYXRhT2JqZWN0LT5pdGVtKGkpLT5nZXRBc0ZpbGUoKTsKICAgICAgICAgICAgIGlm
IChibG9iICYmIGJsb2ItPmlzRmlsZSgpKQogICAgICAgICAgICAgICAgIGZpbGVzLT5hcHBlbmQo
c3RhdGljX2Nhc3Q8RmlsZSo+KGJsb2IuZ2V0KCkpKTsKICAgICAgICAgfQpAQCAtNDg0LDcgKzQ4
Miw3IEBAIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06Omhhc0RhdGEoKQogewogICAgIEFTU0VSVChp
c0ZvckRyYWdBbmREcm9wKCkpOwogCi0gICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+aXRlbXMoKS0+
bGVuZ3RoKCkgPiAwOworICAgIHJldHVybiBtX2RhdGFPYmplY3QtPmxlbmd0aCgpID4gMDsKIH0K
IAogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQpAQCAtNDkzLDcgKzQ5MSw3IEBAIFBh
c3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3Q+IENsaXBib2FyZENocm9taXVtOjppdGVtcygp
CiAgICAgLy8gRklYTUU6IEFjY29yZGluZyB0byB0aGUgc3BlYywgd2UgYXJlIHN1cHBvc2VkIHRv
IHJldHVybiB0aGUgc2FtZSBjb2xsZWN0aW9uIG9mIGl0ZW1zIGVhY2gKICAgICAvLyB0aW1lLiBX
ZSBub3cgcmV0dXJuIGEgd3JhcHBlciB0aGF0IGFsd2F5cyB3cmFwcyB0aGUgKnNhbWUqIHNldCBv
ZiBpdGVtcywgc28gSlMgc2hvdWxkbid0IGJlCiAgICAgLy8gYWJsZSB0byB0ZWxsLCBidXQgd2Ug
cHJvYmFibHkgc3RpbGwgd2FudCB0byBmaXggdGhpcy4KLSAgICByZXR1cm4gRGF0YVRyYW5zZmVy
SXRlbUxpc3RQb2xpY3lXcmFwcGVyOjpjcmVhdGUodGhpcywgbV9kYXRhT2JqZWN0LT5pdGVtcygp
KTsKKyAgICByZXR1cm4gRGF0YVRyYW5zZmVySXRlbUxpc3RQb2xpY3lXcmFwcGVyOjpjcmVhdGUo
dGhpcywgbV9kYXRhT2JqZWN0KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ0OWRmOTk5MzNkMjZiODY2NGYxOGZi
MDM2MjBmNzQ0NzBiMGI0OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmgiCi0KLSNpZiBFTkFC
TEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKLQotI2luY2x1ZGUgIkJsb2IuaCIKLSNpbmNsdWRlICJD
bGlwYm9hcmQuaCIKLSNpbmNsdWRlICJDbGlwYm9hcmRDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkNs
aXBib2FyZE1pbWVUeXBlcy5oIgotI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0Nocm9taXVt
LmgiCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbS5oIgotI2luY2x1ZGUgIkZpbGUuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNp
bmNsdWRlICJTdHJpbmdDYWxsYmFjay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NS
ZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06
OmNyZWF0ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEp
Ci17Ci0gICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSA9IGFkb3B0UmVm
KG5ldyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmlu
ZywgdHlwZSkpOwotICAgIGl0ZW0tPm1fZGF0YSA9IGRhdGE7Ci0gICAgcmV0dXJuIGl0ZW0ucmVs
ZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gRGF0YVRy
YW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tRmlsZShQYXNzUmVmUHRyPEZpbGU+IGZpbGUp
Ci17Ci0gICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSA9IGFkb3B0UmVm
KG5ldyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUs
IGZpbGUtPnR5cGUoKSkpOwotICAgIGl0ZW0tPm1fZmlsZSA9IGZpbGU7Ci0gICAgcmV0dXJuIGl0
ZW0ucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4g
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tVVJMKGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBTdHJpbmcmIHRpdGxlKQotewotICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW0+IGl0ZW0gPSBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKERhdGFU
cmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcsIG1pbWVUeXBlVGV4dFVSSUxpc3QpKTsKLSAgICBpdGVt
LT5tX2RhdGEgPSB1cmw7Ci0gICAgaXRlbS0+bV90aXRsZSA9IHRpdGxlOwotICAgIHJldHVybiBp
dGVtLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+
IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbUhUTUwoY29uc3QgU3RyaW5nJiBo
dG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKQotewotICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW0+IGl0ZW0gPSBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKERh
dGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcsIG1pbWVUeXBlVGV4dEhUTUwpKTsKLSAgICBpdGVt
LT5tX2RhdGEgPSBodG1sOwotICAgIGl0ZW0tPm1fYmFzZVVSTCA9IGJhc2VVUkw7Ci0gICAgcmV0
dXJuIGl0ZW0ucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bT4gRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tU2hhcmVkQnVmZmVyKGNv
bnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikKLXsKLSAg
ICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtID0gYWRvcHRSZWYobmV3IERh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSwgU3RyaW5n
KCkpKTsKLSAgICBpdGVtLT5tX3NoYXJlZEJ1ZmZlciA9IGJ1ZmZlcjsKLSAgICBpdGVtLT5tX3Rp
dGxlID0gbmFtZTsKLSAgICByZXR1cm4gaXRlbS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0
ZUZyb21QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgdHlwZSwgdWludDY0X3Qgc2VxdWVuY2VOdW1i
ZXIpCi17Ci0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVJbWFnZVBuZykKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oRGF0YVRyYW5zZmVySXRlbTo6
a2luZEZpbGUsIHR5cGUsIHNlcXVlbmNlTnVtYmVyKSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZywg
dHlwZSwgc2VxdWVuY2VOdW1iZXIpKTsKLX0KLQotRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcm
IHR5cGUpCi0gICAgOiBtX3NvdXJjZShJbnRlcm5hbFNvdXJjZSkKLSAgICAsIG1fa2luZChraW5k
KQotICAgICwgbV90eXBlKHR5cGUpCi17Ci19Ci0KLURhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtKGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5n
JiB0eXBlLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJlcikKLSAgICA6IG1fc291cmNlKFBhc3RlYm9h
cmRTb3VyY2UpCi0gICAgLCBtX2tpbmQoa2luZCkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAgICwg
bV9zZXF1ZW5jZU51bWJlcihzZXF1ZW5jZU51bWJlcikKLXsKLX0KLQotdm9pZCBEYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW06OmdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNh
bGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIGlm
ICghY2FsbGJhY2sgfHwga2luZCgpICE9IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxiYWNrKGNvbnRleHQs
IGludGVybmFsR2V0QXNTdHJpbmcoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QmxvYj4gRGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtOjpnZXRBc0ZpbGUoKSBjb25zdAotewotICAgIGlmIChraW5kKCkgIT0g
RGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYg
KG1fc291cmNlID09IEludGVybmFsU291cmNlKSB7Ci0gICAgICAgIGlmIChtX2ZpbGUpCi0gICAg
ICAgICAgICByZXR1cm4gbV9maWxlOwotICAgICAgICBBU1NFUlQobV9zaGFyZWRCdWZmZXIpOwot
ICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGlzIGN1cnJlbnRseSBpbXBvc3NpYmxlLS13ZSBu
ZXZlciBwb3B1bGF0ZSBtX3NoYXJlZEJ1ZmZlciB3aGVuIGRyYWdnaW5nCi0gICAgICAgIC8vIGlu
LiBBdCBzb21lIHBvaW50IHRob3VnaCwgd2UgbWF5IG5lZWQgdG8gc3VwcG9ydCBjb3JyZWN0bHkg
Y29udmVydGluZyBhIHNoYXJlZCBidWZmZXIKLSAgICAgICAgLy8gaW50byBhIGZpbGUuCi0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEFTU0VSVChtX3NvdXJjZSA9PSBQYXN0ZWJvYXJk
U291cmNlKTsKLSAgICBpZiAodHlwZSgpID09IG1pbWVUeXBlSW1hZ2VQbmcpIHsKLSAgICAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgcHJldHR5IGluZWZmaWNpZW50LiBXZSBjb3B5IHRoZSBkYXRhIGZy
b20gdGhlIGJyb3dzZXIKLSAgICAgICAgLy8gdG8gdGhlIHJlbmRlcmVyLiBXZSB0aGVuIHBsYWNl
IGl0IGluIGEgYmxvYiBpbiBXZWJLaXQsIHdoaWNoCi0gICAgICAgIC8vIHJlZ2lzdGVycyBpdCBh
bmQgY29waWVzIGl0ICpiYWNrKiB0byB0aGUgYnJvd3Nlci4gV2hlbiBhIGNvbnN1bWVyCi0gICAg
ICAgIC8vIHdhbnRzIHRvIHJlYWQgdGhlIGRhdGEsIHdlIHRoZW4gY29weSB0aGUgZGF0YSBiYWNr
IGludG8gdGhlIHJlbmRlcmVyLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTgxMDcgaGFzIGJlZW4gZmlsZWQgdG8gdHJhY2sKLSAgICAgICAgLy8g
aW1wcm92ZW1lbnRzIHRvIHRoaXMgY29kZSAoaW4gcGFydGljdWxhciwgYWRkIGEgcmVnaXN0ZXJD
bGlwYm9hcmRCbG9iCi0gICAgICAgIC8vIG1ldGhvZCB0byB0aGUgYmxvYiByZWdpc3RyeTsgdGhh
dCB3YXkgdGhlIGRhdGEgaXMgb25seSBjb3BpZWQgb3ZlcgotICAgICAgICAvLyBpbnRvIHRoZSBy
ZW5kZXJlciB3aGVuIGl0J3MgYWN0dWFsbHkgcmVhZCwgbm90IHdoZW4gdGhlIGJsb2IgaXMKLSAg
ICAgICAgLy8gaW5pdGlhbGx5IGNvbnN0cnVjdGVkKS4KLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gZGF0YSA9IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEltYWdlKFBhc3RlYm9h
cmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcik7Ci0gICAgICAgIFJlZlB0cjxSYXdEYXRhPiByYXdE
YXRhID0gUmF3RGF0YTo6Y3JlYXRlKCk7Ci0gICAgICAgIHJhd0RhdGEtPm11dGFibGVEYXRhKCkt
PmFwcGVuZChkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7Ci0gICAgICAgIE93blB0cjxCbG9i
RGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7Ci0gICAgICAgIGJsb2JEYXRhLT5h
cHBlbmREYXRhKHJhd0RhdGEsIDAsIC0xKTsKLSAgICAgICAgYmxvYkRhdGEtPnNldENvbnRlbnRU
eXBlKG1pbWVUeXBlSW1hZ2VQbmcpOwotICAgICAgICByZXR1cm4gQmxvYjo6Y3JlYXRlKGJsb2JE
YXRhLnJlbGVhc2UoKSwgZGF0YS0+c2l6ZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0K
LQotU3RyaW5nIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6aW50ZXJuYWxHZXRBc1N0cmluZygp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fa2luZCA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3Ry
aW5nKTsKLQotICAgIGlmIChtX3NvdXJjZSA9PSBJbnRlcm5hbFNvdXJjZSkKLSAgICAgICAgcmV0
dXJuIG1fZGF0YTsKLQotICAgIEFTU0VSVChtX3NvdXJjZSA9PSBQYXN0ZWJvYXJkU291cmNlKTsK
LQotICAgIFN0cmluZyBkYXRhOwotICAgIC8vIFRoaXMgaXMgdWdseSBidXQgdGhlcmUncyBubyBy
ZWFsIGFsdGVybmF0aXZlLgotICAgIGlmIChtX3R5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4pCi0g
ICAgICAgIGRhdGEgPSBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoY3Vy
cmVudFBhc3RlYm9hcmRCdWZmZXIoKSk7Ci0gICAgZWxzZSBpZiAobV90eXBlID09IG1pbWVUeXBl
VGV4dEhUTUwpIHsKLSAgICAgICAgS1VSTCBpZ25vcmVkU291cmNlVVJMOwotICAgICAgICB1bnNp
Z25lZCBpZ25vcmVkOwotICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1M
KGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksICZkYXRhLCAmaWdub3JlZFNvdXJjZVVSTCwgJmln
bm9yZWQsICZpZ25vcmVkKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGF0YSA9IFBsYXRmb3JtU3Vw
cG9ydDo6Y2xpcGJvYXJkUmVhZEN1c3RvbURhdGEoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSwg
bV90eXBlKTsKLQotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFNlcXVlbmNl
TnVtYmVyKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCkpID09IG1fc2VxdWVuY2VOdW1iZXIgPyBk
YXRhIDogU3RyaW5nKCk7Ci19Ci0KLWJvb2wgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjppc0Zp
bGVuYW1lKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgxMjYxOiBXaGVuIHdlIHByb3Blcmx5IHN1cHBvcnQgRmlsZSBkcmFn
b3V0LAotICAgIC8vIHdlJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgd29ya3MgYXMgZXhwZWN0
ZWQgZm9yIERyYWdEYXRhQ2hyb21pdW0uCi0gICAgcmV0dXJuIG1fa2luZCA9PSBEYXRhVHJhbnNm
ZXJJdGVtOjpraW5kRmlsZSAmJiBtX2ZpbGU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21p
dW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkyNWJhMThmYjc5ZDY3ODhjMmEy
ODFmMDQ4MzM4OTQ4Y2QxOGNiMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bV9oCi0jZGVmaW5lIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bV9o
Ci0KLSNpZiBFTkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKLQotI2luY2x1ZGUgIkZpbGUuaCIK
LSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQmxvYjsK
LWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci1jbGFzcyBTdHJpbmdDYWxsYmFjazsKLQot
Y2xhc3MgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8RGF0YVRy
YW5zZmVySXRlbUNocm9taXVtPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbUNocm9taXVtPiBjcmVhdGVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW0+IGNyZWF0ZUZyb21GaWxlKFBhc3NSZWZQdHI8RmlsZT4pOwotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gY3JlYXRlRnJvbVVSTChj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSk7Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBjcmVhdGVGcm9tSFRNTChjb25zdCBTdHJp
bmcmIGh0bWwsIGNvbnN0IEtVUkwmIGJhc2VVUkwpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gY3JlYXRlRnJvbVNoYXJlZEJ1ZmZlcihjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pOwotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gY3JlYXRlRnJvbVBhc3RlYm9hcmQoY29u
c3QgU3RyaW5nJiB0eXBlLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJlcik7Ci0KLSAgICBTdHJpbmcg
a2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9Ci0gICAgdm9pZCBnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmlu
Z0NhbGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopIGNvbnN0OwotICAgIFBhc3NSZWZQ
dHI8QmxvYj4gZ2V0QXNGaWxlKCkgY29uc3Q7Ci0KLSAgICAvLyBVc2VkIHRvIHN1cHBvcnQgbGVn
YWN5IERhdGFUcmFuc2ZlciBBUElzIGFuZCByZW5kZXJlci0+YnJvd3NlciBzZXJpYWxpemF0aW9u
LgotICAgIFN0cmluZyBpbnRlcm5hbEdldEFzU3RyaW5nKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkQnVm
ZmVyOyB9Ci0gICAgU3RyaW5nIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQotICAg
IEtVUkwgYmFzZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVVSTDsgfQotICAgIGJvb2wgaXNG
aWxlbmFtZSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGVudW0gRGF0YVNvdXJjZSB7Ci0gICAg
ICAgIFBhc3RlYm9hcmRTb3VyY2UsCi0gICAgICAgIEludGVybmFsU291cmNlLAotICAgIH07Ci0K
LSAgICBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBT
dHJpbmcmIHR5cGUpOwotICAgIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShjb25zdCBTdHJpbmcm
IGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSwgdWludDY0X3Qgc2VxdWVuY2VOdW1iZXIpOwotCi0g
ICAgRGF0YVNvdXJjZSBtX3NvdXJjZTsKLSAgICBTdHJpbmcgbV9raW5kOwotICAgIFN0cmluZyBt
X3R5cGU7Ci0KLSAgICBTdHJpbmcgbV9kYXRhOwotICAgIFJlZlB0cjxGaWxlPiBtX2ZpbGU7Ci0g
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9zaGFyZWRCdWZmZXI7Ci0gICAgLy8gT3B0aW9uYWwg
bWV0YWRhdGEuIEN1cnJlbnRseSB1c2VkIGZvciBVUkwsIEhUTUwsIGFuZCBkcmFnZ2luZyBmaWxl
cyBpbi4KLSAgICBTdHJpbmcgbV90aXRsZTsKLSAgICBLVVJMIG1fYmFzZVVSTDsKLQotICAgIHVp
bnQ2NF90IG1fc2VxdWVuY2VOdW1iZXI7IC8vIE9ubHkgdmFsaWQgd2hlbiBtX3NvdXJjZSA9PSBQ
YXN0ZWJvYXJkU291cmNlCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKLQotI2VuZGlmIC8vIERhdGFUcmFuc2Zlckl0
ZW1faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRy
YW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZGY3NjNkNzA0MTU5YWU4MTk0YTk1ZDMwODhlMWY3NGMwMWQ1MzRhYS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaCIKLQotI2lmIEVOQUJMRShEQVRBX1RSQU5T
RkVSX0lURU1TKQotCi0jaW5jbHVkZSAiQmxvYlVSTC5oIgotI2luY2x1ZGUgIkNocm9taXVtRGF0
YU9iamVjdC5oIgotI2luY2x1ZGUgIkNsaXBib2FyZENocm9taXVtLmgiCi0jaW5jbHVkZSAiQ2xp
cGJvYXJkTWltZVR5cGVzLmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0u
aCIKLSNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtLmgiCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVy
SXRlbUNocm9taXVtLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZp
bGUuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCi0j
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlRocmVhZGFibGVC
bG9iUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9t
aXVtPiBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGUoKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSgpKTsKLX0KLQotUGFz
c1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtOjpjcmVhdGVGcm9tUGFzdGVib2FyZCgpCi17Ci0gICAgUmVmUHRyPERhdGFUcmFu
c2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGxpc3QgPSBjcmVhdGUoKTsKLSAgICB1aW50NjRfdCBzZXF1
ZW5jZU51bWJlciA9IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkU2VxdWVuY2VOdW1iZXIoY3Vy
cmVudFBhc3RlYm9hcmRCdWZmZXIoKSk7Ci0gICAgYm9vbCBpZ25vcmVkOwotICAgIEhhc2hTZXQ8
U3RyaW5nPiB0eXBlcyA9IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5
cGVzKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksICZpZ25vcmVkKTsKLSAgICBmb3IgKEhhc2hT
ZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSB0eXBl
cy5lbmQoKTsgKytpdCkKLSAgICAgICAgbGlzdC0+bV9pdGVtTGlzdC5hcHBlbmQoRGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tUGFzdGVib2FyZCgqaXQsIHNlcXVlbmNlTnVtYmVy
KSk7Ci0gICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwotfQotCi1EYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtKCkKLXsKLX0KLQotc2l6ZV90
IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1faXRlbUxpc3Quc2l6ZSgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bT4gRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6aXRlbSh1bnNpZ25lZCBsb25n
IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBsZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIG1faXRlbUxpc3RbaW5kZXhdOwotfQotCi12b2lkIERhdGFUcmFuc2Zlckl0
ZW1MaXN0Q2hyb21pdW06OmRlbGV0ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCkKLXsKLSAgICBp
ZiAoaW5kZXggPj0gbGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2l0ZW1MaXN0LnJl
bW92ZShpbmRleCk7Ci19Ci0KLXZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6Y2xl
YXIoKQotewotICAgIG1faXRlbUxpc3QuY2xlYXIoKTsKLX0KLQotdm9pZCBEYXRhVHJhbnNmZXJJ
dGVtTGlzdENocm9taXVtOjphZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5
cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghaW50ZXJuYWxBZGRTdHJpbmdJdGVt
KERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbVN0cmluZyh0eXBlLCBkYXRhKSkp
Ci0gICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Ci19Ci0KLXZvaWQgRGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bTo6YWRkKFBhc3NSZWZQdHI8RmlsZT4gZmlsZSwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBpZiAoIWZpbGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1faXRlbUxpc3QuYXBwZW5kKERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRl
RnJvbUZpbGUoZmlsZSkpOwotfQotCi0vLyBGSVhNRTogTWFrZSBzdXJlIGl0ZW0gaXMgcmVsZWFz
ZWQgY29ycmVjdGx5IGluIGNhc2Ugb2YgZmFpbHVyZS4KLWJvb2wgRGF0YVRyYW5zZmVySXRlbUxp
c3RDaHJvbWl1bTo6aW50ZXJuYWxBZGRTdHJpbmdJdGVtKFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVy
SXRlbUNocm9taXVtPiBpdGVtKQotewotICAgIEFTU0VSVChpdGVtLT5raW5kKCkgPT0gRGF0YVRy
YW5zZmVySXRlbTo6a2luZFN0cmluZyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0
ZW1MaXN0LnNpemUoKTsgKytpKQotICAgICAgICBpZiAobV9pdGVtTGlzdFtpXS0+a2luZCgpID09
IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcgJiYgbV9pdGVtTGlzdFtpXS0+dHlwZSgpID09
IGl0ZW0tPnR5cGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1faXRlbUxp
c3QuYXBwZW5kKGl0ZW0pOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIERhdGFUcmFuc2Zl
ckl0ZW1MaXN0Q2hyb21pdW06OmludGVybmFsQWRkRmlsZUl0ZW0oUGFzc1JlZlB0cjxEYXRhVHJh
bnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0pCi17Ci0gICAgQVNTRVJUKGl0ZW0tPmtpbmQoKSA9PSBE
YXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSk7Ci0gICAgbV9pdGVtTGlzdC5hcHBlbmQoaXRlbSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShEQVRBX1RS
QU5TRkVSX0lURU1TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkYTQzYWE1YmE5ZGM3ZTZkMjFlODljMDQ5OWVjYzE1ZThlNTk1ZWZj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaAor
KysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERhdGFUcmFuc2Zlckl0ZW1MaXN0
Q2hyb21pdW1faAotI2RlZmluZSBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtX2gKLQotI2lm
IEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQotCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRl
bUNocm9taXVtLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIENocm9taXVtRGF0YU9iamVjdDsKLWNsYXNzIEZpbGU7Ci1jbGFzcyBLVVJMOwot
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKLQotY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBjcmVhdGUoKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBjcmVhdGVGcm9t
UGFzdGVib2FyZCgpOwotCi0gICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OwotICAgIFBhc3NSZWZQ
dHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgVjhEYXRhVHJhbnNmZXJJdGVtTGlzdDo6aW5kZXhlZFBy
b3BlcnR5RGVsZXRlciB0byBnZXQgdGhpcyBjYWxsZWQuCi0gICAgdm9pZCBkZWxldGVJdGVtKHVu
c2lnbmVkIGxvbmcgaW5kZXgpOwotICAgIHZvaWQgY2xlYXIoKTsKLSAgICB2b2lkIGFkZChjb25z
dCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgYWRkKFBhc3NSZWZQdHI8RmlsZT4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLQot
cHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0OwotCi0gICAgRGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSgpOwotCi0gICAgLy8gRklYTUU6IENvbWJpbmUgd2l0
aCBDaHJvbWl1bURhdGFPYmplY3QgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciB0aGVzZSBtZXRo
b2RzLgotICAgIGJvb2wgaW50ZXJuYWxBZGRTdHJpbmdJdGVtKFBhc3NSZWZQdHI8RGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtPik7Ci0gICAgdm9pZCBpbnRlcm5hbEFkZEZpbGVJdGVtKFBhc3NSZWZQ
dHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPik7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPERhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bT4gPiBtX2l0ZW1MaXN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKERBVEFfVFJBTlNGRVJfSVRFTVMpCi0KLSNlbmRp
ZiAvLyBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRyYWdEYXRhLmNwcAppbmRleCBkYmVmOTVhMGNlZmRjNjY4NmE0MzkxZWUxYzE1
OTdiNjA5NTEyZmI2Li5kYmFmYWZlMDExZTdhNjRkNWQ5YTkwZDc2YTdhOWFhYmE4ZjNmMTA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCkBAIC03MCw4ICs3
MCw4IEBAIHZvaWQgV2ViRHJhZ0RhdGE6OmFzc2lnbihjb25zdCBXZWJEcmFnRGF0YSYgb3RoZXIp
CiBXZWJWZWN0b3I8V2ViRHJhZ0RhdGE6Okl0ZW0+IFdlYkRyYWdEYXRhOjppdGVtcygpIGNvbnN0
CiB7CiAgICAgVmVjdG9yPEl0ZW0+IGl0ZW1MaXN0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9wcml2YXRlLT5pdGVtcygpLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIERhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bSogb3JpZ2luYWxJdGVtID0gbV9wcml2YXRlLT5pdGVtcygpLT5pdGVt
KGkpLmdldCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcml2YXRlLT5sZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIENocm9taXVtRGF0YU9iamVjdEl0ZW0qIG9yaWdpbmFsSXRlbSA9
IG1fcHJpdmF0ZS0+aXRlbShpKS5nZXQoKTsKICAgICAgICAgV2ViRHJhZ0RhdGE6Okl0ZW0gaXRl
bTsKICAgICAgICAgaWYgKG9yaWdpbmFsSXRlbS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06
OmtpbmRTdHJpbmcpIHsKICAgICAgICAgICAgIGl0ZW0uc3RvcmFnZVR5cGUgPSBJdGVtOjpTdG9y
YWdlVHlwZVN0cmluZzsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134352</attachid>
            <date>2012-03-28 11:37:05 -0700</date>
            <delta_ts>2012-03-28 11:37:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82407-20120328113704.patch</filename>
            <type>text/plain</type>
            <size>59037</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNmODdjYzYwNDNjZWI1
N2Q3MzJlNzA1N2MwNDIyYmRlMjhkOWRlMS4uMWE3OTQ2MTU1NDY1N2FlYjdjNTlmNWM4NzMyNzMy
YWM1YmU3NzhmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEyLTAzLTI3ICBEYW5p
ZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWVy
Z2UgQ2hyb21pdW1EYXRhT2JqZWN0IGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI0MDcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSBDaHJv
bWl1bURhdGFPYmplY3QgaXMganVzdCBhIHZlcnkgdGhpbiB3cmFwcGVyIGZvciBEYXRhVHJhbnNm
ZXJJdGVtTGlzdENocm9taXVtIG5vdywKKyAgICAgICAgY29tYmluZSB0aGUgdHdvIGFuZCByZW1v
dmUgYSBsYXllciBvZiBpbmRpcmVjdGlvbi4KKworICAgICAgICBObyBmdW5jdGlvbmFsaXR5IGNo
YW5nZSwgc2hvdWxkIGJlIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0LmNwcDogUmVwbGFjaW5nIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uCisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZUZyb21QYXN0ZWJvYXJkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjppdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6ZGVsZXRlSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
aXVtRGF0YU9iamVjdDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVj
dDo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y2xl
YXJBbGxFeGNlcHRGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6
OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojp1cmxBbmRUaXRsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldFVSTEFuZFRpdGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6aHRtbEFuZEJhc2VVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRIVE1MQW5kQmFzZVVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6ZmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9taXVtRGF0YU9iamVjdDo6YWRkRmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1EYXRhT2JqZWN0OjphZGRTaGFyZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaW5kU3RyaW5nSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3Q6OmludGVybmFsQWRkU3RyaW5nSXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmludGVybmFsQWRkRmlsZUl0ZW0pOgorICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdEl0ZW0uY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0
SXRlbTo6Y3JlYXRlRnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFP
YmplY3RJdGVtOjpjcmVhdGVGcm9tRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURh
dGFPYmplY3RJdGVtOjpjcmVhdGVGcm9tVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVt
RGF0YU9iamVjdEl0ZW06OmNyZWF0ZUZyb21IVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
aXVtRGF0YU9iamVjdEl0ZW06OmNyZWF0ZUZyb21TaGFyZWRCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Y3JlYXRlRnJvbVBhc3RlYm9hcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Q2hyb21pdW1EYXRhT2JqZWN0
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RJdGVtOjpnZXRBc1N0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RJdGVtOjpnZXRBc0Zp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6aW50ZXJuYWxH
ZXRBc1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RJdGVtOjpp
c0ZpbGVuYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmpl
Y3RJdGVtLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9E
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
Q2hyb21pdW1EYXRhT2JqZWN0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFP
YmplY3RJdGVtOjpraW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdEl0
ZW06OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6c2hh
cmVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdEl0ZW06OnRp
dGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdEl0ZW06OmJhc2VVUkwp
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpmaWxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6aGFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlw
Ym9hcmRDaHJvbWl1bTo6aXRlbXMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RhdGFU
cmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaDogUmVtb3ZlZC4KKwogMjAx
Mi0wMy0yOCAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IG9ubHkgdXBkYXRlIFRpbWVsaW5lIG92ZXJ2aWV3IHdoZW4gcmVhbGx5
IG5lZWRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1ZjBhY2JjOTRhNWI4NDA5MGJi
ZDgyNzdlODBjMjY2NWE4YjZlMTA4Li5kNDQ1Y2ZlMGM2YWQ4NmExNTBlNTNiNDk4YWVhNjRlODZh
NWFmMzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEy
LTAzLTI3ICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtj
aHJvbWl1bV0gTWVyZ2UgQ2hyb21pdW1EYXRhT2JqZWN0IGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODI0MDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHNyYy9XZWJEcmFnRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpp
dGVtcyk6CisKIDIwMTItMDMtMjcgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbY2hyb21pdW1dIFRyYW5zZmVyIHdoZWVsIGZsaW5nIHZpYSBXZWJDb21w
b3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZGZlMDA4YjNmYTU5
NzExMTkyMmU2ODgyZDcwYzMyYzIwMGE5YTg5Zi4uZDUyYzI0ZDE3ZTc2ZWVkNTk1YzAyNGU2NGNl
YjVkOTc4MjJiMDRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzE5OSw2ICszMTk5LDggQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RJdGVtLmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0SXRlbS5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtUG9zaXguY3BwJywKQEAgLTMyMTAs
MTAgKzMyMTIsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0NvbnRleHRNZW51
Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Db250ZXh0TWVu
dUl0ZW1DaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0N1cnNv
ckNocm9taXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vRGF0
YVRyYW5zZmVySXRlbUNocm9taXVtLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YVJlZi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bU1hYy5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKaW5kZXggNjc5
ZjQyZDNmNmRhMTBlMDc2ZTEwYmU0OGUwNWU1YmFiMDEwNDY2Ny4uMGExZjhiNjZkNjYzYmVhN2Rl
ZGIwZjMxY2Y4NjIxZTRhOWU5NmM3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCkBAIC0zNCwyOCArMzQsMjYg
QEAKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRV
dGlsaXRpZXNDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW0uaCIKLSNpbmNs
dWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQYXNz
UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gZmluZEl0ZW0oUGFzc1JlZlB0cjxEYXRh
VHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBpdGVtTGlzdCwgY29uc3QgU3RyaW5nJiB0eXBlKQot
ewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbUxpc3QtPmxlbmd0aCgpOyArK2kpIHsK
LSAgICAgICAgaWYgKGl0ZW1MaXN0LT5pdGVtKGkpLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRl
bTo6a2luZFN0cmluZyAmJiBpdGVtTGlzdC0+aXRlbShpKS0+dHlwZSgpID09IHR5cGUpCi0gICAg
ICAgICAgICByZXR1cm4gaXRlbUxpc3QtPml0ZW0oaSk7Ci0gICAgfQotICAgIHJldHVybiAwOwot
fQotCiBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gQ2hyb21pdW1EYXRhT2JqZWN0Ojpj
cmVhdGVGcm9tUGFzdGVib2FyZCgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1
bURhdGFPYmplY3QoRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6Y3JlYXRlRnJvbVBhc3Rl
Ym9hcmQoKSkpOworICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGRhdGFPYmplY3QgPSBj
cmVhdGUoKTsKKyAgICB1aW50NjRfdCBzZXF1ZW5jZU51bWJlciA9IFBsYXRmb3JtU3VwcG9ydDo6
Y2xpcGJvYXJkU2VxdWVuY2VOdW1iZXIoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSk7CisgICAg
Ym9vbCBpZ25vcmVkOworICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcyA9IFBsYXRmb3JtU3VwcG9y
dDo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCks
ICZpZ25vcmVkKTsKKyAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSB0eXBlcy5iZWdpbigpOyBpdCAhPSB0eXBlcy5lbmQoKTsgKytpdCkKKyAgICAgICAgZGF0YU9i
amVjdC0+bV9pdGVtTGlzdC5hcHBlbmQoQ2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Y3JlYXRlRnJv
bVBhc3RlYm9hcmQoKml0LCBzZXF1ZW5jZU51bWJlcikpOworICAgIHJldHVybiBkYXRhT2JqZWN0
LnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IENocm9taXVt
RGF0YU9iamVjdDo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENocm9taXVt
RGF0YU9iamVjdChEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGUoKSkpOworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KCkpOwogfQogCiBQYXNzUmVm
UHRyPENocm9taXVtRGF0YU9iamVjdD4gQ2hyb21pdW1EYXRhT2JqZWN0Ojpjb3B5KCkgY29uc3QK
QEAgLTYzLDMyICs2MSw2MCBAQCBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gQ2hyb21p
dW1EYXRhT2JqZWN0Ojpjb3B5KCkgY29uc3QKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENocm9t
aXVtRGF0YU9iamVjdCgqdGhpcykpOwogfQogCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1M
aXN0Q2hyb21pdW0+IENocm9taXVtRGF0YU9iamVjdDo6aXRlbXMoKSBjb25zdAorc2l6ZV90IENo
cm9taXVtRGF0YU9iamVjdDo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pdGVtTGlz
dDsKKyAgICByZXR1cm4gbV9pdGVtTGlzdC5zaXplKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q2hyb21p
dW1EYXRhT2JqZWN0SXRlbT4gQ2hyb21pdW1EYXRhT2JqZWN0OjppdGVtKHVuc2lnbmVkIGxvbmcg
aW5kZXgpCit7CisgICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gbV9pdGVtTGlzdFtpbmRleF07Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2Jq
ZWN0OjpkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgaWYgKGluZGV4ID49
IGxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9pdGVtTGlzdC5yZW1vdmUoaW5kZXgp
OworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGwoKQoreworICAgIG1faXRl
bUxpc3QuY2xlYXIoKTsKK30KKwordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmFkZChjb25zdCBT
dHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgaWYgKCFpbnRlcm5hbEFkZFN0cmluZ0l0ZW0oQ2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Y3Jl
YXRlRnJvbVN0cmluZyh0eXBlLCBkYXRhKSkpCisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9F
UlI7Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjphZGQoUGFzc1JlZlB0cjxGaWxlPiBm
aWxlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIGlmICghZmlsZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9pdGVtTGlzdC5hcHBlbmQoQ2hyb21pdW1EYXRhT2Jq
ZWN0SXRlbTo6Y3JlYXRlRnJvbUZpbGUoZmlsZSkpOwogfQogCiB2b2lkIENocm9taXVtRGF0YU9i
amVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1faXRlbUxpc3QtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1faXRl
bUxpc3QtPml0ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nICYm
IG1faXRlbUxpc3QtPml0ZW0oaSktPnR5cGUoKSA9PSB0eXBlKSB7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2l0ZW1MaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2l0ZW1M
aXN0W2ldLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZyAmJiBtX2l0ZW1M
aXN0W2ldLT50eXBlKCkgPT0gdHlwZSkgewogICAgICAgICAgICAgLy8gUGVyIHRoZSBzcGVjLCB0
eXBlIG11c3QgYmUgdW5pcXVlIGFtb25nIGFsbCBpdGVtcyBvZiBraW5kICdzdHJpbmcnLgotICAg
ICAgICAgICAgbV9pdGVtTGlzdC0+ZGVsZXRlSXRlbShpKTsKKyAgICAgICAgICAgIG1faXRlbUxp
c3QucmVtb3ZlKGkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogfQog
Ci12b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGwoKQotewotICAgIG1faXRlbUxpc3Qt
PmNsZWFyKCk7Ci19Ci0KIHZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZp
bGVzKCkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3QtPmxlbmd0aCgp
OyApIHsKLSAgICAgICAgaWYgKG1faXRlbUxpc3QtPml0ZW0oaSktPmtpbmQoKSAhPSBEYXRhVHJh
bnNmZXJJdGVtOjpraW5kRmlsZSkgewotICAgICAgICAgICAgbV9pdGVtTGlzdC0+ZGVsZXRlSXRl
bShpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3Quc2l6ZSgpOyApIHsK
KyAgICAgICAgaWYgKG1faXRlbUxpc3RbaV0tPmtpbmQoKSAhPSBEYXRhVHJhbnNmZXJJdGVtOjpr
aW5kRmlsZSkgeworICAgICAgICAgICAgbV9pdGVtTGlzdC5yZW1vdmUoaSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICArK2k7CkBAIC05OSwxMCArMTI1LDEwIEBA
IEhhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKIHsKICAg
ICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKICAgICBib29sIGNvbnRhaW5zRmlsZXMgPSBmYWxz
ZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3QtPmxlbmd0aCgpOyArK2kp
IHsKLSAgICAgICAgaWYgKG1faXRlbUxpc3QtPml0ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJhbnNm
ZXJJdGVtOjpraW5kU3RyaW5nKQotICAgICAgICAgICAgcmVzdWx0cy5hZGQobV9pdGVtTGlzdC0+
aXRlbShpKS0+dHlwZSgpKTsKLSAgICAgICAgZWxzZSBpZiAobV9pdGVtTGlzdC0+aXRlbShpKS0+
a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlKQorICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9pdGVtTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9pdGVtTGlz
dFtpXS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpCisgICAgICAgICAg
ICByZXN1bHRzLmFkZChtX2l0ZW1MaXN0W2ldLT50eXBlKCkpOworICAgICAgICBlbHNlIGlmICht
X2l0ZW1MaXN0W2ldLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUpCiAgICAg
ICAgICAgICBjb250YWluc0ZpbGVzID0gdHJ1ZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTQsOSArMTQwLDkgQEAgSGFzaFNldDxTdHJpbmc+
IENocm9taXVtRGF0YU9iamVjdDo6dHlwZXMoKSBjb25zdAogCiBTdHJpbmcgQ2hyb21pdW1EYXRh
T2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKIHsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3QtPmxlbmd0aCgpOyArK2kpICB7Ci0gICAgICAgIGlm
IChtX2l0ZW1MaXN0LT5pdGVtKGkpLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0
cmluZyAmJiBtX2l0ZW1MaXN0LT5pdGVtKGkpLT50eXBlKCkgPT0gdHlwZSkKLSAgICAgICAgICAg
IHJldHVybiBtX2l0ZW1MaXN0LT5pdGVtKGkpLT5pbnRlcm5hbEdldEFzU3RyaW5nKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1MaXN0LnNpemUoKTsgKytpKSAgeworICAgICAg
ICBpZiAobV9pdGVtTGlzdFtpXS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJp
bmcgJiYgbV9pdGVtTGlzdFtpXS0+dHlwZSgpID09IHR5cGUpCisgICAgICAgICAgICByZXR1cm4g
bV9pdGVtTGlzdFtpXS0+aW50ZXJuYWxHZXRBc1N0cmluZygpOwogICAgIH0KICAgICByZXR1cm4g
U3RyaW5nKCk7CiB9CkBAIC0xMjQsMTMgKzE1MCwxMyBAQCBTdHJpbmcgQ2hyb21pdW1EYXRhT2Jq
ZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKIGJvb2wgQ2hyb21pdW1EYXRh
T2JqZWN0OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQog
ewogICAgIGNsZWFyRGF0YSh0eXBlKTsKLSAgICBtX2l0ZW1MaXN0LT5hZGQoZGF0YSwgdHlwZSwg
QVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgYWRkKGRhdGEsIHR5cGUsIEFTU0VSVF9OT19FWENF
UFRJT04pOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIENocm9taXVtRGF0YU9iamVjdDo6
dXJsQW5kVGl0bGUoU3RyaW5nJiB1cmwsIFN0cmluZyogdGl0bGUpIGNvbnN0CiB7Ci0gICAgUmVm
UHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSA9IGZpbmRJdGVtKG1faXRlbUxpc3Qs
IG1pbWVUeXBlVGV4dFVSSUxpc3QpOworICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RJdGVt
PiBpdGVtID0gZmluZFN0cmluZ0l0ZW0obWltZVR5cGVUZXh0VVJJTGlzdCk7CiAgICAgaWYgKCFp
dGVtKQogICAgICAgICByZXR1cm47CiAgICAgdXJsID0gY29udmVydFVSSUxpc3RUb1VSTChpdGVt
LT5pbnRlcm5hbEdldEFzU3RyaW5nKCkpOwpAQCAtMTQxLDEyICsxNjcsMTIgQEAgdm9pZCBDaHJv
bWl1bURhdGFPYmplY3Q6OnVybEFuZFRpdGxlKFN0cmluZyYgdXJsLCBTdHJpbmcqIHRpdGxlKSBj
b25zdAogdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OnNldFVSTEFuZFRpdGxlKGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewogICAgIGNsZWFyRGF0YShtaW1lVHlwZVRl
eHRVUklMaXN0KTsKLSAgICBtX2l0ZW1MaXN0LT5pbnRlcm5hbEFkZFN0cmluZ0l0ZW0oRGF0YVRy
YW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tVVJMKHVybCwgdGl0bGUpKTsKKyAgICBpbnRl
cm5hbEFkZFN0cmluZ0l0ZW0oQ2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Y3JlYXRlRnJvbVVSTCh1
cmwsIHRpdGxlKSk7CiB9CiAKIHZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpodG1sQW5kQmFzZVVS
TChTdHJpbmcmIGh0bWwsIEtVUkwmIGJhc2VVUkwpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPERhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSA9IGZpbmRJdGVtKG1faXRlbUxpc3QsIG1pbWVUeXBl
VGV4dEhUTUwpOworICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RJdGVtPiBpdGVtID0gZmlu
ZFN0cmluZ0l0ZW0obWltZVR5cGVUZXh0SFRNTCk7CiAgICAgaWYgKCFpdGVtKQogICAgICAgICBy
ZXR1cm47CiAgICAgaHRtbCA9IGl0ZW0tPmludGVybmFsR2V0QXNTdHJpbmcoKTsKQEAgLTE1Niwx
MyArMTgyLDEzIEBAIHZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpodG1sQW5kQmFzZVVSTChTdHJp
bmcmIGh0bWwsIEtVUkwmIGJhc2VVUkwpIGNvbnN0CiB2b2lkIENocm9taXVtRGF0YU9iamVjdDo6
c2V0SFRNTEFuZEJhc2VVUkwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJM
KQogewogICAgIGNsZWFyRGF0YShtaW1lVHlwZVRleHRIVE1MKTsKLSAgICBtX2l0ZW1MaXN0LT5p
bnRlcm5hbEFkZFN0cmluZ0l0ZW0oRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9t
SFRNTChodG1sLCBiYXNlVVJMKSk7CisgICAgaW50ZXJuYWxBZGRTdHJpbmdJdGVtKENocm9taXVt
RGF0YU9iamVjdEl0ZW06OmNyZWF0ZUZyb21IVE1MKGh0bWwsIGJhc2VVUkwpKTsKIH0KIAogYm9v
bCBDaHJvbWl1bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3QKIHsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3QtPmxlbmd0aCgpOyArK2kpCi0gICAgICAg
IGlmIChtX2l0ZW1MaXN0LT5pdGVtKGkpLT5pc0ZpbGVuYW1lKCkpCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2l0ZW1MaXN0LnNpemUoKTsgKytpKQorICAgICAgICBpZiAobV9pdGVtTGlz
dFtpXS0+aXNGaWxlbmFtZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQpAQCAtMTcwLDI0ICsxOTYsMjMgQEAgYm9vbCBDaHJvbWl1bURhdGFPYmplY3Q6
OmNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3QKIFZlY3RvcjxTdHJpbmc+IENocm9taXVtRGF0YU9i
amVjdDo6ZmlsZW5hbWVzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHRzOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtTGlzdC0+bGVuZ3RoKCk7ICsraSkKLSAg
ICAgICAgaWYgKG1faXRlbUxpc3QtPml0ZW0oaSktPmlzRmlsZW5hbWUoKSkKLSAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKHN0YXRpY19jYXN0PEZpbGUqPihtX2l0ZW1MaXN0LT5pdGVtKGkpLT5n
ZXRBc0ZpbGUoKS5nZXQoKSktPnBhdGgoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2l0ZW1MaXN0LnNpemUoKTsgKytpKQorICAgICAgICBpZiAobV9pdGVtTGlzdFtpXS0+aXNGaWxl
bmFtZSgpKQorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoc3RhdGljX2Nhc3Q8RmlsZSo+KG1f
aXRlbUxpc3RbaV0tPmdldEFzRmlsZSgpLmdldCgpKS0+cGF0aCgpKTsKICAgICByZXR1cm4gcmVz
dWx0czsKIH0KIAogdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmFkZEZpbGVuYW1lKGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUpCiB7Ci0gICAgbV9pdGVtTGlzdC0+aW50ZXJuYWxBZGRGaWxlSXRlbShE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZUZyb21GaWxlKEZpbGU6OmNyZWF0ZShmaWxl
bmFtZSkpKTsKKyAgICBpbnRlcm5hbEFkZEZpbGVJdGVtKENocm9taXVtRGF0YU9iamVjdEl0ZW06
OmNyZWF0ZUZyb21GaWxlKEZpbGU6OmNyZWF0ZShmaWxlbmFtZSkpKTsKIH0KIAogdm9pZCBDaHJv
bWl1bURhdGFPYmplY3Q6OmFkZFNoYXJlZEJ1ZmZlcihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCiB7Ci0gICAgbV9pdGVtTGlzdC0+aW50ZXJuYWxB
ZGRGaWxlSXRlbShEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZUZyb21TaGFyZWRCdWZm
ZXIobmFtZSwgYnVmZmVyKSk7CisgICAgaW50ZXJuYWxBZGRGaWxlSXRlbShDaHJvbWl1bURhdGFP
YmplY3RJdGVtOjpjcmVhdGVGcm9tU2hhcmVkQnVmZmVyKG5hbWUsIGJ1ZmZlcikpOwogfQogCi1D
aHJvbWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0YU9iamVjdChQYXNzUmVmUHRyPERhdGFUcmFu
c2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGl0ZW1MaXN0KQotICAgIDogbV9pdGVtTGlzdChpdGVtTGlz
dCkKK0Nocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KCkKIHsKIH0KIApAQCAt
MTk3LDQgKzIyMiwzMCBAQCBDaHJvbWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0YU9iamVjdChj
b25zdCBDaHJvbWl1bURhdGFPYmplY3QmIG90aGVyKQogewogfQogCitQYXNzUmVmUHRyPENocm9t
aXVtRGF0YU9iamVjdEl0ZW0+IENocm9taXVtRGF0YU9iamVjdDo6ZmluZFN0cmluZ0l0ZW0oY29u
c3QgU3RyaW5nJiB0eXBlKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9p
dGVtTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9pdGVtTGlzdFtpXS0+a2luZCgp
ID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcgJiYgbV9pdGVtTGlzdFtpXS0+dHlwZSgp
ID09IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gbV9pdGVtTGlzdFtpXTsKKyAgICB9CisgICAg
cmV0dXJuIDA7Cit9CisKK2Jvb2wgQ2hyb21pdW1EYXRhT2JqZWN0OjppbnRlcm5hbEFkZFN0cmlu
Z0l0ZW0oUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RJdGVtPiBpdGVtKQoreworICAgIEFT
U0VSVChpdGVtLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZyk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1MaXN0LnNpemUoKTsgKytpKQorICAgICAgICBp
ZiAobV9pdGVtTGlzdFtpXS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcg
JiYgbV9pdGVtTGlzdFtpXS0+dHlwZSgpID09IGl0ZW0tPnR5cGUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIG1faXRlbUxpc3QuYXBwZW5kKGl0ZW0pOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6aW50ZXJuYWxBZGRGaWxlSXRlbShQ
YXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGl0ZW0pCit7CisgICAgQVNTRVJUKGl0
ZW0tPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSk7CisgICAgbV9pdGVtTGlz
dC5hcHBlbmQoaXRlbSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKaW5k
ZXggNWExYzQyZTQwYTIwYTRlMzE0ZmU5ZTY1NzYxNTJmNDM4NGY2N2VjZS4uNDQxOTgyOGE1MjQ4
ZWIwMGY1ODVkYjMzZGRhZGViZDQ2NDU0NTIyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKQEAgLTMxLDcgKzMxLDcg
QEAKICNpZm5kZWYgQ2hyb21pdW1EYXRhT2JqZWN0X2gKICNkZWZpbmUgQ2hyb21pdW1EYXRhT2Jq
ZWN0X2gKIAotI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaCIKKyNpbmNs
dWRlICJDaHJvbWl1bURhdGFPYmplY3RJdGVtLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAg
LTQzLDYgKzQzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgS1VSTDsKIGNsYXNzIFNo
YXJlZEJ1ZmZlcjsKIAordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKwogLy8gQSBkYXRhIG9i
amVjdCBmb3IgaG9sZGluZyBkYXRhIHRoYXQgd291bGQgYmUgaW4gYSBjbGlwYm9hcmQgb3IgbW92
ZWQKIC8vIGR1cmluZyBhIGRyYWctbi1kcm9wIG9wZXJhdGlvbi4gIFRoaXMgaXMgdGhlIGRhdGEg
dGhhdCBXZWJDb3JlIGlzIGF3YXJlCiAvLyBvZiBhbmQgaXMgbm90IHNwZWNpZmljIHRvIGEgcGxh
dGZvcm0uCkBAIC01MywxMCArNTUsMTcgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxDaHJv
bWl1bURhdGFPYmplY3Q+IGNvcHkoKSBjb25zdDsKIAotICAgIFBhc3NSZWZQdHI8RGF0YVRyYW5z
ZmVySXRlbUxpc3RDaHJvbWl1bT4gaXRlbXMoKSBjb25zdDsKKyAgICAvLyBEYXRhVHJhbnNmZXJJ
dGVtTGlzdCBzdXBwb3J0LgorICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKKyAgICBQYXNzUmVm
UHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBWOERhdGFUcmFuc2Zlckl0ZW1MaXN0OjppbmRleGVkUHJv
cGVydHlEZWxldGVyIHRvIGdldCB0aGlzIGNhbGxlZC4KKyAgICB2b2lkIGRlbGV0ZUl0ZW0odW5z
aWduZWQgbG9uZyBpbmRleCk7CisgICAgdm9pZCBjbGVhckFsbCgpOworICAgIHZvaWQgYWRkKGNv
bnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdm9pZCBhZGQoUGFzc1JlZlB0cjxGaWxlPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwog
CisgICAgLy8gV2ViQ29yZSBoZWxwZXJzLgogICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSk7Ci0gICAgdm9pZCBjbGVhckFsbCgpOwogICAgIHZvaWQgY2xlYXJBbGxFeGNlcHRG
aWxlcygpOwogCiAgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CkBAIC03NywxMCAr
ODYsMTQgQEAgcHVibGljOgogICAgIHZvaWQgYWRkU2hhcmVkQnVmZmVyKGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNp
dCBDaHJvbWl1bURhdGFPYmplY3QoUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9t
aXVtPik7CisgICAgQ2hyb21pdW1EYXRhT2JqZWN0KCk7CiAgICAgZXhwbGljaXQgQ2hyb21pdW1E
YXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVjdCYpOwogCi0gICAgUmVmUHRyPERhdGFU
cmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IG1faXRlbUxpc3Q7CisgICAgUGFzc1JlZlB0cjxDaHJv
bWl1bURhdGFPYmplY3RJdGVtPiBmaW5kU3RyaW5nSXRlbShjb25zdCBTdHJpbmcmIHR5cGUpIGNv
bnN0OworICAgIGJvb2wgaW50ZXJuYWxBZGRTdHJpbmdJdGVtKFBhc3NSZWZQdHI8Q2hyb21pdW1E
YXRhT2JqZWN0SXRlbT4pOworICAgIHZvaWQgaW50ZXJuYWxBZGRGaWxlSXRlbShQYXNzUmVmUHRy
PENocm9taXVtRGF0YU9iamVjdEl0ZW0+KTsKKworICAgIFZlY3RvcjxSZWZQdHI8Q2hyb21pdW1E
YXRhT2JqZWN0SXRlbT4gPiBtX2l0ZW1MaXN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1E
YXRhT2JqZWN0SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJv
bWl1bURhdGFPYmplY3RJdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZGIzNjAzZDRkOTNlNDBkZDQyYmMy
ZDQ5YTdiMTNlZDNiMzc1ZDAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0SXRlbS5jcHAKQEAgLTAsMCArMSwxODgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0SXRlbS5o
IgorCisjaWYgRU5BQkxFKERBVEFfVFJBTlNGRVJfSVRFTVMpCisKKyNpbmNsdWRlICJCbG9iLmgi
CisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkQ2hyb21pdW0uaCIK
KyNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRVdGls
aXRpZXNDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW0uaCIKKyNpbmNsdWRl
ICJGaWxlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCisjaW5jbHVkZSAiU3RyaW5nQ2FsbGJhY2suaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IENocm9taXVtRGF0YU9i
amVjdEl0ZW06OmNyZWF0ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIGRhdGEpCit7CisgICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGl0ZW0gPSBh
ZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0SXRlbShEYXRhVHJhbnNmZXJJdGVtOjpraW5k
U3RyaW5nLCB0eXBlKSk7CisgICAgaXRlbS0+bV9kYXRhID0gZGF0YTsKKyAgICByZXR1cm4gaXRl
bS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4gQ2hy
b21pdW1EYXRhT2JqZWN0SXRlbTo6Y3JlYXRlRnJvbUZpbGUoUGFzc1JlZlB0cjxGaWxlPiBmaWxl
KQoreworICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RJdGVtPiBpdGVtID0gYWRvcHRSZWYo
bmV3IENocm9taXVtRGF0YU9iamVjdEl0ZW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUsIGZp
bGUtPnR5cGUoKSkpOworICAgIGl0ZW0tPm1fZmlsZSA9IGZpbGU7CisgICAgcmV0dXJuIGl0ZW0u
cmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IENocm9t
aXVtRGF0YU9iamVjdEl0ZW06OmNyZWF0ZUZyb21VUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgdGl0bGUpCit7CisgICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGl0
ZW0gPSBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0SXRlbShEYXRhVHJhbnNmZXJJdGVt
OjpraW5kU3RyaW5nLCBtaW1lVHlwZVRleHRVUklMaXN0KSk7CisgICAgaXRlbS0+bV9kYXRhID0g
dXJsOworICAgIGl0ZW0tPm1fdGl0bGUgPSB0aXRsZTsKKyAgICByZXR1cm4gaXRlbS5yZWxlYXNl
KCk7Cit9CisKK1Bhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4gQ2hyb21pdW1EYXRh
T2JqZWN0SXRlbTo6Y3JlYXRlRnJvbUhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBLVVJM
JiBiYXNlVVJMKQoreworICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RJdGVtPiBpdGVtID0g
YWRvcHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdEl0ZW0oRGF0YVRyYW5zZmVySXRlbTo6a2lu
ZFN0cmluZywgbWltZVR5cGVUZXh0SFRNTCkpOworICAgIGl0ZW0tPm1fZGF0YSA9IGh0bWw7Cisg
ICAgaXRlbS0+bV9iYXNlVVJMID0gYmFzZVVSTDsKKyAgICByZXR1cm4gaXRlbS5yZWxlYXNlKCk7
Cit9CisKK1Bhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4gQ2hyb21pdW1EYXRhT2Jq
ZWN0SXRlbTo6Y3JlYXRlRnJvbVNoYXJlZEJ1ZmZlcihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7CisgICAgUmVmUHRyPENocm9taXVtRGF0YU9i
amVjdEl0ZW0+IGl0ZW0gPSBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0SXRlbShEYXRh
VHJhbnNmZXJJdGVtOjpraW5kRmlsZSwgU3RyaW5nKCkpKTsKKyAgICBpdGVtLT5tX3NoYXJlZEJ1
ZmZlciA9IGJ1ZmZlcjsKKyAgICBpdGVtLT5tX3RpdGxlID0gbmFtZTsKKyAgICByZXR1cm4gaXRl
bS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4gQ2hy
b21pdW1EYXRhT2JqZWN0SXRlbTo6Y3JlYXRlRnJvbVBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiB0
eXBlLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJlcikKK3sKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlw
ZUltYWdlUG5nKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENocm9taXVtRGF0YU9iamVj
dEl0ZW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUsIHR5cGUsIHNlcXVlbmNlTnVtYmVyKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3RJdGVtKERhdGFUcmFu
c2Zlckl0ZW06OmtpbmRTdHJpbmcsIHR5cGUsIHNlcXVlbmNlTnVtYmVyKSk7Cit9CisKK0Nocm9t
aXVtRGF0YU9iamVjdEl0ZW06OkNocm9taXVtRGF0YU9iamVjdEl0ZW0oY29uc3QgU3RyaW5nJiBr
aW5kLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgOiBtX3NvdXJjZShJbnRlcm5hbFNvdXJjZSkK
KyAgICAsIG1fa2luZChraW5kKQorICAgICwgbV90eXBlKHR5cGUpCisgICAgLCBtX3NlcXVlbmNl
TnVtYmVyKDApCit7Cit9CisKK0Nocm9taXVtRGF0YU9iamVjdEl0ZW06OkNocm9taXVtRGF0YU9i
amVjdEl0ZW0oY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIHR5cGUsIHVpbnQ2NF90
IHNlcXVlbmNlTnVtYmVyKQorICAgIDogbV9zb3VyY2UoUGFzdGVib2FyZFNvdXJjZSkKKyAgICAs
IG1fa2luZChraW5kKQorICAgICwgbV90eXBlKHR5cGUpCisgICAgLCBtX3NlcXVlbmNlTnVtYmVy
KHNlcXVlbmNlTnVtYmVyKQoreworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVjdEl0ZW06Omdl
dEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghY2FsbGJhY2sgfHwga2lu
ZCgpICE9IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxiYWNrKGNvbnRleHQsIGludGVybmFsR2V0QXNTdHJp
bmcoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYj4gQ2hyb21pdW1EYXRhT2JqZWN0SXRlbTo6Z2V0
QXNGaWxlKCkgY29uc3QKK3sKKyAgICBpZiAoa2luZCgpICE9IERhdGFUcmFuc2Zlckl0ZW06Omtp
bmRGaWxlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChtX3NvdXJjZSA9PSBJbnRlcm5h
bFNvdXJjZSkgeworICAgICAgICBpZiAobV9maWxlKQorICAgICAgICAgICAgcmV0dXJuIG1fZmls
ZTsKKyAgICAgICAgQVNTRVJUKG1fc2hhcmVkQnVmZmVyKTsKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgY29kZSBpcyBjdXJyZW50bHkgaW1wb3NzaWJsZS0td2UgbmV2ZXIgcG9wdWxhdGUgbV9zaGFy
ZWRCdWZmZXIgd2hlbiBkcmFnZ2luZworICAgICAgICAvLyBpbi4gQXQgc29tZSBwb2ludCB0aG91
Z2gsIHdlIG1heSBuZWVkIHRvIHN1cHBvcnQgY29ycmVjdGx5IGNvbnZlcnRpbmcgYSBzaGFyZWQg
YnVmZmVyCisgICAgICAgIC8vIGludG8gYSBmaWxlLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBBU1NFUlQobV9zb3VyY2UgPT0gUGFzdGVib2FyZFNvdXJjZSk7CisgICAgaWYgKHR5
cGUoKSA9PSBtaW1lVHlwZUltYWdlUG5nKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHBy
ZXR0eSBpbmVmZmljaWVudC4gV2UgY29weSB0aGUgZGF0YSBmcm9tIHRoZSBicm93c2VyCisgICAg
ICAgIC8vIHRvIHRoZSByZW5kZXJlci4gV2UgdGhlbiBwbGFjZSBpdCBpbiBhIGJsb2IgaW4gV2Vi
S2l0LCB3aGljaAorICAgICAgICAvLyByZWdpc3RlcnMgaXQgYW5kIGNvcGllcyBpdCAqYmFjayog
dG8gdGhlIGJyb3dzZXIuIFdoZW4gYSBjb25zdW1lcgorICAgICAgICAvLyB3YW50cyB0byByZWFk
IHRoZSBkYXRhLCB3ZSB0aGVuIGNvcHkgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSByZW5kZXJlci4K
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4MTA3
IGhhcyBiZWVuIGZpbGVkIHRvIHRyYWNrCisgICAgICAgIC8vIGltcHJvdmVtZW50cyB0byB0aGlz
IGNvZGUgKGluIHBhcnRpY3VsYXIsIGFkZCBhIHJlZ2lzdGVyQ2xpcGJvYXJkQmxvYgorICAgICAg
ICAvLyBtZXRob2QgdG8gdGhlIGJsb2IgcmVnaXN0cnk7IHRoYXQgd2F5IHRoZSBkYXRhIGlzIG9u
bHkgY29waWVkIG92ZXIKKyAgICAgICAgLy8gaW50byB0aGUgcmVuZGVyZXIgd2hlbiBpdCdzIGFj
dHVhbGx5IHJlYWQsIG5vdCB3aGVuIHRoZSBibG9iIGlzCisgICAgICAgIC8vIGluaXRpYWxseSBj
b25zdHJ1Y3RlZCkuCisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBQbGF0Zm9y
bVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRJbWFnZShQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRC
dWZmZXIpOworICAgICAgICBSZWZQdHI8UmF3RGF0YT4gcmF3RGF0YSA9IFJhd0RhdGE6OmNyZWF0
ZSgpOworICAgICAgICByYXdEYXRhLT5tdXRhYmxlRGF0YSgpLT5hcHBlbmQoZGF0YS0+ZGF0YSgp
LCBkYXRhLT5zaXplKCkpOworICAgICAgICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxv
YkRhdGE6OmNyZWF0ZSgpOworICAgICAgICBibG9iRGF0YS0+YXBwZW5kRGF0YShyYXdEYXRhLCAw
LCAtMSk7CisgICAgICAgIGJsb2JEYXRhLT5zZXRDb250ZW50VHlwZShtaW1lVHlwZUltYWdlUG5n
KTsKKyAgICAgICAgcmV0dXJuIEJsb2I6OmNyZWF0ZShibG9iRGF0YS5yZWxlYXNlKCksIGRhdGEt
PnNpemUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBDaHJvbWl1bURh
dGFPYmplY3RJdGVtOjppbnRlcm5hbEdldEFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9raW5kID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpOworCisgICAgaWYgKG1fc291
cmNlID09IEludGVybmFsU291cmNlKQorICAgICAgICByZXR1cm4gbV9kYXRhOworCisgICAgQVNT
RVJUKG1fc291cmNlID09IFBhc3RlYm9hcmRTb3VyY2UpOworCisgICAgU3RyaW5nIGRhdGE7Cisg
ICAgLy8gVGhpcyBpcyB1Z2x5IGJ1dCB0aGVyZSdzIG5vIHJlYWwgYWx0ZXJuYXRpdmUuCisgICAg
aWYgKG1fdHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikKKyAgICAgICAgZGF0YSA9IFBsYXRmb3Jt
U3VwcG9ydDo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigp
KTsKKyAgICBlbHNlIGlmIChtX3R5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgeworICAgICAgICBL
VVJMIGlnbm9yZWRTb3VyY2VVUkw7CisgICAgICAgIHVuc2lnbmVkIGlnbm9yZWQ7CisgICAgICAg
IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoY3VycmVudFBhc3RlYm9hcmRCdWZm
ZXIoKSwgJmRhdGEsICZpZ25vcmVkU291cmNlVVJMLCAmaWdub3JlZCwgJmlnbm9yZWQpOworICAg
IH0gZWxzZQorICAgICAgICBkYXRhID0gUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkQ3Vz
dG9tRGF0YShjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLCBtX3R5cGUpOworCisgICAgcmV0dXJu
IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkU2VxdWVuY2VOdW1iZXIoY3VycmVudFBhc3RlYm9h
cmRCdWZmZXIoKSkgPT0gbV9zZXF1ZW5jZU51bWJlciA/IGRhdGEgOiBTdHJpbmcoKTsKK30KKwor
Ym9vbCBDaHJvbWl1bURhdGFPYmplY3RJdGVtOjppc0ZpbGVuYW1lKCkgY29uc3QKK3sKKyAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMjYxOiBX
aGVuIHdlIHByb3Blcmx5IHN1cHBvcnQgRmlsZSBkcmFnb3V0LAorICAgIC8vIHdlJ2xsIG5lZWQg
dG8gbWFrZSBzdXJlIHRoaXMgd29ya3MgYXMgZXhwZWN0ZWQgZm9yIERyYWdEYXRhQ2hyb21pdW0u
CisgICAgcmV0dXJuIG1fa2luZCA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSAmJiBtX2Zp
bGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShEQVRB
X1RSQU5TRkVSX0lURU1TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0SXRlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0SXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0OWE4MmYzOGE4
OWU4YzdlYTcyZDVmNzEzMWExNTI0NTA0NmZhNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RJdGVtLmgKQEAgLTAs
MCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ2hyb21pdW1EYXRhT2JqZWN0SXRlbV9oIAorI2RlZmluZSBDaHJv
bWl1bURhdGFPYmplY3RJdGVtX2gKKworI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQor
CisjaW5jbHVkZSAiRmlsZS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBCbG9iOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNz
IFN0cmluZ0NhbGxiYWNrOworCitjbGFzcyBDaHJvbWl1bURhdGFPYmplY3RJdGVtIDogcHVibGlj
IFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGNyZWF0ZUZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGNyZWF0ZUZyb21GaWxlKFBhc3NSZWZQdHI8Rmls
ZT4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGNyZWF0
ZUZyb21VUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGNyZWF0ZUZyb21IVE1MKGNv
bnN0IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFzZVVSTCk7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4gY3JlYXRlRnJvbVNoYXJlZEJ1ZmZlcihjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0ZW0+IGNyZWF0ZUZyb21QYXN0ZWJvYXJk
KGNvbnN0IFN0cmluZyYgdHlwZSwgdWludDY0X3Qgc2VxdWVuY2VOdW1iZXIpOworCisgICAgU3Ry
aW5nIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBTdHJpbmcgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHZvaWQgZ2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxT
dHJpbmdDYWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsKKyAgICBQYXNz
UmVmUHRyPEJsb2I+IGdldEFzRmlsZSgpIGNvbnN0OworCisgICAgLy8gVXNlZCB0byBzdXBwb3J0
IGxlZ2FjeSBEYXRhVHJhbnNmZXIgQVBJcyBhbmQgcmVuZGVyZXItPmJyb3dzZXIgc2VyaWFsaXph
dGlvbi4KKyAgICBTdHJpbmcgaW50ZXJuYWxHZXRBc1N0cmluZygpIGNvbnN0OworICAgIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBzaGFyZWRCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX3NoYXJl
ZEJ1ZmZlcjsgfQorICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGl0bGU7IH0K
KyAgICBLVVJMIGJhc2VVUkwoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VVUkw7IH0KKyAgICBib29s
IGlzRmlsZW5hbWUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBlbnVtIERhdGFTb3VyY2Ugewor
ICAgICAgICBQYXN0ZWJvYXJkU291cmNlLAorICAgICAgICBJbnRlcm5hbFNvdXJjZSwKKyAgICB9
OworCisgICAgQ2hyb21pdW1EYXRhT2JqZWN0SXRlbShjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0
IFN0cmluZyYgdHlwZSk7CisgICAgQ2hyb21pdW1EYXRhT2JqZWN0SXRlbShjb25zdCBTdHJpbmcm
IGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSwgdWludDY0X3Qgc2VxdWVuY2VOdW1iZXIpOworCisg
ICAgRGF0YVNvdXJjZSBtX3NvdXJjZTsKKyAgICBTdHJpbmcgbV9raW5kOworICAgIFN0cmluZyBt
X3R5cGU7CisKKyAgICBTdHJpbmcgbV9kYXRhOworICAgIFJlZlB0cjxGaWxlPiBtX2ZpbGU7Cisg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9zaGFyZWRCdWZmZXI7CisgICAgLy8gT3B0aW9uYWwg
bWV0YWRhdGEuIEN1cnJlbnRseSB1c2VkIGZvciBVUkwsIEhUTUwsIGFuZCBkcmFnZ2luZyBmaWxl
cyBpbi4KKyAgICBTdHJpbmcgbV90aXRsZTsKKyAgICBLVVJMIG1fYmFzZVVSTDsKKworICAgIHVp
bnQ2NF90IG1fc2VxdWVuY2VOdW1iZXI7IC8vIE9ubHkgdmFsaWQgd2hlbiBtX3NvdXJjZSA9PSBQ
YXN0ZWJvYXJkU291cmNlCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKKworI2VuZGlmIC8vIENocm9taXVtRGF0YU9i
amVjdEl0ZW1faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW0uY3BwCmluZGV4IDMxMjFlYTgwOTE2ZjRiNmQzNDU0ODhkZDQ1ZjM5
YzAwZWNkNDE4MTEuLjE4MjFjODhiZDZmYTg3ZjUyNWI3ZWRjMjhmMTA1NmNiYmU5YzY4NmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRD
aHJvbWl1bS5jcHAKQEAgLTI5LDEyICsyOSwxMSBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2Uu
aCIKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKKyNpbmNsdWRlICJDaHJvbWl1bURh
dGFPYmplY3RJdGVtLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVk
ZSAiQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCIKICNpbmNsdWRlICJEYXRhVHJhbnNmZXJJ
dGVtLmgiCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmgiCiAjaW5jbHVkZSAi
RGF0YVRyYW5zZmVySXRlbUxpc3QuaCIKLSNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdENo
cm9taXVtLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEcmFnRGF0YS5oIgog
I2luY2x1ZGUgIkVsZW1lbnQuaCIKQEAgLTY0LDcgKzYzLDcgQEAgbmFtZXNwYWNlIHsKIGNsYXNz
IERhdGFUcmFuc2Zlckl0ZW1MaXN0UG9saWN5V3JhcHBlciA6IHB1YmxpYyBEYXRhVHJhbnNmZXJJ
dGVtTGlzdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRl
bUxpc3RQb2xpY3lXcmFwcGVyPiBjcmVhdGUoCi0gICAgICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJk
Q2hyb21pdW0+LCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+KTsKKyAg
ICAgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NSZWZQdHI8Q2hyb21pdW1E
YXRhT2JqZWN0Pik7CiAKICAgICB2aXJ0dWFsIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gaXRlbSh1bnNpZ25lZCBsb25nIGlu
ZGV4KTsKQEAgLTc0LDE2ICs3MywxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZChQ
YXNzUmVmUHRyPEZpbGU+KTsKIAogcHJpdmF0ZToKLSAgICBEYXRhVHJhbnNmZXJJdGVtTGlzdFBv
bGljeVdyYXBwZXIoUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4pOworICAgIERhdGFUcmFuc2Zlckl0ZW1MaXN0UG9s
aWN5V3JhcHBlcihQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiwgUGFzc1JlZlB0cjxDaHJv
bWl1bURhdGFPYmplY3Q+KTsKIAogICAgIFJlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gbV9jbGlw
Ym9hcmQ7Ci0gICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IG1fbGlzdDsK
KyAgICBSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBtX2RhdGFPYmplY3Q7CiB9OwogCiBjbGFz
cyBEYXRhVHJhbnNmZXJJdGVtUG9saWN5V3JhcHBlciA6IHB1YmxpYyBEYXRhVHJhbnNmZXJJdGVt
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtUG9saWN5
V3JhcHBlcj4gY3JlYXRlKAotICAgICAgICBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiwg
UGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+KTsKKyAgICAgICAgUGFzc1JlZlB0
cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0SXRlbT4p
OwogCiAgICAgdmlydHVhbCBTdHJpbmcga2luZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5n
IHR5cGUoKSBjb25zdDsKQEAgLTkyLDE0ICs5MSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEJsb2I+IGdldEFzRmlsZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIERhdGFU
cmFuc2Zlckl0ZW1Qb2xpY3lXcmFwcGVyKFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+LCBQ
YXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4pOworICAgIERhdGFUcmFuc2Zlckl0
ZW1Qb2xpY3lXcmFwcGVyKFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+LCBQYXNzUmVmUHRy
PENocm9taXVtRGF0YU9iamVjdEl0ZW0+KTsKIAogICAgIFJlZlB0cjxDbGlwYm9hcmRDaHJvbWl1
bT4gbV9jbGlwYm9hcmQ7Ci0gICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gbV9p
dGVtOworICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RJdGVtPiBtX2l0ZW07CiB9OwogCiBQ
YXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0UG9saWN5V3JhcHBlcj4gRGF0YVRyYW5zZmVy
SXRlbUxpc3RQb2xpY3lXcmFwcGVyOjpjcmVhdGUoCi0gICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRD
aHJvbWl1bT4gY2xpcGJvYXJkLCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21p
dW0+IGxpc3QpCisgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gY2xpcGJvYXJkLCBQ
YXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gbGlzdCkKIHsKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1MaXN0UG9saWN5V3JhcHBlcihjbGlwYm9hcmQsIGxpc3Qp
KTsKIH0KQEAgLTEwOCwxNCArMTA3LDE0IEBAIHNpemVfdCBEYXRhVHJhbnNmZXJJdGVtTGlzdFBv
bGljeVdyYXBwZXI6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKG1fY2xpcGJvYXJkLT5wb2xp
Y3koKSA9PSBDbGlwYm9hcmROdW1iKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9s
aXN0LT5sZW5ndGgoKTsKKyAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5sZW5ndGgoKTsKIH0KIAog
UGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiBEYXRhVHJhbnNmZXJJdGVtTGlzdFBvbGljeVdy
YXBwZXI6Oml0ZW0odW5zaWduZWQgbG9uZyBpbmRleCkKIHsKICAgICBpZiAobV9jbGlwYm9hcmQt
PnBvbGljeSgpID09IENsaXBib2FyZE51bWIpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0
cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0gPSBtX2xpc3QtPml0ZW0oaW5kZXgpOwor
ICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RJdGVtPiBpdGVtID0gbV9kYXRhT2JqZWN0LT5p
dGVtKGluZGV4KTsKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVy
biBEYXRhVHJhbnNmZXJJdGVtUG9saWN5V3JhcHBlcjo6Y3JlYXRlKG1fY2xpcGJvYXJkLCBpdGVt
KTsKQEAgLTEyNywzOSArMTI2LDM5IEBAIHZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3RQb2xpY3lX
cmFwcGVyOjpkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvCiAgICAgICAg
IGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9s
aXN0LT5kZWxldGVJdGVtKGluZGV4KTsKKyAgICBtX2RhdGFPYmplY3QtPmRlbGV0ZUl0ZW0oaW5k
ZXgpOwogfQogCiB2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0UG9saWN5V3JhcHBlcjo6Y2xlYXIo
KQogewogICAgIGlmIChtX2NsaXBib2FyZC0+cG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUp
CiAgICAgICAgIHJldHVybjsKLSAgICBtX2xpc3QtPmNsZWFyKCk7CisgICAgbV9kYXRhT2JqZWN0
LT5jbGVhckFsbCgpOwogfQogCiB2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0UG9saWN5V3JhcHBl
cjo6YWRkKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBpZiAobV9jbGlwYm9hcmQtPnBvbGljeSgpICE9IENsaXBib2FyZFdy
aXRhYmxlKQogICAgICAgICByZXR1cm47Ci0gICAgbV9saXN0LT5hZGQoZGF0YSwgdHlwZSwgZWMp
OworICAgIG1fZGF0YU9iamVjdC0+YWRkKGRhdGEsIHR5cGUsIGVjKTsKIH0KIAogdm9pZCBEYXRh
VHJhbnNmZXJJdGVtTGlzdFBvbGljeVdyYXBwZXI6OmFkZChQYXNzUmVmUHRyPEZpbGU+IGZpbGUp
CiB7CiAgICAgaWYgKG1fY2xpcGJvYXJkLT5wb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIG1fbGlzdC0+YWRkKGZpbGUsIG1fY2xpcGJvYXJkLT5mcmFt
ZSgpLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIG1fZGF0YU9i
amVjdC0+YWRkKGZpbGUsIG1fY2xpcGJvYXJkLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpOwogfQogCiBEYXRhVHJhbnNmZXJJdGVtTGlzdFBvbGljeVdyYXBw
ZXI6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0UG9saWN5V3JhcHBlcigKLSAgICBQYXNzUmVmUHRyPENs
aXBib2FyZENocm9taXVtPiBjbGlwYm9hcmQsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxp
c3RDaHJvbWl1bT4gbGlzdCkKKyAgICBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBjbGlw
Ym9hcmQsIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBkYXRhT2JqZWN0KQogICAgIDog
bV9jbGlwYm9hcmQoY2xpcGJvYXJkKQotICAgICwgbV9saXN0KGxpc3QpCisgICAgLCBtX2RhdGFP
YmplY3QoZGF0YU9iamVjdCkKIHsKIH0KIAogUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtUG9s
aWN5V3JhcHBlcj4gRGF0YVRyYW5zZmVySXRlbVBvbGljeVdyYXBwZXI6OmNyZWF0ZSgKLSAgICBQ
YXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBjbGlwYm9hcmQsIFBhc3NSZWZQdHI8RGF0YVRy
YW5zZmVySXRlbUNocm9taXVtPiBpdGVtKQorICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21p
dW0+IGNsaXBib2FyZCwgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RJdGVtPiBpdGVtKQog
ewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbVBvbGljeVdyYXBwZXIo
Y2xpcGJvYXJkLCBpdGVtKSk7CiB9CkBAIC0xOTUsNyArMTk0LDcgQEAgUGFzc1JlZlB0cjxCbG9i
PiBEYXRhVHJhbnNmZXJJdGVtUG9saWN5V3JhcHBlcjo6Z2V0QXNGaWxlKCkgY29uc3QKIH0KIAog
RGF0YVRyYW5zZmVySXRlbVBvbGljeVdyYXBwZXI6OkRhdGFUcmFuc2Zlckl0ZW1Qb2xpY3lXcmFw
cGVyKAotICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IGNsaXBib2FyZCwgUGFzc1Jl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0pCisgICAgUGFzc1JlZlB0cjxDbGlw
Ym9hcmRDaHJvbWl1bT4gY2xpcGJvYXJkLCBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdEl0
ZW0+IGl0ZW0pCiAgICAgOiBtX2NsaXBib2FyZChjbGlwYm9hcmQpCiAgICAgLCBtX2l0ZW0oaXRl
bSkKIHsKQEAgLTMyMCwxMCArMzE5LDkgQEAgUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJk
Q2hyb21pdW06OmZpbGVzKCkgY29uc3QKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVh
ZGFibGUpCiAgICAgICAgIHJldHVybiBmaWxlcy5yZWxlYXNlKCk7CiAKLSAgICBSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbGlzdCA9IG1fZGF0YU9iamVjdC0+aXRlbXMoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKGxpc3QtPml0ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmls
ZSkgewotICAgICAgICAgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBsaXN0LT5pdGVtKGkpLT5nZXRB
c0ZpbGUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGF0YU9iamVjdC0+bGVuZ3Ro
KCk7ICsraSkgeworICAgICAgICBpZiAobV9kYXRhT2JqZWN0LT5pdGVtKGkpLT5raW5kKCkgPT0g
RGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUpIHsKKyAgICAgICAgICAgIFJlZlB0cjxCbG9iPiBi
bG9iID0gbV9kYXRhT2JqZWN0LT5pdGVtKGkpLT5nZXRBc0ZpbGUoKTsKICAgICAgICAgICAgIGlm
IChibG9iICYmIGJsb2ItPmlzRmlsZSgpKQogICAgICAgICAgICAgICAgIGZpbGVzLT5hcHBlbmQo
c3RhdGljX2Nhc3Q8RmlsZSo+KGJsb2IuZ2V0KCkpKTsKICAgICAgICAgfQpAQCAtNDg0LDcgKzQ4
Miw3IEBAIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06Omhhc0RhdGEoKQogewogICAgIEFTU0VSVChp
c0ZvckRyYWdBbmREcm9wKCkpOwogCi0gICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+aXRlbXMoKS0+
bGVuZ3RoKCkgPiAwOworICAgIHJldHVybiBtX2RhdGFPYmplY3QtPmxlbmd0aCgpID4gMDsKIH0K
IAogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQpAQCAtNDkzLDcgKzQ5MSw3IEBAIFBh
c3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3Q+IENsaXBib2FyZENocm9taXVtOjppdGVtcygp
CiAgICAgLy8gRklYTUU6IEFjY29yZGluZyB0byB0aGUgc3BlYywgd2UgYXJlIHN1cHBvc2VkIHRv
IHJldHVybiB0aGUgc2FtZSBjb2xsZWN0aW9uIG9mIGl0ZW1zIGVhY2gKICAgICAvLyB0aW1lLiBX
ZSBub3cgcmV0dXJuIGEgd3JhcHBlciB0aGF0IGFsd2F5cyB3cmFwcyB0aGUgKnNhbWUqIHNldCBv
ZiBpdGVtcywgc28gSlMgc2hvdWxkbid0IGJlCiAgICAgLy8gYWJsZSB0byB0ZWxsLCBidXQgd2Ug
cHJvYmFibHkgc3RpbGwgd2FudCB0byBmaXggdGhpcy4KLSAgICByZXR1cm4gRGF0YVRyYW5zZmVy
SXRlbUxpc3RQb2xpY3lXcmFwcGVyOjpjcmVhdGUodGhpcywgbV9kYXRhT2JqZWN0LT5pdGVtcygp
KTsKKyAgICByZXR1cm4gRGF0YVRyYW5zZmVySXRlbUxpc3RQb2xpY3lXcmFwcGVyOjpjcmVhdGUo
dGhpcywgbV9kYXRhT2JqZWN0KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNlZDMyYmJlODQ2ZDg3OTQ5NTQwZjNj
NThhZTE5NjgzYzVlYjAxNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmgiCi0KLSNpZiBFTkFC
TEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKLQotI2luY2x1ZGUgIkJsb2IuaCIKLSNpbmNsdWRlICJD
bGlwYm9hcmQuaCIKLSNpbmNsdWRlICJDbGlwYm9hcmRDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkNs
aXBib2FyZE1pbWVUeXBlcy5oIgotI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0Nocm9taXVt
LmgiCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbS5oIgotI2luY2x1ZGUgIkZpbGUuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNp
bmNsdWRlICJTdHJpbmdDYWxsYmFjay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NS
ZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06
OmNyZWF0ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEp
Ci17Ci0gICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSA9IGFkb3B0UmVm
KG5ldyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmlu
ZywgdHlwZSkpOwotICAgIGl0ZW0tPm1fZGF0YSA9IGRhdGE7Ci0gICAgcmV0dXJuIGl0ZW0ucmVs
ZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gRGF0YVRy
YW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tRmlsZShQYXNzUmVmUHRyPEZpbGU+IGZpbGUp
Ci17Ci0gICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSA9IGFkb3B0UmVm
KG5ldyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUs
IGZpbGUtPnR5cGUoKSkpOwotICAgIGl0ZW0tPm1fZmlsZSA9IGZpbGU7Ci0gICAgcmV0dXJuIGl0
ZW0ucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4g
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tVVJMKGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBTdHJpbmcmIHRpdGxlKQotewotICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW0+IGl0ZW0gPSBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKERhdGFU
cmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcsIG1pbWVUeXBlVGV4dFVSSUxpc3QpKTsKLSAgICBpdGVt
LT5tX2RhdGEgPSB1cmw7Ci0gICAgaXRlbS0+bV90aXRsZSA9IHRpdGxlOwotICAgIHJldHVybiBp
dGVtLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+
IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbUhUTUwoY29uc3QgU3RyaW5nJiBo
dG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKQotewotICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW0+IGl0ZW0gPSBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKERh
dGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcsIG1pbWVUeXBlVGV4dEhUTUwpKTsKLSAgICBpdGVt
LT5tX2RhdGEgPSBodG1sOwotICAgIGl0ZW0tPm1fYmFzZVVSTCA9IGJhc2VVUkw7Ci0gICAgcmV0
dXJuIGl0ZW0ucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bT4gRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tU2hhcmVkQnVmZmVyKGNv
bnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikKLXsKLSAg
ICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtID0gYWRvcHRSZWYobmV3IERh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSwgU3RyaW5n
KCkpKTsKLSAgICBpdGVtLT5tX3NoYXJlZEJ1ZmZlciA9IGJ1ZmZlcjsKLSAgICBpdGVtLT5tX3Rp
dGxlID0gbmFtZTsKLSAgICByZXR1cm4gaXRlbS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0
ZUZyb21QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgdHlwZSwgdWludDY0X3Qgc2VxdWVuY2VOdW1i
ZXIpCi17Ci0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVJbWFnZVBuZykKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oRGF0YVRyYW5zZmVySXRlbTo6
a2luZEZpbGUsIHR5cGUsIHNlcXVlbmNlTnVtYmVyKSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZywg
dHlwZSwgc2VxdWVuY2VOdW1iZXIpKTsKLX0KLQotRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcm
IHR5cGUpCi0gICAgOiBtX3NvdXJjZShJbnRlcm5hbFNvdXJjZSkKLSAgICAsIG1fa2luZChraW5k
KQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3NlcXVlbmNlTnVtYmVyKDApCi17Ci19Ci0K
LURhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtKGNvbnN0
IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiB0eXBlLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJl
cikKLSAgICA6IG1fc291cmNlKFBhc3RlYm9hcmRTb3VyY2UpCi0gICAgLCBtX2tpbmQoa2luZCkK
LSAgICAsIG1fdHlwZSh0eXBlKQotICAgICwgbV9zZXF1ZW5jZU51bWJlcihzZXF1ZW5jZU51bWJl
cikKLXsKLX0KLQotdm9pZCBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzU3RyaW5nKFBh
c3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KSBjb25zdAotewotICAgIGlmICghY2FsbGJhY2sgfHwga2luZCgpICE9IERhdGFU
cmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhbGxiYWNr
LT5zY2hlZHVsZUNhbGxiYWNrKGNvbnRleHQsIGludGVybmFsR2V0QXNTdHJpbmcoKSk7Ci19Ci0K
LVBhc3NSZWZQdHI8QmxvYj4gRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc0ZpbGUoKSBj
b25zdAotewotICAgIGlmIChraW5kKCkgIT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1fc291cmNlID09IEludGVybmFsU291cmNlKSB7
Ci0gICAgICAgIGlmIChtX2ZpbGUpCi0gICAgICAgICAgICByZXR1cm4gbV9maWxlOwotICAgICAg
ICBBU1NFUlQobV9zaGFyZWRCdWZmZXIpOwotICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGlz
IGN1cnJlbnRseSBpbXBvc3NpYmxlLS13ZSBuZXZlciBwb3B1bGF0ZSBtX3NoYXJlZEJ1ZmZlciB3
aGVuIGRyYWdnaW5nCi0gICAgICAgIC8vIGluLiBBdCBzb21lIHBvaW50IHRob3VnaCwgd2UgbWF5
IG5lZWQgdG8gc3VwcG9ydCBjb3JyZWN0bHkgY29udmVydGluZyBhIHNoYXJlZCBidWZmZXIKLSAg
ICAgICAgLy8gaW50byBhIGZpbGUuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEFT
U0VSVChtX3NvdXJjZSA9PSBQYXN0ZWJvYXJkU291cmNlKTsKLSAgICBpZiAodHlwZSgpID09IG1p
bWVUeXBlSW1hZ2VQbmcpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgcHJldHR5IGluZWZm
aWNpZW50LiBXZSBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIGJyb3dzZXIKLSAgICAgICAgLy8gdG8g
dGhlIHJlbmRlcmVyLiBXZSB0aGVuIHBsYWNlIGl0IGluIGEgYmxvYiBpbiBXZWJLaXQsIHdoaWNo
Ci0gICAgICAgIC8vIHJlZ2lzdGVycyBpdCBhbmQgY29waWVzIGl0ICpiYWNrKiB0byB0aGUgYnJv
d3Nlci4gV2hlbiBhIGNvbnN1bWVyCi0gICAgICAgIC8vIHdhbnRzIHRvIHJlYWQgdGhlIGRhdGEs
IHdlIHRoZW4gY29weSB0aGUgZGF0YSBiYWNrIGludG8gdGhlIHJlbmRlcmVyLgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTgxMDcgaGFzIGJlZW4g
ZmlsZWQgdG8gdHJhY2sKLSAgICAgICAgLy8gaW1wcm92ZW1lbnRzIHRvIHRoaXMgY29kZSAoaW4g
cGFydGljdWxhciwgYWRkIGEgcmVnaXN0ZXJDbGlwYm9hcmRCbG9iCi0gICAgICAgIC8vIG1ldGhv
ZCB0byB0aGUgYmxvYiByZWdpc3RyeTsgdGhhdCB3YXkgdGhlIGRhdGEgaXMgb25seSBjb3BpZWQg
b3ZlcgotICAgICAgICAvLyBpbnRvIHRoZSByZW5kZXJlciB3aGVuIGl0J3MgYWN0dWFsbHkgcmVh
ZCwgbm90IHdoZW4gdGhlIGJsb2IgaXMKLSAgICAgICAgLy8gaW5pdGlhbGx5IGNvbnN0cnVjdGVk
KS4KLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IFBsYXRmb3JtU3VwcG9ydDo6
Y2xpcGJvYXJkUmVhZEltYWdlKFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcik7Ci0g
ICAgICAgIFJlZlB0cjxSYXdEYXRhPiByYXdEYXRhID0gUmF3RGF0YTo6Y3JlYXRlKCk7Ci0gICAg
ICAgIHJhd0RhdGEtPm11dGFibGVEYXRhKCktPmFwcGVuZChkYXRhLT5kYXRhKCksIGRhdGEtPnNp
emUoKSk7Ci0gICAgICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3Jl
YXRlKCk7Ci0gICAgICAgIGJsb2JEYXRhLT5hcHBlbmREYXRhKHJhd0RhdGEsIDAsIC0xKTsKLSAg
ICAgICAgYmxvYkRhdGEtPnNldENvbnRlbnRUeXBlKG1pbWVUeXBlSW1hZ2VQbmcpOwotICAgICAg
ICByZXR1cm4gQmxvYjo6Y3JlYXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwgZGF0YS0+c2l6ZSgpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotU3RyaW5nIERhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bTo6aW50ZXJuYWxHZXRBc1N0cmluZygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fa2luZCA9
PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nKTsKLQotICAgIGlmIChtX3NvdXJjZSA9PSBJ
bnRlcm5hbFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YTsKLQotICAgIEFTU0VSVChtX3Nv
dXJjZSA9PSBQYXN0ZWJvYXJkU291cmNlKTsKLQotICAgIFN0cmluZyBkYXRhOwotICAgIC8vIFRo
aXMgaXMgdWdseSBidXQgdGhlcmUncyBubyByZWFsIGFsdGVybmF0aXZlLgotICAgIGlmIChtX3R5
cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4pCi0gICAgICAgIGRhdGEgPSBQbGF0Zm9ybVN1cHBvcnQ6
OmNsaXBib2FyZFJlYWRQbGFpblRleHQoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSk7Ci0gICAg
ZWxzZSBpZiAobV90eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKLSAgICAgICAgS1VSTCBpZ25v
cmVkU291cmNlVVJMOwotICAgICAgICB1bnNpZ25lZCBpZ25vcmVkOwotICAgICAgICBQbGF0Zm9y
bVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksICZk
YXRhLCAmaWdub3JlZFNvdXJjZVVSTCwgJmlnbm9yZWQsICZpZ25vcmVkKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgZGF0YSA9IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEN1c3RvbURhdGEo
Y3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSwgbV90eXBlKTsKLQotICAgIHJldHVybiBQbGF0Zm9y
bVN1cHBvcnQ6OmNsaXBib2FyZFNlcXVlbmNlTnVtYmVyKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVy
KCkpID09IG1fc2VxdWVuY2VOdW1iZXIgPyBkYXRhIDogU3RyaW5nKCk7Ci19Ci0KLWJvb2wgRGF0
YVRyYW5zZmVySXRlbUNocm9taXVtOjppc0ZpbGVuYW1lKCkgY29uc3QKLXsKLSAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMjYxOiBXaGVuIHdl
IHByb3Blcmx5IHN1cHBvcnQgRmlsZSBkcmFnb3V0LAotICAgIC8vIHdlJ2xsIG5lZWQgdG8gbWFr
ZSBzdXJlIHRoaXMgd29ya3MgYXMgZXhwZWN0ZWQgZm9yIERyYWdEYXRhQ2hyb21pdW0uCi0gICAg
cmV0dXJuIG1fa2luZCA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSAmJiBtX2ZpbGU7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShEQVRBX1RSQU5T
RkVSX0lURU1TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTkyNWJhMThmYjc5ZDY3ODhjMmEyODFmMDQ4MzM4OTQ4Y2QxOGNiMC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uaAorKysgL2Rldi9udWxsCkBA
IC0xLDk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bV9oCi0jZGVmaW5l
IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bV9oCi0KLSNpZiBFTkFCTEUoREFUQV9UUkFOU0ZFUl9J
VEVNUykKLQotI2luY2x1ZGUgIkZpbGUuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgQmxvYjsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
Ci1jbGFzcyBTdHJpbmdDYWxsYmFjazsKLQotY2xhc3MgRGF0YVRyYW5zZmVySXRlbUNocm9taXVt
IDogcHVibGljIFJlZkNvdW50ZWQ8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBjcmVhdGVG
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGNyZWF0ZUZyb21GaWxl
KFBhc3NSZWZQdHI8RmlsZT4pOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0
ZW1DaHJvbWl1bT4gY3JlYXRlRnJvbVVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiB0aXRsZSk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVt
PiBjcmVhdGVGcm9tSFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0IEtVUkwmIGJhc2VVUkwp
OwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gY3JlYXRl
RnJvbVNoYXJlZEJ1ZmZlcihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4pOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1
bT4gY3JlYXRlRnJvbVBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiB0eXBlLCB1aW50NjRfdCBzZXF1
ZW5jZU51bWJlcik7Ci0KLSAgICBTdHJpbmcga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQotICAgIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgdm9pZCBn
ZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QXNGaWxlKCkgY29uc3Q7Ci0K
LSAgICAvLyBVc2VkIHRvIHN1cHBvcnQgbGVnYWN5IERhdGFUcmFuc2ZlciBBUElzIGFuZCByZW5k
ZXJlci0+YnJvd3NlciBzZXJpYWxpemF0aW9uLgotICAgIFN0cmluZyBpbnRlcm5hbEdldEFzU3Ry
aW5nKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1ZmZlcigp
IGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkQnVmZmVyOyB9Ci0gICAgU3RyaW5nIHRpdGxlKCkgY29u
c3QgeyByZXR1cm4gbV90aXRsZTsgfQotICAgIEtVUkwgYmFzZVVSTCgpIGNvbnN0IHsgcmV0dXJu
IG1fYmFzZVVSTDsgfQotICAgIGJvb2wgaXNGaWxlbmFtZSgpIGNvbnN0OwotCi1wcml2YXRlOgot
ICAgIGVudW0gRGF0YVNvdXJjZSB7Ci0gICAgICAgIFBhc3RlYm9hcmRTb3VyY2UsCi0gICAgICAg
IEludGVybmFsU291cmNlLAotICAgIH07Ci0KLSAgICBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0o
Y29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIHR5cGUpOwotICAgIERhdGFUcmFuc2Zl
ckl0ZW1DaHJvbWl1bShjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSwgdWlu
dDY0X3Qgc2VxdWVuY2VOdW1iZXIpOwotCi0gICAgRGF0YVNvdXJjZSBtX3NvdXJjZTsKLSAgICBT
dHJpbmcgbV9raW5kOwotICAgIFN0cmluZyBtX3R5cGU7Ci0KLSAgICBTdHJpbmcgbV9kYXRhOwot
ICAgIFJlZlB0cjxGaWxlPiBtX2ZpbGU7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9zaGFy
ZWRCdWZmZXI7Ci0gICAgLy8gT3B0aW9uYWwgbWV0YWRhdGEuIEN1cnJlbnRseSB1c2VkIGZvciBV
UkwsIEhUTUwsIGFuZCBkcmFnZ2luZyBmaWxlcyBpbi4KLSAgICBTdHJpbmcgbV90aXRsZTsKLSAg
ICBLVVJMIG1fYmFzZVVSTDsKLQotICAgIHVpbnQ2NF90IG1fc2VxdWVuY2VOdW1iZXI7IC8vIE9u
bHkgdmFsaWQgd2hlbiBtX3NvdXJjZSA9PSBQYXN0ZWJvYXJkU291cmNlCi19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykK
LQotI2VuZGlmIC8vIERhdGFUcmFuc2Zlckl0ZW1faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9t
aXVtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY3NjNkNzA0MTU5YWU4MTk0
YTk1ZDMwODhlMWY3NGMwMWQ1MzRhYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNm
ZXJJdGVtTGlzdENocm9taXVtLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0u
aCIKLQotI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQotCi0jaW5jbHVkZSAiQmxvYlVS
TC5oIgotI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgotI2luY2x1ZGUgIkNsaXBib2Fy
ZENocm9taXVtLmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCi0jaW5jbHVkZSAi
Q2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVt
LmgiCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmgiCi0jaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZpbGUuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgotI2luY2x1ZGUgIlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0
cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9t
aXVtOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRl
bUxpc3RDaHJvbWl1bSgpKTsKLX0KLQotUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENo
cm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGVGcm9tUGFzdGVib2Fy
ZCgpCi17Ci0gICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGxpc3QgPSBj
cmVhdGUoKTsKLSAgICB1aW50NjRfdCBzZXF1ZW5jZU51bWJlciA9IFBsYXRmb3JtU3VwcG9ydDo6
Y2xpcGJvYXJkU2VxdWVuY2VOdW1iZXIoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSk7Ci0gICAg
Ym9vbCBpZ25vcmVkOwotICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcyA9IFBsYXRmb3JtU3VwcG9y
dDo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCks
ICZpZ25vcmVkKTsKLSAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSB0eXBlcy5iZWdpbigpOyBpdCAhPSB0eXBlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgbGlzdC0+
bV9pdGVtTGlzdC5hcHBlbmQoRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tUGFz
dGVib2FyZCgqaXQsIHNlcXVlbmNlTnVtYmVyKSk7Ci0gICAgcmV0dXJuIGxpc3QucmVsZWFzZSgp
OwotfQotCi1EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpEYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtKCkKLXsKLX0KLQotc2l6ZV90IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06
Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXRlbUxpc3Quc2l6ZSgpOwotfQotCi1Q
YXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gRGF0YVRyYW5zZmVySXRlbUxpc3RD
aHJvbWl1bTo6aXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBs
ZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1faXRlbUxpc3RbaW5kZXhd
OwotfQotCi12b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmRlbGV0ZUl0ZW0odW5z
aWduZWQgbG9uZyBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2l0ZW1MaXN0LnJlbW92ZShpbmRleCk7Ci19Ci0KLXZvaWQgRGF0YVRy
YW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6Y2xlYXIoKQotewotICAgIG1faXRlbUxpc3QuY2xlYXIo
KTsKLX0KLQotdm9pZCBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjphZGQoY29uc3QgU3Ry
aW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGlmICghaW50ZXJuYWxBZGRTdHJpbmdJdGVtKERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3Jl
YXRlRnJvbVN0cmluZyh0eXBlLCBkYXRhKSkpCi0gICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9F
UlI7Ci19Ci0KLXZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6YWRkKFBhc3NSZWZQ
dHI8RmlsZT4gZmlsZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBp
ZiAoIWZpbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXRlbUxpc3QuYXBwZW5kKERhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbUZpbGUoZmlsZSkpOwotfQotCi0vLyBGSVhN
RTogTWFrZSBzdXJlIGl0ZW0gaXMgcmVsZWFzZWQgY29ycmVjdGx5IGluIGNhc2Ugb2YgZmFpbHVy
ZS4KLWJvb2wgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6aW50ZXJuYWxBZGRTdHJpbmdJ
dGVtKFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtKQotewotICAgIEFT
U0VSVChpdGVtLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZyk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1MaXN0LnNpemUoKTsgKytpKQotICAgICAgICBp
ZiAobV9pdGVtTGlzdFtpXS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcg
JiYgbV9pdGVtTGlzdFtpXS0+dHlwZSgpID09IGl0ZW0tPnR5cGUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIG1faXRlbUxpc3QuYXBwZW5kKGl0ZW0pOwotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmludGVybmFsQWRk
RmlsZUl0ZW0oUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0pCi17Ci0g
ICAgQVNTRVJUKGl0ZW0tPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSk7Ci0g
ICAgbV9pdGVtTGlzdC5hcHBlbmQoaXRlbSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxp
c3RDaHJvbWl1bS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTQzYWE1YmE5ZGM3
ZTZkMjFlODljMDQ5OWVjYzE1ZThlNTk1ZWZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFU
cmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW1faAotI2RlZmluZSBEYXRhVHJhbnNm
ZXJJdGVtTGlzdENocm9taXVtX2gKLQotI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQot
Ci0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmgiCi0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENocm9taXVtRGF0YU9iamVjdDsK
LWNsYXNzIEZpbGU7Ci1jbGFzcyBLVVJMOwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
LQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxp
c3RDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21p
dW0+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtPiBjcmVhdGUoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJ
dGVtTGlzdENocm9taXVtPiBjcmVhdGVGcm9tUGFzdGVib2FyZCgpOwotCi0gICAgc2l6ZV90IGxl
bmd0aCgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBp
dGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgVjhEYXRh
VHJhbnNmZXJJdGVtTGlzdDo6aW5kZXhlZFByb3BlcnR5RGVsZXRlciB0byBnZXQgdGhpcyBjYWxs
ZWQuCi0gICAgdm9pZCBkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotICAgIHZvaWQg
Y2xlYXIoKTsKLSAgICB2b2lkIGFkZChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYg
dHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYWRkKFBhc3NSZWZQdHI8RmlsZT4sIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ2hy
b21pdW1EYXRhT2JqZWN0OwotCi0gICAgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSgpOwot
Ci0gICAgLy8gRklYTUU6IENvbWJpbmUgd2l0aCBDaHJvbWl1bURhdGFPYmplY3QgdG8gZWxpbWlu
YXRlIHRoZSBuZWVkIGZvciB0aGVzZSBtZXRob2RzLgotICAgIGJvb2wgaW50ZXJuYWxBZGRTdHJp
bmdJdGVtKFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPik7Ci0gICAgdm9pZCBp
bnRlcm5hbEFkZEZpbGVJdGVtKFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPik7
Ci0KLSAgICBWZWN0b3I8UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gPiBtX2l0ZW1M
aXN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKERB
VEFfVFJBTlNGRVJfSVRFTVMpCi0KLSNlbmRpZiAvLyBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9t
aXVtX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRh
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcAppbmRleCBk
YmVmOTVhMGNlZmRjNjY4NmE0MzkxZWUxYzE1OTdiNjA5NTEyZmI2Li5kYmFmYWZlMDExZTdhNjRk
NWQ5YTkwZDc2YTdhOWFhYmE4ZjNmMTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRHJhZ0RhdGEuY3BwCkBAIC03MCw4ICs3MCw4IEBAIHZvaWQgV2ViRHJhZ0RhdGE6OmFzc2ln
bihjb25zdCBXZWJEcmFnRGF0YSYgb3RoZXIpCiBXZWJWZWN0b3I8V2ViRHJhZ0RhdGE6Okl0ZW0+
IFdlYkRyYWdEYXRhOjppdGVtcygpIGNvbnN0CiB7CiAgICAgVmVjdG9yPEl0ZW0+IGl0ZW1MaXN0
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcml2YXRlLT5pdGVtcygpLT5sZW5ndGgo
KTsgKytpKSB7Ci0gICAgICAgIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bSogb3JpZ2luYWxJdGVt
ID0gbV9wcml2YXRlLT5pdGVtcygpLT5pdGVtKGkpLmdldCgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9wcml2YXRlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIENocm9taXVtRGF0
YU9iamVjdEl0ZW0qIG9yaWdpbmFsSXRlbSA9IG1fcHJpdmF0ZS0+aXRlbShpKS5nZXQoKTsKICAg
ICAgICAgV2ViRHJhZ0RhdGE6Okl0ZW0gaXRlbTsKICAgICAgICAgaWYgKG9yaWdpbmFsSXRlbS0+
a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpIHsKICAgICAgICAgICAgIGl0
ZW0uc3RvcmFnZVR5cGUgPSBJdGVtOjpTdG9yYWdlVHlwZVN0cmluZzsK
</data>

          </attachment>
      

    </bug>

</bugzilla>