<?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>37231</bug_id>
          
          <creation_ts>2010-04-07 14:21:09 -0700</creation_ts>
          <short_desc>[chromium] Move GraphicsLayer-related files from platform/graphics/skia to platform/graphics/chromium</short_desc>
          <delta_ts>2010-04-10 22:03:24 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Vangelis Kokkevis">vangelis</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>209838</commentid>
    <comment_count>0</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-04-07 14:21:09 -0700</bug_when>
    <thetext>Classes in these files have already been renamed in:

https://bugs.webkit.org/show_bug.cgi?id=37116

and they now should be moved to their final location.  Files are moving out of Skia as they will be used with both Skia (Windows/Linux) and CG (mac) based RenderContext&apos;s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209857</commentid>
    <comment_count>1</comment_count>
      <attachid>52786</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-04-07 14:53:19 -0700</bug_when>
    <thetext>Created attachment 52786
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209860</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-07 14:56:49 -0700</bug_when>
    <thetext>Attachment 52786 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WARNING: Skipping non-existent file: WebCore/platform/graphics/skia/LayerRendererSkia.h
WARNING: Skipping non-existent file: WebCore/platform/graphics/skia/GraphicsLayerSkia.cpp
WebCore/platform/graphics/chromium/LayerChromium.h:72:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/chromium/LayerChromium.h:75:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/chromium/LayerChromium.h:78:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/chromium/LayerChromium.h:81:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/chromium/LayerChromium.h:84:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/chromium/LayerChromium.h:90:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/chromium/LayerChromium.h:93:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/chromium/LayerChromium.h:96:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/chromium/LayerChromium.h:99:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/chromium/LayerChromium.h:105:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/chromium/LayerChromium.h:119:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/chromium/LayerChromium.h:122:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/chromium/LayerChromium.h:125:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/chromium/LayerChromium.h:129:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/chromium/LayerChromium.h:150:  More than one command on the same line  [whitespace/newline] [4]
WARNING: Skipping non-existent file: WebCore/platform/graphics/skia/GraphicsLayerSkia.h
WARNING: Skipping non-existent file: WebCore/platform/graphics/skia/LayerRendererSkia.cpp
WARNING: Skipping non-existent file: WebCore/platform/graphics/skia/LayerSkia.h
WARNING: Skipping non-existent file: WebCore/platform/graphics/skia/LayerSkia.cpp
Total errors found: 15 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210410</commentid>
    <comment_count>3</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-04-08 15:05:39 -0700</bug_when>
    <thetext>I believe all the style warnings are false positives for multiple commands on the same line in inline method definitions in a header.  This CL merely moves and renames files but doesn&apos;t change their contents (other than adjusting the #include&apos;s).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210454</commentid>
    <comment_count>4</comment_count>
      <attachid>52786</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-04-08 15:59:19 -0700</bug_when>
    <thetext>Comment on attachment 52786
Proposed patch

ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211035</commentid>
    <comment_count>5</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-04-09 17:11:29 -0700</bug_when>
    <thetext>Dimitri,
 Can you please flip the commit queue bit when you get a chance? 
Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211281</commentid>
    <comment_count>6</comment_count>
      <attachid>52786</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-10 22:03:18 -0700</bug_when>
    <thetext>Comment on attachment 52786
Proposed patch

Clearing flags on attachment: 52786

Committed r57436: &lt;http://trac.webkit.org/changeset/57436&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211282</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-10 22:03:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52786</attachid>
            <date>2010-04-07 14:53:19 -0700</date>
            <delta_ts>2010-04-10 22:03:18 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>ChromiumRename.txt</filename>
            <type>text/plain</type>
            <size>103198</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzIzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDQtMDcgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE1vdmluZyBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIEdQVSBjb21wb3NpdG9yIGZy
b20gcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYSB0byBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS4g
Q2xhc3MKKyAgICAgICAgcmVuYW1lIHdhcyBkb25lIGluIGEgcHJldmlvdXMgQ0wsIHRoaXMgQ0wg
ZG9lcyB0aGUgZmlsZSBtb3ZlIGFuZCByZW5hbWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzIzMQorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFs
aXR5LCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDogQ29w
aWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lh
LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uaDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dy
YXBoaWNzTGF5ZXJTa2lhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9MYXllclNraWEuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0xheWVyU2tpYS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6IENvcGllZCBmcm9tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NMYXllclNraWEuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NMYXllclNraWEuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyUmVuZGVyZXJTa2lh
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyUmVu
ZGVyZXJTa2lhLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9M
YXllclNraWEuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
TGF5ZXJTa2lhLmg6IFJlbW92ZWQuCisKIDIwMTAtMDQtMDcgIEFsZXhleSBQcm9za3VyeWFrb3Yg
IDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50
aWNhdGlvbk1hYy5tbTogRml4IGEgdHlwbyBpbiBjb21tZW50LgpJbmRleDogV2ViQ29yZS9XZWJD
b3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDU3
MjIyKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTIwNTMsMTEg
KzIwNTMsMTcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250
VXRpbHNDaHJvbWl1bVdpbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUNocm9taXVtV2luLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVMaW51eC5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JY29uQ2hyb21pdW1MaW51eC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ljb25DaHJvbWl1bU1hYy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ljb25DaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtTWFjLm1tJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1JY29uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwJywKQEAgLTIx
ODUsMTYgKzIxOTEsMTAgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAnLAotICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NMYXllclNraWEuY3BwJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ludFBvaW50U2tpYS5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW50UmVjdFNraWEuY3BwJywKLSAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyUmVuZGVyZXJTa2lhLmNwcCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5oJywKLSAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyU2tpYS5jcHAnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJTa2lhLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHAnLApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmNwcAkocmV2aXNpb24gNTcyMjcpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9HcmFwaGljc0xheWVyU2tpYS5jcHA6NTcyMjcpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworCisvKiogRklYTUUKKyAqIFRoaXMgZmlsZSBib3Jyb3dzIGNv
ZGUgaGVhdmlseSBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5j
cHAKKyAqIChhbmQgaGVuY2UgaXQgaW5jbHVkZXMgYm90aCBjb3B5cmlnaHRzKQorICogSWRlYWxs
eSB0aGUgY29tbW9uIGNvZGUgKG1vc3RseSB0aGUgY29kZSB0aGF0IGtlZXBzIHRyYWNrIG9mIHRo
ZSBsYXllciBoaWVyYXJjaHkpCisgKiBzaG91bGQgYmUga2VwdCBzZXBhcmF0ZSBhbmQgc2hhcmVk
IGJldHdlZW4gcGxhdGZvcm1zLiBJdCB3b3VsZCBiZSBhIHdlbGwgd29ydGh3aGlsZQorICogZWZm
b3J0IG9uY2UgdGhlIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gKGJpbmFyaWVzIGFuZCBoZWFkZXJz
KSBvZiBDb3JlQW5pbWF0aW9uIGlzCisgKiBjaGVja2VkIGluIHRvIHRoZSBXZWJLaXQgcmVwb3Np
dG9yeS4gVW50aWwgdGhlbiBvbmx5IEFwcGxlIGNhbiBtYWtlIHRoaXMgaGFwcGVuLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJTa2lhLmgiCisKKyNpbmNsdWRlICJGbG9hdENvbnZl
cnNpb24uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2lu
Y2x1ZGUgIkxheWVyU2tpYS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiU3lzdGVtVGltZS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQg
c2V0TGF5ZXJCb3JkZXJDb2xvcihMYXllckNocm9taXVtJiBsYXllciwgY29uc3QgQ29sb3ImIGNv
bG9yKQoreworICAgIGxheWVyLnNldEJvcmRlckNvbG9yKGNvbG9yKTsKK30KKworc3RhdGljIHZv
aWQgY2xlYXJCb3JkZXJDb2xvcihMYXllckNocm9taXVtJiBsYXllcikKK3sKKyAgICBsYXllci5z
ZXRCb3JkZXJDb2xvcigwKTsKK30KKworc3RhdGljIHZvaWQgc2V0TGF5ZXJCYWNrZ3JvdW5kQ29s
b3IoTGF5ZXJDaHJvbWl1bSYgbGF5ZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBsYXll
ci5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpOworfQorCitzdGF0aWMgdm9pZCBjbGVhckxheWVy
QmFja2dyb3VuZENvbG9yKExheWVyQ2hyb21pdW0mIGxheWVyKQoreworICAgIGxheWVyLnNldEJh
Y2tncm91bmRDb2xvcigwKTsKK30KKworR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGlu
YXRlc09yaWVudGF0aW9uIEdyYXBoaWNzTGF5ZXI6OmNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmll
bnRhdGlvbigpCit7CisgICAgcmV0dXJuIENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNCb3R0b21VcDsK
K30KKworUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3Jh
cGhpY3NMYXllckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBuZXcgR3JhcGhpY3NMYXll
ckNocm9taXVtKGNsaWVudCk7Cit9CisKK0dyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6R3JhcGhpY3NM
YXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IEdyYXBoaWNz
TGF5ZXIoY2xpZW50KQorICAgICwgbV9jb250ZW50c0xheWVyUHVycG9zZShOb0NvbnRlbnRzTGF5
ZXIpCisgICAgLCBtX2NvbnRlbnRzTGF5ZXJIYXNCYWNrZ3JvdW5kQ29sb3IoZmFsc2UpCit7Cisg
ICAgbV9sYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZShMYXllckNocm9taXVtOjpMYXllciwg
dGhpcyk7CisKKyAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKK30KKworR3JhcGhpY3NMYXll
ckNocm9taXVtOjp+R3JhcGhpY3NMYXllckNocm9taXVtKCkKK3sKKyAgICAvLyBDbGVhbiB1cCB0
aGUgU2tpYSBsYXllci4KKyAgICBpZiAobV9sYXllcikKKyAgICAgICAgbV9sYXllci0+cmVtb3Zl
RnJvbVN1cGVybGF5ZXIoKTsKKworICAgIGlmIChtX3RyYW5zZm9ybUxheWVyKQorICAgICAgICBt
X3RyYW5zZm9ybUxheWVyLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOworfQorCit2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmFtZShjb25zdCBTdHJpbmcmIGluTmFtZSkKK3sKKyAgICBT
dHJpbmcgbmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJHcmFwaGljc0xheWVyQ2hyb21pdW0oJXApIEdy
YXBoaWNzTGF5ZXIoJXApICIsIG1fbGF5ZXIuZ2V0KCksIHRoaXMpICsgaW5OYW1lOworICAgIEdy
YXBoaWNzTGF5ZXI6OnNldE5hbWUobmFtZSk7Cit9CisKK05hdGl2ZUxheWVyIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6bmF0aXZlTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLmdl
dCgpOworfQorCitib29sIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q2hpbGRyZW4oY29uc3Qg
VmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCit7CisgICAgYm9vbCBjaGlsZHJlbkNo
YW5nZWQgPSBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjaGlsZHJlbik7CisgICAgLy8gRklY
TUU6IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuIGNhbGxzIGFkZENoaWxkKCkgZm9yIGVhY2gg
c3VibGF5ZXIsIHdoaWNoCisgICAgLy8gd2lsbCBlbmQgdXAgY2FsbGluZyB1cGRhdGVTdWJsYXll
ckxpc3QoKSBOIHRpbWVzLgorICAgIGlmIChjaGlsZHJlbkNoYW5nZWQpCisgICAgICAgIHVwZGF0
ZVN1YmxheWVyTGlzdCgpOworCisgICAgcmV0dXJuIGNoaWxkcmVuQ2hhbmdlZDsKK30KKwordm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5
ZXIpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoY2hpbGRMYXllcik7CisgICAgdXBk
YXRlU3VibGF5ZXJMaXN0KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjphZGRD
aGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogY2hpbGRMYXllciwgaW50IGluZGV4KQoreworICAg
IEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChjaGlsZExheWVyLCBpbmRleCk7CisgICAg
dXBkYXRlU3VibGF5ZXJMaXN0KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjph
ZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNp
YmxpbmcpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhjaGlsZExheWVyLCBz
aWJsaW5nKTsKKyAgICB1cGRhdGVTdWJsYXllckxpc3QoKTsKK30KKwordm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogY2hpbGRMYXllciwgR3Jh
cGhpY3NMYXllciAqc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3Zl
KGNoaWxkTGF5ZXIsIHNpYmxpbmcpOworICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOworfQorCiti
b29sIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9s
ZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKK3sKKyAgICBpZiAoR3JhcGhpY3NMYXll
cjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCkpIHsKKyAgICAgICAgdXBkYXRlU3Vi
bGF5ZXJMaXN0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1vdmVGcm9tUGFyZW50KCkK
K3sKKyAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7CisgICAgbGF5ZXJGb3JT
dXBlcmxheWVyKCktPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAg
ICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwb2ludCk7CisgICAgdXBkYXRlTGF5ZXJQb3Np
dGlvbigpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0QW5jaG9yUG9pbnQo
Y29uc3QgRmxvYXRQb2ludDNEJiBwb2ludCkKK3sKKyAgICBpZiAocG9pbnQgPT0gbV9hbmNob3JQ
b2ludCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9p
bnQocG9pbnQpOworICAgIHVwZGF0ZUFuY2hvclBvaW50KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAo
c2l6ZSA9PSBtX3NpemUpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dFNpemUoc2l6ZSk7CisgICAgdXBkYXRlTGF5ZXJTaXplKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSkKK3sKKyAgICBpZiAodHJhbnNmb3JtID09IG1fdHJhbnNmb3JtKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAg
ICB1cGRhdGVUcmFuc2Zvcm0oKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0p
Cit7CisgICAgaWYgKHRyYW5zZm9ybSA9PSBtX2NoaWxkcmVuVHJhbnNmb3JtKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybSh0cmFuc2Zv
cm0pOworICAgIHVwZGF0ZUNoaWxkcmVuVHJhbnNmb3JtKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjpzZXRQcmVzZXJ2ZXMzRChib29sIHByZXNlcnZlczNEKQoreworICAgIGlm
IChwcmVzZXJ2ZXMzRCA9PSBtX3ByZXNlcnZlczNEKQorICAgICAgICByZXR1cm47CisKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCk7CisgICAgdXBkYXRlTGF5
ZXJQcmVzZXJ2ZXMzRCgpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TWFz
a3NUb0JvdW5kcyhib29sIG1hc2tzVG9Cb3VuZHMpCit7CisgICAgaWYgKG1hc2tzVG9Cb3VuZHMg
PT0gbV9tYXNrc1RvQm91bmRzKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVy
OjpzZXRNYXNrc1RvQm91bmRzKG1hc2tzVG9Cb3VuZHMpOworICAgIHVwZGF0ZU1hc2tzVG9Cb3Vu
ZHMoKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldERyYXdzQ29udGVudChi
b29sIGRyYXdzQ29udGVudCkKK3sKKyAgICBpZiAoZHJhd3NDb250ZW50ID09IG1fZHJhd3NDb250
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRl
bnQoZHJhd3NDb250ZW50KTsKKyAgICB1cGRhdGVMYXllckRyYXdzQ29udGVudCgpOworfQorCit2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikKK3sKKyAgICBpZiAobV9iYWNrZ3JvdW5kQ29sb3JTZXQgJiYgbV9iYWNrZ3JvdW5k
Q29sb3IgPT0gY29sb3IpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dEJhY2tncm91bmRDb2xvcihjb2xvcik7CisKKyAgICBtX2NvbnRlbnRzTGF5ZXJIYXNCYWNrZ3Jv
dW5kQ29sb3IgPSB0cnVlOworICAgIHVwZGF0ZUxheWVyQmFja2dyb3VuZENvbG9yKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpjbGVhckJhY2tncm91bmRDb2xvcigpCit7Cisg
ICAgaWYgKCFtX2JhY2tncm91bmRDb2xvclNldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3Jh
cGhpY3NMYXllcjo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBjbGVhckxheWVyQmFja2dy
b3VuZENvbG9yKCptX2NvbnRlbnRzTGF5ZXIpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCBvcGFxdWUpCit7CisgICAgaWYgKG1fY29udGVu
dHNPcGFxdWUgPT0gb3BhcXVlKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c09wYXF1ZShvcGFxdWUpOworICAgIHVwZGF0ZUNvbnRlbnRzT3BhcXVlKCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNrZmFjZVZpc2liaWxpdHko
Ym9vbCB2aXNpYmxlKQoreworICAgIGlmIChtX2JhY2tmYWNlVmlzaWJpbGl0eSA9PSB2aXNpYmxl
KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2li
aWxpdHkodmlzaWJsZSk7CisgICAgdXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCit7Cisg
ICAgZmxvYXQgY2xhbXBlZE9wYWNpdHkgPSBtYXgobWluKG9wYWNpdHksIDEuMGYpLCAwLjBmKTsK
KworICAgIGlmIChtX29wYWNpdHkgPT0gY2xhbXBlZE9wYWNpdHkpCisgICAgICAgIHJldHVybjsK
KworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoY2xhbXBlZE9wYWNpdHkpOworICAgIHBy
aW1hcnlMYXllcigpLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworfQorCit2b2lkIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBpZiAoZHJhd3NDb250ZW50KCkp
CisgICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKKyAgICBpZiAoZHJhd3NDb250ZW50KCkpCisgICAgICAgIG1fbGF5ZXItPnNldE5lZWRz
RGlzcGxheShyZWN0KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRl
bnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChyZWN0ID09IG1fY29udGVu
dHNSZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50
c1JlY3QocmVjdCk7CisgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dENvbnRlbnRzVG9WaWRlbyhQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyKQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldEdlb21l
dHJ5T3JpZW50YXRpb24oQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG9yaWVudGF0
aW9uKQoreworICAgIGlmIChvcmllbnRhdGlvbiA9PSBtX2dlb21ldHJ5T3JpZW50YXRpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEdlb21ldHJ5T3JpZW50YXRp
b24ob3JpZW50YXRpb24pOworICAgIHVwZGF0ZUdlb21ldHJ5T3JpZW50YXRpb24oKTsKK30KKwor
UGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllckNocm9taXVtOjpob3N0TGF5ZXJGb3JTdWJsYXll
cnMoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybUxheWVyID8gbV90cmFuc2Zvcm1M
YXllci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6bGF5ZXJGb3JTdXBlcmxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV90cmFuc2Zvcm1MYXllciA/IG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgOiBtX2xheWVyLmdldCgp
OworfQorCitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBsYXRmb3JtTGF5
ZXIoKSBjb25zdAoreworICAgIHJldHVybiBwcmltYXJ5TGF5ZXIoKTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnNldERlYnVnQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKK3sKKyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKQorICAgICAgICBzZXRMYXllckJhY2tn
cm91bmRDb2xvcigqbV9sYXllciwgY29sb3IpOworICAgIGVsc2UKKyAgICAgICAgY2xlYXJMYXll
ckJhY2tncm91bmRDb2xvcigqbV9sYXllcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9t
aXVtOjpzZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IGJvcmRlcldpZHRo
KQoreworICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgc2V0TGF5ZXJCb3JkZXJD
b2xvcigqbV9sYXllciwgY29sb3IpOworICAgICAgICBtX2xheWVyLT5zZXRCb3JkZXJXaWR0aChi
b3JkZXJXaWR0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2xlYXJCb3JkZXJDb2xvcigqbV9s
YXllcik7CisgICAgICAgIG1fbGF5ZXItPnNldEJvcmRlcldpZHRoKDApOworICAgIH0KK30KKwor
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZVN1YmxheWVyTGlzdCgpCit7CisgICAg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG5ld1N1YmxheWVyczsKKworICAgIGlmICht
X3RyYW5zZm9ybUxheWVyKSB7CisgICAgICAgIC8vIEFkZCB0aGUgcHJpbWFyeSBsYXllciBmaXJz
dC4gRXZlbiBpZiB3ZSBoYXZlIG5lZ2F0aXZlIHotb3JkZXIgY2hpbGRyZW4sIHRoZSBwcmltYXJ5
IGxheWVyIGFsd2F5cyBjb21lcyBiZWhpbmQuCisgICAgICAgIG5ld1N1YmxheWVycy5hcHBlbmQo
bV9sYXllci5nZXQoKSk7CisgICAgfSBlbHNlIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKKyAgICAg
ICAgLy8gRklYTUU6IGFkZCB0aGUgY29udGVudHMgbGF5ZXIgaW4gdGhlIGNvcnJlY3Qgb3JkZXIg
d2l0aCBuZWdhdGl2ZSB6LW9yZGVyIGNoaWxkcmVuLgorICAgICAgICAvLyBUaGlzIGRvZXMgbm90
IGNhdXNlIHZpc2libGUgcmVuZGVyaW5nIGlzc3VlcyBiZWNhdXNlIGN1cnJlbnRseSBjb250ZW50
cyBsYXllcnMgYXJlIG9ubHkgdXNlZAorICAgICAgICAvLyBmb3IgcmVwbGFjZWQgZWxlbWVudHMg
dGhhdCBkb24ndCBoYXZlIGNoaWxkcmVuLgorICAgICAgICBuZXdTdWJsYXllcnMuYXBwZW5kKG1f
Y29udGVudHNMYXllci5nZXQoKSk7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPEdyYXBoaWNz
TGF5ZXIqPiYgY2hpbGRMYXllcnMgPSBjaGlsZHJlbigpOworICAgIHNpemVfdCBudW1DaGlsZHJl
biA9IGNoaWxkTGF5ZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUNo
aWxkcmVuOyArK2kpIHsKKyAgICAgICAgR3JhcGhpY3NMYXllckNocm9taXVtKiBjdXJDaGlsZCA9
IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSo+KGNoaWxkTGF5ZXJzW2ldKTsKKwor
ICAgICAgICBMYXllckNocm9taXVtKiBjaGlsZExheWVyID0gY3VyQ2hpbGQtPmxheWVyRm9yU3Vw
ZXJsYXllcigpOworICAgICAgICBuZXdTdWJsYXllcnMuYXBwZW5kKGNoaWxkTGF5ZXIpOworICAg
IH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3U3VibGF5ZXJzLnNpemUoKTsgKytp
KQorICAgICAgICBuZXdTdWJsYXllcnNbaV0tPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CisKKyAg
ICBpZiAobV90cmFuc2Zvcm1MYXllcikgeworICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXRT
dWJsYXllcnMobmV3U3VibGF5ZXJzKTsKKworICAgICAgICBpZiAobV9jb250ZW50c0xheWVyKSB7
CisgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdHJhbnNmb3JtIGxheWVyLCB0aGVuIHRoZSBj
b250ZW50cyBsYXllciBpcyBwYXJlbnRlZCBpbiB0aGUKKyAgICAgICAgICAgIC8vIHByaW1hcnkg
bGF5ZXIgKHdoaWNoIGlzIGl0c2VsZiBhIGNoaWxkIG9mIHRoZSB0cmFuc2Zvcm0gbGF5ZXIpLgor
ICAgICAgICAgICAgbV9sYXllci0+cmVtb3ZlQWxsU3VibGF5ZXJzKCk7CisgICAgICAgICAgICBt
X2xheWVyLT5hZGRTdWJsYXllcihtX2NvbnRlbnRzTGF5ZXIpOworICAgICAgICB9CisgICAgfSBl
bHNlCisgICAgICAgIG1fbGF5ZXItPnNldFN1YmxheWVycyhuZXdTdWJsYXllcnMpOworfQorCit2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQb3NpdGlvbigpCit7CisgICAg
Ly8gUG9zaXRpb24gaXMgb2Zmc2V0IG9uIHRoZSBsYXllciBieSB0aGUgbGF5ZXIgYW5jaG9yIHBv
aW50LgorICAgIEZsb2F0UG9pbnQgbGF5ZXJQb3NpdGlvbihtX3Bvc2l0aW9uLngoKSArIG1fYW5j
aG9yUG9pbnQueCgpICogbV9zaXplLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcG9zaXRpb24ueSgpICsgbV9hbmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0KCkp
OworCisgICAgcHJpbWFyeUxheWVyKCktPnNldFBvc2l0aW9uKGxheWVyUG9zaXRpb24pOworfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJTaXplKCkKK3sKKyAgICBJ
bnRTaXplIGxheWVyU2l6ZShtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBp
ZiAobV90cmFuc2Zvcm1MYXllcikgeworICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXRCb3Vu
ZHMobGF5ZXJTaXplKTsKKyAgICAgICAgLy8gVGhlIGFuY2hvciBvZiB0aGUgY29udGVudHMgbGF5
ZXIgaXMgYWx3YXlzIGF0IDAuNSwgMC41LCBzbyB0aGUgcG9zaXRpb24gaXMgY2VudGVyLXJlbGF0
aXZlLgorICAgICAgICBGbG9hdFBvaW50IGNlbnRlclBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMiwg
bV9zaXplLmhlaWdodCgpIC8gMik7CisgICAgICAgIG1fbGF5ZXItPnNldFBvc2l0aW9uKGNlbnRl
clBvaW50KTsKKyAgICB9CisKKyAgICBtX2xheWVyLT5zZXRCb3VuZHMobGF5ZXJTaXplKTsKKwor
ICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCByZXNpemUgbV9jb250ZW50c0xheWVyLiBJdCdzIHVw
IHRoZSBjYWxsZXIgdG8gZG8gdGhhdC4KKworICAgIC8vIElmIHdlJ3ZlIGNoYW5nZWQgdGhlIGJv
dW5kcywgd2UgbmVlZCB0byByZWNhbGN1bGF0ZSB0aGUgcG9zaXRpb24KKyAgICAvLyBvZiB0aGUg
bGF5ZXIsIHRha2luZyBhbmNob3IgcG9pbnQgaW50byBhY2NvdW50LgorICAgIHVwZGF0ZUxheWVy
UG9zaXRpb24oKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUFuY2hv
clBvaW50KCkKK3sKKyAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2lu
dChtX2FuY2hvclBvaW50LngoKSwgbV9hbmNob3JQb2ludC55KCkpKTsKKyAgICBwcmltYXJ5TGF5
ZXIoKS0+c2V0QW5jaG9yUG9pbnRaKG1fYW5jaG9yUG9pbnQueigpKTsKKyAgICB1cGRhdGVMYXll
clBvc2l0aW9uKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVUcmFu
c2Zvcm0oKQoreworICAgIHByaW1hcnlMYXllcigpLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zvcm0p
OworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ2hpbGRyZW5UcmFuc2Zv
cm0oKQoreworICAgIHByaW1hcnlMYXllcigpLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxk
cmVuVHJhbnNmb3JtKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZU1h
c2tzVG9Cb3VuZHMoKQoreworICAgIG1fbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobV9tYXNrc1Rv
Qm91bmRzKTsKKyAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKK30KKwordm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzT3BhcXVlKCkKK3sKKyAgICBtX2xheWVyLT5z
ZXRPcGFxdWUobV9jb250ZW50c09wYXF1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9t
aXVtOjp1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKQoreworICAgIG1fbGF5ZXItPnNldERvdWJs
ZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyRHJhd3NDb250
ZW50KCkKK3sKKyAgICBpZiAobV9kcmF3c0NvbnRlbnQpCisgICAgICAgIG1fbGF5ZXItPnNldE5l
ZWRzRGlzcGxheSgpOworCisgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllckJhY2tncm91bmRDb2xvcigpCit7Cisg
ICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIG5l
dmVyIGNyZWF0ZSB0aGUgY29udGVudHMgbGF5ZXIganVzdCBmb3IgYmFja2dyb3VuZCBjb2xvciB5
ZXQuCisgICAgaWYgKG1fYmFja2dyb3VuZENvbG9yU2V0KQorICAgICAgICBzZXRMYXllckJhY2tn
cm91bmRDb2xvcigqbV9jb250ZW50c0xheWVyLCBtX2JhY2tncm91bmRDb2xvcik7CisgICAgZWxz
ZQorICAgICAgICBjbGVhckxheWVyQmFja2dyb3VuZENvbG9yKCptX2NvbnRlbnRzTGF5ZXIpOwor
fQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJbWFnZSgpCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudAorfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29udGVudHNWaWRlbygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudAorfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNSZWN0KCkKK3sKKyAg
ICBpZiAoIW1fY29udGVudHNMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZW50
c0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KG1fY29udGVudHNSZWN0LngoKSwgbV9jb250
ZW50c1JlY3QueSgpKSk7CisgICAgbV9jb250ZW50c0xheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSht
X2NvbnRlbnRzUmVjdC53aWR0aCgpLCBtX2NvbnRlbnRzUmVjdC5oZWlnaHQoKSkpOworfQorCit2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlR2VvbWV0cnlPcmllbnRhdGlvbigpCit7
CisgICAgc3dpdGNoIChnZW9tZXRyeU9yaWVudGF0aW9uKCkpIHsKKyAgICBjYXNlIENvbXBvc2l0
aW5nQ29vcmRpbmF0ZXNUb3BEb3duOgorICAgICAgICBtX2xheWVyLT5zZXRHZW9tZXRyeUZsaXBw
ZWQoZmFsc2UpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ29tcG9zaXRpbmdDb29yZGlu
YXRlc0JvdHRvbVVwOgorICAgICAgICBtX2xheWVyLT5zZXRHZW9tZXRyeUZsaXBwZWQodHJ1ZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBHZW9tZXRyeSBvcmllbnRhdGlvbiBpcyBt
YXBwZWQgb250byBjaGlsZHJlbiB0cmFuc2Zvcm0gaW4gb2xkZXIgUXVhcnR6Q29yZXMsCisgICAg
Ly8gc28gaXMgaGFuZGxlZCB2aWEgc2V0R2VvbWV0cnlPcmllbnRhdGlvbigpLgorfQorCit2b2lk
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0dXBDb250ZW50c0xheWVyKExheWVyQ2hyb21pdW0q
IGNvbnRlbnRzTGF5ZXIpCit7CisgICAgaWYgKGNvbnRlbnRzTGF5ZXIgPT0gbV9jb250ZW50c0xh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jb250ZW50c0xheWVyKSB7CisgICAg
ICAgIG1fY29udGVudHNMYXllci0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKKyAgICAgICAgbV9j
b250ZW50c0xheWVyID0gMDsKKyAgICB9CisKKyAgICBpZiAoY29udGVudHNMYXllcikgeworICAg
ICAgICBtX2NvbnRlbnRzTGF5ZXIgPSBjb250ZW50c0xheWVyOworCisgICAgICAgIG1fY29udGVu
dHNMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CisKKyAgICAgICAgLy8g
SW5zZXJ0IHRoZSBjb250ZW50IGxheWVyIGZpcnN0LiBWaWRlbyBlbGVtZW50cyByZXF1aXJlIHRo
aXMsIGJlY2F1c2UgdGhleSBoYXZlCisgICAgICAgIC8vIHNoYWRvdyBjb250ZW50IHRoYXQgbXVz
dCBkaXNwbGF5IGluIGZyb250IG9mIHRoZSB2aWRlby4KKyAgICAgICAgbV9sYXllci0+aW5zZXJ0
U3VibGF5ZXIobV9jb250ZW50c0xheWVyLmdldCgpLCAwKTsKKworICAgICAgICB1cGRhdGVDb250
ZW50c1JlY3QoKTsKKworICAgICAgICBpZiAoc2hvd0RlYnVnQm9yZGVycygpKSB7CisgICAgICAg
ICAgICBzZXRMYXllckJvcmRlckNvbG9yKCptX2NvbnRlbnRzTGF5ZXIsIENvbG9yKDAsIDAsIDEy
OCwgMTgwKSk7CisgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldEJvcmRlcldpZHRoKDEp
OworICAgICAgICB9CisgICAgfQorICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOworfQorCisv
LyBUaGlzIGZ1bmN0aW9uIHNpbXBseSBtaW1pY3MgdGhlIG9wZXJhdGlvbiBvZiBHcmFwaGljc0xh
eWVyQ0EKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVPcGFjaXR5T25MYXllcigp
Cit7CisgICAgcHJpbWFyeUxheWVyKCktPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNTcyMjIpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEyICs0MywxMiBAQAogCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllclNraWEuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKIAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lv
bi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVk
ZSAiTGF5ZXJTa2lhLmgiCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA1NzIyNykJ
KGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmg6
NTcyMjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHcmFw
aGljc0xheWVyU2tpYV9oCisjZGVmaW5lIEdyYXBoaWNzTGF5ZXJTa2lhX2gKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBMYXllckNocm9taXVtOworCitjbGFzcyBHcmFwaGljc0xheWVyQ2hyb21pdW0gOiBwdWJsaWMg
R3JhcGhpY3NMYXllciB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NMYXllckNocm9taXVtKEdyYXBo
aWNzTGF5ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5HcmFwaGljc0xheWVyQ2hyb21pdW0oKTsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOworCisgICAgLy8gZm9y
IGhvc3RpbmcgdGhpcyBHcmFwaGljc0xheWVyIGluIGEgbmF0aXZlIGxheWVyIGhpZXJhcmNoeQor
ICAgIHZpcnR1YWwgTmF0aXZlTGF5ZXIgbmF0aXZlTGF5ZXIoKSBjb25zdDsKKworICAgIHZpcnR1
YWwgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CisgICAg
dmlydHVhbCB2b2lkIGFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQgaW5kZXgpOworICAgIHZpcnR1YWwg
dm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKiBzaWJsaW5n
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiwgR3JhcGhp
Y3NMYXllciogc2libGluZyk7CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZChHcmFwaGlj
c0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQpOworCisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNv
bnN0IEZsb2F0UG9pbnQzRCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEZsb2F0
U2l6ZSYpOworCisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYpOworCisgICAgdmlydHVhbCB2b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2Vy
dmVzM0QoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJCYWNrZ3JvdW5kQ29sb3IoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c09wYXF1
ZShib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wpOwor
CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOworCisgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzRGlzcGxheSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJl
Y3QoY29uc3QgRmxvYXRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNSZWN0
KGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2Uo
SW1hZ2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb1ZpZGVvKFBsYXRmb3JtTGF5
ZXIqKTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
OworCisgICAgdmlydHVhbCB2b2lkIHNldERlYnVnQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9y
Jik7CisgICAgdmlydHVhbCB2b2lkIHNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiwgZmxvYXQg
Ym9yZGVyV2lkdGgpOworCisgICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5T3JpZW50YXRpb24o
Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uKTsKKworICAgIHZvaWQgbm90aWZ5U3lu
Y1JlcXVpcmVkKCkKKyAgICB7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1f
Y2xpZW50LT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7CisgICAgfQorCitwcml2YXRlOgorICAg
IHZvaWQgdXBkYXRlT3BhY2l0eU9uTGF5ZXIoKTsKKworICAgIExheWVyQ2hyb21pdW0qIHByaW1h
cnlMYXllcigpIGNvbnN0ICB7IHJldHVybiBtX3RyYW5zZm9ybUxheWVyLmdldCgpID8gbV90cmFu
c2Zvcm1MYXllci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7IH0KKyAgICBMYXllckNocm9taXVtKiBo
b3N0TGF5ZXJGb3JTdWJsYXllcnMoKSBjb25zdDsKKyAgICBMYXllckNocm9taXVtKiBsYXllckZv
clN1cGVybGF5ZXIoKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlU3VibGF5ZXJMaXN0KCk7Cisg
ICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uKCk7CisgICAgdm9pZCB1cGRhdGVMYXllclNpemUo
KTsKKyAgICB2b2lkIHVwZGF0ZUFuY2hvclBvaW50KCk7CisgICAgdm9pZCB1cGRhdGVUcmFuc2Zv
cm0oKTsKKyAgICB2b2lkIHVwZGF0ZUNoaWxkcmVuVHJhbnNmb3JtKCk7CisgICAgdm9pZCB1cGRh
dGVNYXNrc1RvQm91bmRzKCk7CisgICAgdm9pZCB1cGRhdGVDb250ZW50c09wYXF1ZSgpOworICAg
IHZvaWQgdXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCk7CisgICAgdm9pZCB1cGRhdGVMYXllclBy
ZXNlcnZlczNEKCk7CisgICAgdm9pZCB1cGRhdGVMYXllckRyYXdzQ29udGVudCgpOworICAgIHZv
aWQgdXBkYXRlTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKTsKKworICAgIHZvaWQgdXBkYXRlQ29udGVu
dHNJbWFnZSgpOworICAgIHZvaWQgdXBkYXRlQ29udGVudHNWaWRlbygpOworICAgIHZvaWQgdXBk
YXRlQ29udGVudHNSZWN0KCk7CisgICAgdm9pZCB1cGRhdGVHZW9tZXRyeU9yaWVudGF0aW9uKCk7
CisKKyAgICB2b2lkIHNldHVwQ29udGVudHNMYXllcihMYXllckNocm9taXVtKik7CisgICAgTGF5
ZXJDaHJvbWl1bSogY29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXll
ci5nZXQoKTsgfQorCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fbGF5ZXI7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IG1fdHJhbnNmb3JtTGF5ZXI7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IG1fY29udGVudHNMYXllcjsKKworICAgIGVudW0gQ29udGVudHNMYXllclB1cnBvc2Ug
eworICAgICAgICBOb0NvbnRlbnRzTGF5ZXIgPSAwLAorICAgICAgICBDb250ZW50c0xheWVyRm9y
SW1hZ2UsCisgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JWaWRlbworICAgIH07CisKKyAgICBDb250
ZW50c0xheWVyUHVycG9zZSBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlOworICAgIGJvb2wgbV9jb250
ZW50c0xheWVySGFzQmFja2dyb3VuZENvbG9yIDogMTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgJKHJldmlzaW9uIDU3MjIyKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVm
IEdyYXBoaWNzTGF5ZXJTa2lhX2gKLSNkZWZpbmUgR3JhcGhpY3NMYXllclNraWFfaAorI2lmbmRl
ZiBHcmFwaGljc0xheWVyQ2hyb21pdW1faAorI2RlZmluZSBHcmFwaGljc0xheWVyQ2hyb21pdW1f
aAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDU3MjI3KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJT
a2lhLmNwcDo1NzIyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRl
ICJMYXllclNraWEuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKKyNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9j
YW52YXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ugc3RkOwor
CitQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IExheWVyQ2hyb21pdW06OmNyZWF0ZShMYXllclR5
cGUgdHlwZSwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IExheWVyQ2hyb21pdW0odHlwZSwgb3duZXIpKTsKK30KKworTGF5ZXJDaHJvbWl1
bTo6TGF5ZXJDaHJvbWl1bShMYXllclR5cGUgdHlwZSwgR3JhcGhpY3NMYXllckNocm9taXVtKiBv
d25lcikKKyAgICA6IG1fbmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoZmFsc2UpCisgICAgLCBt
X293bmVyKG93bmVyKQorICAgICwgbV9sYXllclR5cGUodHlwZSkKKyAgICAsIG1fc3VwZXJsYXll
cigwKQorICAgICwgbV9ib3JkZXJXaWR0aCgwKQorICAgICwgbV9ib3JkZXJDb2xvcigwLCAwLCAw
LCAwKQorICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoMCwgMCwgMCwgMCkKKyAgICAsIG1fYW5jaG9y
UG9pbnRaKDApCisgICAgLCBtX2NsZWFyc0NvbnRleHQoZmFsc2UpCisgICAgLCBtX2RvdWJsZVNp
ZGVkKGZhbHNlKQorICAgICwgbV9lZGdlQW50aWFsaWFzaW5nTWFzaygwKQorICAgICwgbV9oaWRk
ZW4oZmFsc2UpCisgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCisgICAgLCBtX2NvbnRlbnRz
R3Jhdml0eShCb3R0b20pCisgICAgLCBtX29wYWNpdHkoMS4wKQorICAgICwgbV9vcGFxdWUodHJ1
ZSkKKyAgICAsIG1felBvc2l0aW9uKDAuMCkKKyAgICAsIG1fY2FudmFzKDApCisgICAgLCBtX3Nr
aWFDb250ZXh0KDApCisgICAgLCBtX2dyYXBoaWNzQ29udGV4dCgwKQorICAgICwgbV9nZW9tZXRy
eUZsaXBwZWQoZmFsc2UpCit7CisgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KG1fYmFja2luZ1N0
b3JlUmVjdCk7Cit9CisKK0xheWVyQ2hyb21pdW06On5MYXllckNocm9taXVtKCkKK3sKKyAgICAv
LyBPdXIgc3VwZXJsYXllciBzaG91bGQgYmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB1cywgc28g
dGhlcmUgc2hvdWxkIGJlIG5vIHdheSBmb3IgdXMgdG8gYmUgZGVzdHJveWVkIHdoaWxlIHdlIHN0
aWxsIGhhdmUgYSBzdXBlcmxheWVyLgorICAgIEFTU0VSVCghc3VwZXJsYXllcigpKTsKK30KKwor
dm9pZCBMYXllckNocm9taXVtOjp1cGRhdGVHcmFwaGljc0NvbnRleHQoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyNpZiBQTEFURk9STShTS0lBKQorICAgIC8vIENyZWF0ZSBuZXcgY2FudmFzIGFu
ZCBjb250ZXh0LiBPd25QdHIgdGFrZXMgY2FyZSBvZiBmcmVlaW5nIHVwCisgICAgLy8gdGhlIG9s
ZCBvbmVzLgorICAgIG1fY2FudmFzID0gbmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpOworICAgIG1fc2tpYUNvbnRleHQgPSBuZXcgUGxh
dGZvcm1Db250ZXh0U2tpYShtX2NhbnZhcy5nZXQoKSk7CisKKyAgICAvLyBUaGlzIGlzIG5lZWRl
ZCB0byBnZXQgdGV4dCB0byBzaG93IHVwIGNvcnJlY3RseS4gV2l0aG91dCBpdCwKKyAgICAvLyBH
REkgcmVuZGVycyB3aXRoIHplcm8gYWxwaGEgYW5kIHRoZSB0ZXh0IGJlY29tZXMgaW52aXNpYmxl
LgorICAgIC8vIFVuZm9ydHVuYXRlbHksIHNldHRpbmcgdGhpcyB0byB0cnVlIGRpc2FibGVzIGNs
ZWFydHlwZS4KKyAgICBtX3NraWFDb250ZXh0LT5zZXREcmF3aW5nVG9JbWFnZUJ1ZmZlcih0cnVl
KTsKKworICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbmV3IEdyYXBoaWNzQ29udGV4dChyZWludGVy
cHJldF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4obV9za2lhQ29udGV4dC5nZXQoKSkp
OworI2Vsc2UKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgor
I2VuZGlmCisgICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgYWxsb2NhdGVkIGZvciBhIGxheWVyIGNh
biBiZSBzbWFsbGVyIHRoYW4gdGhlIGxheWVyJ3MgYm91bmRzLgorICAgIC8vIFRoaXMgaXMgbW9z
dGx5IHRydWUgZm9yIHRoZSByb290IGxheWVyIHdob3NlIGJhY2tpbmcgc3RvcmUgaXMgc2l6ZWQg
YmFzZWQgb24gdGhlIHZpc2libGUKKyAgICAvLyBwb3J0aW9uIG9mIHRoZSBsYXllciByYXRoZXIg
dGhhbiB0aGUgYWN0dWFsIHBhZ2Ugc2l6ZS4KKyAgICBtX2JhY2tpbmdTdG9yZVJlY3QgPSBzaXpl
OworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKK3sKKyAgICBSZW5k
ZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBzdGF0aWNfY2FzdDxSZW5kZXJMYXllckJhY2tpbmcq
PihtX293bmVyLT5jbGllbnQoKSk7CisKKyAgICBpZiAoYmFja2luZyAmJiAhYmFja2luZy0+cGFp
bnRpbmdHb2VzVG9XaW5kb3coKSkKKyAgICAgICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVy
Q29udGVudHMoKm1fZ3JhcGhpY3NDb250ZXh0LCBJbnRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRo
KCksIG1fYm91bmRzLmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHJhd0Rl
YnVnQm9yZGVyKCkKK3sKKyAgICBtX2dyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobV9i
b3JkZXJDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CisgICAgbV9ncmFwaGljc0NvbnRleHQtPnNl
dFN0cm9rZVRoaWNrbmVzcyhtX2JvcmRlcldpZHRoKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dC0+
ZHJhd0xpbmUoSW50UG9pbnQoMCwgMCksIEludFBvaW50KG1fYm91bmRzLndpZHRoKCksIDApKTsK
KyAgICBtX2dyYXBoaWNzQ29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQoMCwgMCksIEludFBvaW50
KDAsIG1fYm91bmRzLmhlaWdodCgpKSk7CisgICAgbV9ncmFwaGljc0NvbnRleHQtPmRyYXdMaW5l
KEludFBvaW50KG1fYm91bmRzLndpZHRoKCksIDApLCBJbnRQb2ludChtX2JvdW5kcy53aWR0aCgp
LCBtX2JvdW5kcy5oZWlnaHQoKSkpOworICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5kcmF3TGluZShJ
bnRQb2ludCgwLCBtX2JvdW5kcy5oZWlnaHQoKSksIEludFBvaW50KG1fYm91bmRzLndpZHRoKCks
IG1fYm91bmRzLmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHND
b21taXQoKQoreworICAgIC8vIENhbGwgbm90aWZ5U3luY1JlcXVpcmVkKCksIHdoaWNoIGluIHRo
aXMgaW1wbGVtZW50YXRpb24gcGx1bWJzIHRocm91Z2ggdG8KKyAgICAvLyBjYWxsIHNldFJvb3RM
YXllck5lZWRzRGlzcGxheSgpIG9uIHRoZSBXZWJWaWV3LCB3aGljaCB3aWxsIGNhdXNlIExheWVy
UmVuZGVyZXJTa2lhCisgICAgLy8gdG8gcmVuZGVyIGEgZnJhbWUuCisgICAgaWYgKG1fb3duZXIp
CisgICAgICAgIG1fb3duZXItPm5vdGlmeVN5bmNSZXF1aXJlZCgpOworfQorCit2b2lkIExheWVy
Q2hyb21pdW06OmFkZFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gc3VibGF5ZXIp
Cit7CisgICAgaW5zZXJ0U3VibGF5ZXIoc3VibGF5ZXIsIG51bVN1YmxheWVycygpKTsKK30KKwor
dm9pZCBMYXllckNocm9taXVtOjppbnNlcnRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21p
dW0+IHN1YmxheWVyLCBzaXplX3QgaW5kZXgpCit7CisgICAgaW5kZXggPSBtaW4oaW5kZXgsIG1f
c3VibGF5ZXJzLnNpemUoKSk7CisgICAgbV9zdWJsYXllcnMuaW5zZXJ0KGluZGV4LCBzdWJsYXll
cik7CisgICAgc3VibGF5ZXItPnNldFN1cGVybGF5ZXIodGhpcyk7CisgICAgc2V0TmVlZHNDb21t
aXQoKTsKK30KKwordm9pZCBMYXllckNocm9taXVtOjpyZW1vdmVGcm9tU3VwZXJsYXllcigpCit7
CisgICAgTGF5ZXJDaHJvbWl1bSogc3VwZXJsYXllciA9IHRoaXMtPnN1cGVybGF5ZXIoKTsKKyAg
ICBpZiAoIXN1cGVybGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHN1cGVybGF5ZXItPnJl
bW92ZVN1YmxheWVyKHRoaXMpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnJlbW92ZVN1Ymxh
eWVyKExheWVyQ2hyb21pdW0qIHN1YmxheWVyKQoreworICAgIGludCBmb3VuZEluZGV4ID0gaW5k
ZXhPZlN1YmxheWVyKHN1YmxheWVyKTsKKyAgICBpZiAoZm91bmRJbmRleCA9PSAtMSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9zdWJsYXllcnMucmVtb3ZlKGZvdW5kSW5kZXgpOworICAgIHN1
YmxheWVyLT5zZXRTdXBlcmxheWVyKDApOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK2lu
dCBMYXllckNocm9taXVtOjppbmRleE9mU3VibGF5ZXIoY29uc3QgTGF5ZXJDaHJvbWl1bSogcmVm
ZXJlbmNlKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdWJsYXllcnMuc2l6ZSgp
OyBpKyspIHsKKyAgICAgICAgaWYgKG1fc3VibGF5ZXJzW2ldID09IHJlZmVyZW5jZSkKKyAgICAg
ICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgTGF5ZXJD
aHJvbWl1bTo6c2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBJbnRTaXplJiByZWN0KQoreworICAg
IGlmIChtX2JhY2tpbmdTdG9yZVJlY3QgPT0gcmVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
dXBkYXRlR3JhcGhpY3NDb250ZXh0KHJlY3QpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnNl
dEJvdW5kcyhjb25zdCBJbnRTaXplJiByZWN0KQoreworICAgIGlmIChyZWN0ID09IG1fYm91bmRz
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2JvdW5kcyA9IHJlY3Q7CisKKyAgICAvLyBSZS1j
cmVhdGUgdGhlIGNhbnZhcyBhbmQgYXNzb2NpYXRlZCBjb250ZXh0cy4KKyAgICB1cGRhdGVHcmFw
aGljc0NvbnRleHQobV9ib3VuZHMpOworCisgICAgLy8gTGF5ZXIgY29udGVudHMgbmVlZCB0byBi
ZSByZWRyYXduIGFzIHRoZSBiYWNraW5nIHN1cmZhY2UKKyAgICAvLyB3YXMgcmVjcmVhdGVkIGFi
b3ZlLgorICAgIHVwZGF0ZUNvbnRlbnRzKCk7CisKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQor
Cit2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sK
KyAgICBpZiAocmVjdCA9PSBtX2ZyYW1lKQorICAgICAgcmV0dXJuOworCisgICAgbV9mcmFtZSA9
IHJlY3Q7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKworY29uc3QgTGF5ZXJDaHJvbWl1bSog
TGF5ZXJDaHJvbWl1bTo6cm9vdExheWVyKCkgY29uc3QKK3sKKyAgICBjb25zdCBMYXllckNocm9t
aXVtKiBsYXllciA9IHRoaXM7CisgICAgZm9yIChMYXllckNocm9taXVtKiBzdXBlcmxheWVyID0g
bGF5ZXItPnN1cGVybGF5ZXIoKTsgc3VwZXJsYXllcjsgbGF5ZXIgPSBzdXBlcmxheWVyLCBzdXBl
cmxheWVyID0gc3VwZXJsYXllci0+c3VwZXJsYXllcigpKSB7IH0KKyAgICByZXR1cm4gbGF5ZXI7
Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQWxsU3VibGF5ZXJzKCkKK3sKKyAgICBt
X3N1YmxheWVycy5jbGVhcigpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6c2V0U3VibGF5ZXJzKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiYgc3VibGF5ZXJzKQoreworICAgIG1fc3VibGF5ZXJzID0gc3VibGF5ZXJzOworfQorCit2
b2lkIExheWVyQ2hyb21pdW06OnNldFN1cGVybGF5ZXIoTGF5ZXJDaHJvbWl1bSogc3VwZXJsYXll
cikKK3sKKyAgICBtX3N1cGVybGF5ZXIgPSBzdXBlcmxheWVyOworfQorCitMYXllckNocm9taXVt
KiBMYXllckNocm9taXVtOjpzdXBlcmxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXBl
cmxheWVyOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheShjb25zdCBG
bG9hdFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICAvLyBSZWRyYXcgdGhlIGNvbnRlbnRzIG9mIHRo
ZSBsYXllci4KKyAgICB1cGRhdGVDb250ZW50cygpOworCisgICAgc2V0TmVlZHNDb21taXQoKTsK
K30KKwordm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKK30KKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA1NzIyMikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2lu
Y2x1ZGUgIkxheWVyU2tpYS5oIgorI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKIAogI2luY2x1
ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcu
aCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA1NzIyNykJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0xheWVyU2tpYS5oOjU3MjI3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
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
CisKKyNpZm5kZWYgTGF5ZXJTa2lhX2gKKyNkZWZpbmUgTGF5ZXJTa2lhX2gKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyU2tpYS5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKworbmFtZXNwYWNlIHNraWEgeworY2xhc3MgUGxh
dGZvcm1DYW52YXM7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJDaHJv
bWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyQ2hyb21pdW0+IHsKK3B1YmxpYzoKKyAgICBl
bnVtIExheWVyVHlwZSB7IExheWVyLCBUcmFuc2Zvcm1MYXllciB9OworICAgIGVudW0gRmlsdGVy
VHlwZSB7IExpbmVhciwgTmVhcmVzdCwgVHJpbGluZWFyLCBMYW5jem9zIH07CisgICAgZW51bSBD
b250ZW50c0dyYXZpdHlUeXBlIHsgQ2VudGVyLCBUb3AsIEJvdHRvbSwgTGVmdCwgUmlnaHQsIFRv
cExlZnQsIFRvcFJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvdHRvbUxl
ZnQsIEJvdHRvbVJpZ2h0LCBSZXNpemUsIFJlc2l6ZUFzcGVjdCwgUmVzaXplQXNwZWN0RmlsbCB9
OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKExheWVyVHlw
ZSwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9IDApOworCisgICAgfkxheWVyQ2hyb21p
dW0oKTsKKworICAgIHZvaWQgZGlzcGxheShQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOworCisg
ICAgdm9pZCBhZGRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+KTsKKyAgICB2b2lk
IGluc2VydFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4sIHNpemVfdCBpbmRleCk7
CisgICAgdm9pZCByZW1vdmVGcm9tU3VwZXJsYXllcigpOworCisgICAgdm9pZCBzZXRBbmNob3JQ
b2ludChjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgeyBtX2FuY2hvclBvaW50ID0gYW5j
aG9yUG9pbnQ7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50
KCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JQb2ludDsgfQorCisgICAgdm9pZCBzZXRBbmNob3JQ
b2ludFooZmxvYXQgYW5jaG9yUG9pbnRaKSB7IG1fYW5jaG9yUG9pbnRaID0gYW5jaG9yUG9pbnRa
OyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgZmxvYXQgYW5jaG9yUG9pbnRaKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmNob3JQb2ludFo7IH0KKworICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNv
bnN0IENvbG9yJiBjb2xvcikgeyBtX2JhY2tncm91bmRDb2xvciA9IGNvbG9yOyBzZXROZWVkc0Nv
bW1pdCgpOyB9CisgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZ3JvdW5kQ29sb3I7IH0KKworICAgIHZvaWQgc2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKSB7IG1fYm9yZGVyQ29sb3IgPSBjb2xvcjsgc2V0TmVlZHNDb21taXQoKTsgfQorICAg
IENvbG9yIGJvcmRlckNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXJDb2xvcjsgfQorCisg
ICAgdm9pZCBzZXRCb3JkZXJXaWR0aChmbG9hdCB3aWR0aCkgeyBtX2JvcmRlcldpZHRoID0gd2lk
dGg7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBmbG9hdCBib3JkZXJXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fYm9yZGVyV2lkdGg7IH0KKworICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0IEludFNp
emUmKTsKKyAgICBJbnRTaXplIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CisK
KyAgICB2b2lkIHNldENsZWFyc0NvbnRleHQoYm9vbCBjbGVhcnMpIHsgbV9jbGVhcnNDb250ZXh0
ID0gY2xlYXJzOyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgYm9vbCBjbGVhcnNDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9jbGVhcnNDb250ZXh0OyB9CisKKyAgICB2b2lkIHNldENvbnRlbnRz
R3Jhdml0eShDb250ZW50c0dyYXZpdHlUeXBlIGdyYXZpdHlUeXBlKSB7IG1fY29udGVudHNHcmF2
aXR5ID0gZ3Jhdml0eVR5cGU7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBDb250ZW50c0dyYXZp
dHlUeXBlIGNvbnRlbnRzR3Jhdml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNHcmF2aXR5
OyB9CisKKyAgICB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wgZG91YmxlU2lkZWQpIHsgbV9kb3Vi
bGVTaWRlZCA9IGRvdWJsZVNpZGVkOyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgYm9vbCBkb3Vi
bGVTaWRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlU2lkZWQ7IH0KKworICAgIHZvaWQgc2V0
RWRnZUFudGlhbGlhc2luZ01hc2sodWludDMyX3QgbWFzaykgeyBtX2VkZ2VBbnRpYWxpYXNpbmdN
YXNrID0gbWFzazsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIHVpbnQzMl90IGVkZ2VBbnRpYWxp
YXNpbmdNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlQW50aWFsaWFzaW5nTWFzazsgfQorCisg
ICAgdm9pZCBzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBGbG9hdFJlY3QgZnJhbWUo
KSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CisKKyAgICB2b2lkIHNldEhpZGRlbihib29sIGhp
ZGRlbikgeyBtX2hpZGRlbiA9IGhpZGRlbjsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIGJvb2wg
aXNIaWRkZW4oKSBjb25zdCB7IHJldHVybiBtX2hpZGRlbjsgfQorCisgICAgdm9pZCBzZXRNYXNr
c1RvQm91bmRzKGJvb2wgbWFza3NUb0JvdW5kcykgeyBtX21hc2tzVG9Cb3VuZHMgPSBtYXNrc1Rv
Qm91bmRzOyB9CisgICAgYm9vbCBtYXNrc1RvQm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9tYXNr
c1RvQm91bmRzOyB9CisKKyAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1f
bmFtZSA9IG5hbWU7IH0KKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQorCisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3Qp
OworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxh
eU9uQm91bmRzQ2hhbmdlKGJvb2wgbmVlZHNEaXNwbGF5KSB7IG1fbmVlZHNEaXNwbGF5T25Cb3Vu
ZHNDaGFuZ2UgPSBuZWVkc0Rpc3BsYXk7IH0KKworICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCBv
cGFjaXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBm
bG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CisKKyAgICB2b2lkIHNl
dE9wYXF1ZShib29sIG9wYXF1ZSkgeyBtX29wYXF1ZSA9IG9wYXF1ZTsgc2V0TmVlZHNDb21taXQo
KTsgfQorICAgIGJvb2wgb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAg
IHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wb3NpdGlv
biA9IHBvc2l0aW9uOyAgc2V0TmVlZHNDb21taXQoKTsgfQorCisgICAgRmxvYXRQb2ludCBwb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKworICAgIHZvaWQgc2V0WlBvc2l0
aW9uKGZsb2F0IHpQb3NpdGlvbikgeyBtX3pQb3NpdGlvbiA9IHpQb3NpdGlvbjsgc2V0TmVlZHND
b21taXQoKTsgfQorICAgIGZsb2F0IHpQb3NpdGlvbigpIGNvbnN0IHsgIHJldHVybiBtX3pQb3Np
dGlvbjsgfQorCisgICAgY29uc3QgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgY29uc3Q7CisK
KyAgICB2b2lkIHJlbW92ZUFsbFN1YmxheWVycygpOworCisgICAgdm9pZCBzZXRTdWJsYXllcnMo
Y29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+Jik7CisKKyAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGdldFN1YmxheWVycygpIGNvbnN0IHsgcmV0dXJu
IG1fc3VibGF5ZXJzOyB9CisKKyAgICB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV9zdWJsYXllclRyYW5zZm9ybSA9IHRy
YW5zZm9ybTsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5ZXJUcmFuc2Zv
cm07IH0KKworICAgIHZvaWQgc2V0U3VwZXJsYXllcihMYXllckNocm9taXVtKiBzdXBlcmxheWVy
KTsKKyAgICBMYXllckNocm9taXVtKiBzdXBlcmxheWVyKCkgY29uc3Q7CisKKworICAgIHZvaWQg
c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90
cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07
IH0KKworICAgIHZvaWQgc2V0R2VvbWV0cnlGbGlwcGVkKGJvb2wgZmxpcHBlZCkgeyBtX2dlb21l
dHJ5RmxpcHBlZCA9IGZsaXBwZWQ7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBib29sIGdlb21l
dHJ5RmxpcHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2VvbWV0cnlGbGlwcGVkOyB9CisKKyAgICB2
b2lkIHVwZGF0ZUNvbnRlbnRzKCk7CisKKyAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogcGxhdGZv
cm1DYW52YXMoKSB7IHJldHVybiBtX2NhbnZhcy5nZXQoKTsgfQorICAgIEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9ncmFwaGljc0NvbnRleHQuZ2V0KCk7IH0K
KworICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBJbnRTaXplJik7CisKKyAgICB2
b2lkIGRyYXdEZWJ1Z0JvcmRlcigpOworCitwcml2YXRlOgorICAgIExheWVyQ2hyb21pdW0oTGF5
ZXJUeXBlLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKKworICAgIHZvaWQgc2V0TmVl
ZHNDb21taXQoKTsKKworICAgIHZvaWQgcGFpbnRNZSgpOworCisgICAgc2l6ZV90IG51bVN1Ymxh
eWVycygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zdWJsYXllcnMuc2l6ZSgpOwor
ICAgIH0KKworICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBzdWJsYXllciBvciAtMSBp
ZiBub3QgZm91bmQuCisgICAgaW50IGluZGV4T2ZTdWJsYXllcihjb25zdCBMYXllckNocm9taXVt
Kik7CisKKyAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHJlbW92ZUZyb21T
dXBlcmxheWVyLgorICAgIHZvaWQgcmVtb3ZlU3VibGF5ZXIoTGF5ZXJDaHJvbWl1bSopOworCisg
ICAgLy8gUmUtY3JlYXRlIHRoZSBjYW52YXMgYW5kIGdyYXBoaWNzIGNvbnRleHQuIFRoaXMgbWV0
aG9kCisgICAgLy8gbXVzdCBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUgbGF5ZXIgaXMgcmVzaXpl
ZC4KKyAgICB2b2lkIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb25zdCBJbnRTaXplJik7CisKKyAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbV9zdWJsYXllcnM7CisgICAgTGF5ZXJD
aHJvbWl1bSogbV9zdXBlcmxheWVyOworCisgICAgR3JhcGhpY3NMYXllckNocm9taXVtKiBtX293
bmVyOworICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9jYW52YXM7CisgICAgT3du
UHRyPFBsYXRmb3JtQ29udGV4dFNraWE+IG1fc2tpYUNvbnRleHQ7CisgICAgT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gbV9ncmFwaGljc0NvbnRleHQ7CisKKyAgICBMYXllclR5cGUgbV9sYXllclR5
cGU7CisKKyAgICBJbnRTaXplIG1fYm91bmRzOworICAgIEludFNpemUgbV9iYWNraW5nU3RvcmVS
ZWN0OworICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKKyAgICBGbG9hdFBvaW50IG1fYW5jaG9y
UG9pbnQ7CisgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7CisgICAgQ29sb3IgbV9ib3JkZXJD
b2xvcjsKKworICAgIEZsb2F0UmVjdCBtX2ZyYW1lOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fdHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zv
cm07CisKKyAgICB1aW50MzJfdCBtX2VkZ2VBbnRpYWxpYXNpbmdNYXNrOworICAgIGZsb2F0IG1f
b3BhY2l0eTsKKyAgICBmbG9hdCBtX3pQb3NpdGlvbjsKKyAgICBmbG9hdCBtX2FuY2hvclBvaW50
WjsKKyAgICBmbG9hdCBtX2JvcmRlcldpZHRoOworCisgICAgYm9vbCBtX2NsZWFyc0NvbnRleHQ7
CisgICAgYm9vbCBtX2RvdWJsZVNpZGVkOworICAgIGJvb2wgbV9oaWRkZW47CisgICAgYm9vbCBt
X21hc2tzVG9Cb3VuZHM7CisgICAgYm9vbCBtX29wYXF1ZTsKKyAgICBib29sIG1fZ2VvbWV0cnlG
bGlwcGVkOworICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZTsKKworICAgIENv
bnRlbnRzR3Jhdml0eVR5cGUgbV9jb250ZW50c0dyYXZpdHk7CisgICAgU3RyaW5nIG1fbmFtZTsK
K307CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uaAkocmV2aXNpb24gNTcyMjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTQgKzI5
LDE0IEBACiAgKi8KIAogCi0jaWZuZGVmIExheWVyU2tpYV9oCi0jZGVmaW5lIExheWVyU2tpYV9o
CisjaWZuZGVmIExheWVyQ2hyb21pdW1faAorI2RlZmluZSBMYXllckNocm9taXVtX2gKIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyU2tp
YS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA1
NzIyNykJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyUmVuZGVyZXJT
a2lhLmNwcDo1NzIyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
I2luY2x1ZGUgIkxheWVyUmVuZGVyZXJTa2lhLmgiCisKKyNpbmNsdWRlICJMYXllclNraWEuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAic2tpYS9leHQvcGxh
dGZvcm1fY2FudmFzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKCkKK3sKKyAg
ICByZXR1cm4gbmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bSgpOworfQorCitMYXllclJlbmRlcmVy
Q2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpCisgICAgOiBtX3Jvb3RMYXllcigwKQor
ICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCit7Cit9CisKK0xheWVyUmVuZGVyZXJDaHJvbWl1
bTo6fkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpCit7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1cGRhdGVMYXllckNvbnRlbnRzKCkKK3sKKyAgICBpZiAobV9yb290TGF5ZXIpCisg
ICAgICAgIHVwZGF0ZUxheWVyQ29udGVudHNSZWN1cnNpdmUobV9yb290TGF5ZXIuZ2V0KCkpOwor
fQorCisjaWYgUExBVEZPUk0oU0tJQSkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
TGF5ZXJzSW5DYW52YXMoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcywgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpCit7CisgICAgaWYgKCFtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FudmFzLT5zYXZlKCk7CisgICAgY2FudmFzLT5jbGlwUmVjdChTa1JlY3QoY2xpcFJl
Y3QpKTsKKworICAgIC8vIEZpcnN0IGNvbXBvc2l0ZSB0aGUgcm9vdCBsYXllciBpbnRvIHRoZSBj
YW52YXMuCisgICAgY2FudmFzLT5kcmF3Qml0bWFwKG1fcm9vdExheWVyLT5wbGF0Zm9ybUNhbnZh
cygpLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKSwgMCwgMCwgMCk7CisKKyAgICAv
LyBBY2NvdW50IGZvciB0aGUgc2Nyb2xsIG9mZnNldCBiZWZvcmUgY29tcG9zaXRpbmcgdGhlIHJl
bWFpbmluZyBsYXllcnMuCisgICAgLy8gTm90ZSB0aGF0IHRoZSByb290IGxheWVyJ3MgcGFpbnRp
bmcgdGFrZXMgaW50byBhY2NvdW50IHRoZSBzY3JvbGwgb2Zmc2V0IGFscmVhZHkuCisgICAgY2Fu
dmFzLT50cmFuc2xhdGUoLW1fc2Nyb2xsRnJhbWUuZkxlZnQsIC1tX3Njcm9sbEZyYW1lLmZUb3Ap
OworCisgICAgZmxvYXQgb3BhY2l0eSA9IDEuMGY7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBtX3Jvb3RMYXllci0+Z2V0U3VibGF5ZXJzKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCisgICAg
ICAgIGRyYXdMYXllckluQ2FudmFzUmVjdXJzaXZlKGNhbnZhcywgc3VibGF5ZXJzW2ldLmdldCgp
LCBvcGFjaXR5KTsKKworICAgIGNhbnZhcy0+cmVzdG9yZSgpOworCisgICAgbV9uZWVkc0Rpc3Bs
YXkgPSBmYWxzZTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcklu
Q2FudmFzUmVjdXJzaXZlKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMsIExheWVyQ2hyb21p
dW0qIGxheWVyLCBmbG9hdCBvcGFjaXR5KQoreworICAgIC8vIEd1YXJhbnRlZXMgdGhhdCB0aGUg
Y2FudmFzIGlzIHJlc3RvcmVkIHRvIGEga25vd24gc3RhdGUgb24gZGVzdHJ1Y3Rpb24uCisgICAg
U2tBdXRvQ2FudmFzUmVzdG9yZSBhdXRvUmVzdG9yZUNhbnZhcyhjYW52YXMsIHRydWUpOworCisg
ICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGxheWVyLT5wb3NpdGlvbigpOworICAgIEZsb2F0UG9p
bnQgYW5jaG9yUG9pbnQgPSBsYXllci0+YW5jaG9yUG9pbnQoKTsKKyAgICBTa01hdHJpeCB0cmFu
c2Zvcm0gPSBsYXllci0+dHJhbnNmb3JtKCkudG9BZmZpbmVUcmFuc2Zvcm0oKTsKKyAgICBJbnRT
aXplIGJvdW5kcyA9IGxheWVyLT5ib3VuZHMoKTsKKworICAgIGNhbnZhcy0+dHJhbnNsYXRlKHBv
c2l0aW9uLngoKSwgcG9zaXRpb24ueSgpKTsKKworICAgIFNrU2NhbGFyIHR4ID0gU2tTY2FsYXJN
dWwoYW5jaG9yUG9pbnQueCgpLCBib3VuZHMud2lkdGgoKSk7CisgICAgU2tTY2FsYXIgdHkgPSBT
a1NjYWxhck11bChhbmNob3JQb2ludC55KCksIGJvdW5kcy5oZWlnaHQoKSk7CisgICAgY2FudmFz
LT50cmFuc2xhdGUodHgsIHR5KTsKKyAgICBjYW52YXMtPmNvbmNhdCh0cmFuc2Zvcm0pOworICAg
IGNhbnZhcy0+dHJhbnNsYXRlKC10eCwgLXR5KTsKKworICAgIC8vIFRoZSBwb3NpdGlvbiB3ZSBn
ZXQgaXMgZm9yIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLCBidXQKKyAgICAvLyBkcmF3Qml0bWFw
IHN0YXJ0cyBhdCB0aGUgdXBwZXItbGVmdCBjb3JuZXIsIGFuZCB0aGVyZWZvcmUKKyAgICAvLyB3
ZSBuZWVkIHRvIGFkanVzdCBvdXIgdHJhbnNmb3JtLgorICAgIGNhbnZhcy0+dHJhbnNsYXRlKC0w
LjVmICogYm91bmRzLndpZHRoKCksIC0wLjVmICogYm91bmRzLmhlaWdodCgpKTsKKworICAgIGxh
eWVyLT5kcmF3RGVidWdCb3JkZXIoKTsKKworICAgIFNrUGFpbnQgb3BhY2l0eVBhaW50OworICAg
IG9wYWNpdHkgKj0gbGF5ZXItPm9wYWNpdHkoKTsKKyAgICBvcGFjaXR5UGFpbnQuc2V0QWxwaGEo
b3BhY2l0eSAqIDI1NSk7CisKKyAgICBjYW52YXMtPmRyYXdCaXRtYXAobGF5ZXItPnBsYXRmb3Jt
Q2FudmFzKCktPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpLCAwLCAwLCAmb3BhY2l0
eVBhaW50KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3Vi
bGF5ZXJzID0gbGF5ZXItPmdldFN1YmxheWVycygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKQorICAgICAgICBkcmF3TGF5ZXJJbkNhbnZhc1JlY3Vy
c2l2ZShjYW52YXMsIHN1YmxheWVyc1tpXS5nZXQoKSwgb3BhY2l0eSk7Cit9CisjZW5kaWYgLy8g
UExBVEZPUk0oU0tJQSkKKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVy
Q29udGVudHNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7CisgICAgbGF5ZXItPnVw
ZGF0ZUNvbnRlbnRzKCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4mIHN1YmxheWVycyA9IGxheWVyLT5nZXRTdWJsYXllcnMoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKKyAgICAgICAgdXBkYXRlTGF5ZXJDb250
ZW50c1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA1NzIyMikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsOSArMzIsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJTa2lhLmgiCisj
aW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJMYXllclNraWEu
aCIKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
U2tpYS5oIgogI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgJKHJldmlzaW9uIDU3MjI3KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvTGF5ZXJSZW5kZXJlclNraWEuaDo1NzIyNykKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBMYXllclJlbmRlcmVyU2tpYV9oCisjZGVm
aW5lIExheWVyUmVuZGVyZXJTa2lhX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXllclNraWEuaCIKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIHNraWEgeworY2xhc3MgUGxhdGZvcm1D
YW52YXM7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJSZW5kZXJlckNo
cm9taXVtIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZSgpOworCisgICAgTGF5ZXJSZW5kZXJl
ckNocm9taXVtKCk7CisgICAgfkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpOworCisjaWYgUExBVEZP
Uk0oU0tJQSkKKyAgICB2b2lkIGRyYXdMYXllcnNJbkNhbnZhcyhza2lhOjpQbGF0Zm9ybUNhbnZh
cyosIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKKyNlbmRpZgorICAgIHZvaWQgdXBkYXRlTGF5
ZXJDb250ZW50cygpOworCisgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNo
cm9taXVtPiBsYXllcikgeyBtX3Jvb3RMYXllciA9IGxheWVyOyB9CisgICAgTGF5ZXJDaHJvbWl1
bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KKworICAgIHZvaWQg
c2V0TmVlZHNEaXNwbGF5KCkgeyBtX25lZWRzRGlzcGxheSA9IHRydWU7IH0KKworICAgIHZvaWQg
c2V0U2Nyb2xsRnJhbWUoU2tJUmVjdCYgc2Nyb2xsRnJhbWUpIHsgbV9zY3JvbGxGcmFtZSA9IHNj
cm9sbEZyYW1lOyB9CisKK3ByaXZhdGU6CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICB2b2lkIGRy
YXdMYXllckluQ2FudmFzUmVjdXJzaXZlKHNraWE6OlBsYXRmb3JtQ2FudmFzKiwgTGF5ZXJDaHJv
bWl1bSosIGZsb2F0IG9wYWNpdHkpOworI2VuZGlmCisgICAgdm9pZCB1cGRhdGVMYXllckNvbnRl
bnRzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKKworICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBtX3Jvb3RMYXllcjsKKworICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7CisgICAgU2tJUmVjdCBt
X3Njcm9sbEZyYW1lOworfTsKKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkocmV2aXNpb24gNTcy
MjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTMgQEAKICAqLwogCiAKLSNp
Zm5kZWYgTGF5ZXJSZW5kZXJlclNraWFfaAotI2RlZmluZSBMYXllclJlbmRlcmVyU2tpYV9oCisj
aWZuZGVmIExheWVyUmVuZGVyZXJDaHJvbWl1bV9oCisjZGVmaW5lIExheWVyUmVuZGVyZXJDaHJv
bWl1bV9oCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5ZXJTa2lhLmgiCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NMYXllclNraWEuY3BwCShyZXZpc2lvbiA1
NzIyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0xheWVyU2tp
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0vKiogRklYTUUKLSAqIFRoaXMg
ZmlsZSBib3Jyb3dzIGNvZGUgaGVhdmlseSBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0xheWVyQ0FDRi5jcHAKLSAqIChhbmQgaGVuY2UgaXQgaW5jbHVkZXMgYm90aCBjb3B5cmln
aHRzKQotICogSWRlYWxseSB0aGUgY29tbW9uIGNvZGUgKG1vc3RseSB0aGUgY29kZSB0aGF0IGtl
ZXBzIHRyYWNrIG9mIHRoZSBsYXllciBoaWVyYXJjaHkpCi0gKiBzaG91bGQgYmUga2VwdCBzZXBh
cmF0ZSBhbmQgc2hhcmVkIGJldHdlZW4gcGxhdGZvcm1zLiBJdCB3b3VsZCBiZSBhIHdlbGwgd29y
dGh3aGlsZQotICogZWZmb3J0IG9uY2UgdGhlIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gKGJpbmFy
aWVzIGFuZCBoZWFkZXJzKSBvZiBDb3JlQW5pbWF0aW9uIGlzCi0gKiBjaGVja2VkIGluIHRvIHRo
ZSBXZWJLaXQgcmVwb3NpdG9yeS4gVW50aWwgdGhlbiBvbmx5IEFwcGxlIGNhbiBtYWtlIHRoaXMg
aGFwcGVuLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJTa2lhLmgiCi0KLSNpbmNs
dWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRl
ICJJbWFnZS5oIgotI2luY2x1ZGUgIkxheWVyU2tpYS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCi0jaW5jbHVkZSAiU3lzdGVtVGltZS5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RhdGljIHZvaWQgc2V0TGF5ZXJCb3JkZXJDb2xvcihMYXllckNocm9taXVtJiBsYXllciwg
Y29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGxheWVyLnNldEJvcmRlckNvbG9yKGNvbG9yKTsK
LX0KLQotc3RhdGljIHZvaWQgY2xlYXJCb3JkZXJDb2xvcihMYXllckNocm9taXVtJiBsYXllcikK
LXsKLSAgICBsYXllci5zZXRCb3JkZXJDb2xvcigwKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0TGF5
ZXJCYWNrZ3JvdW5kQ29sb3IoTGF5ZXJDaHJvbWl1bSYgbGF5ZXIsIGNvbnN0IENvbG9yJiBjb2xv
cikKLXsKLSAgICBsYXllci5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpOwotfQotCi1zdGF0aWMg
dm9pZCBjbGVhckxheWVyQmFja2dyb3VuZENvbG9yKExheWVyQ2hyb21pdW0mIGxheWVyKQotewot
ICAgIGxheWVyLnNldEJhY2tncm91bmRDb2xvcigwKTsKLX0KLQotR3JhcGhpY3NMYXllcjo6Q29t
cG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIEdyYXBoaWNzTGF5ZXI6OmNvbXBvc2l0aW5n
Q29vcmRpbmF0ZXNPcmllbnRhdGlvbigpCi17Ci0gICAgcmV0dXJuIENvbXBvc2l0aW5nQ29vcmRp
bmF0ZXNCb3R0b21VcDsKLX0KLQotUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xh
eWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQotewotICAgIHJldHVybiBu
ZXcgR3JhcGhpY3NMYXllckNocm9taXVtKGNsaWVudCk7Ci19Ci0KLUdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6R3JhcGhpY3NMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkK
LSAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQotICAgICwgbV9jb250ZW50c0xheWVyUHVycG9z
ZShOb0NvbnRlbnRzTGF5ZXIpCi0gICAgLCBtX2NvbnRlbnRzTGF5ZXJIYXNCYWNrZ3JvdW5kQ29s
b3IoZmFsc2UpCi17Ci0gICAgbV9sYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZShMYXllckNo
cm9taXVtOjpMYXllciwgdGhpcyk7Ci0KLSAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKLX0K
LQotR3JhcGhpY3NMYXllckNocm9taXVtOjp+R3JhcGhpY3NMYXllckNocm9taXVtKCkKLXsKLSAg
ICAvLyBDbGVhbiB1cCB0aGUgU2tpYSBsYXllci4KLSAgICBpZiAobV9sYXllcikKLSAgICAgICAg
bV9sYXllci0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLQotICAgIGlmIChtX3RyYW5zZm9ybUxh
eWVyKQotICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwot
fQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmFtZShjb25zdCBTdHJpbmcmIGlu
TmFtZSkKLXsKLSAgICBTdHJpbmcgbmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJHcmFwaGljc0xheWVy
Q2hyb21pdW0oJXApIEdyYXBoaWNzTGF5ZXIoJXApICIsIG1fbGF5ZXIuZ2V0KCksIHRoaXMpICsg
aW5OYW1lOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldE5hbWUobmFtZSk7Ci19Ci0KLU5hdGl2ZUxh
eWVyIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bmF0aXZlTGF5ZXIoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2xheWVyLmdldCgpOwotfQotCi1ib29sIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0
Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCi17Ci0gICAg
Ym9vbCBjaGlsZHJlbkNoYW5nZWQgPSBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjaGlsZHJl
bik7Ci0gICAgLy8gRklYTUU6IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuIGNhbGxzIGFkZENo
aWxkKCkgZm9yIGVhY2ggc3VibGF5ZXIsIHdoaWNoCi0gICAgLy8gd2lsbCBlbmQgdXAgY2FsbGlu
ZyB1cGRhdGVTdWJsYXllckxpc3QoKSBOIHRpbWVzLgotICAgIGlmIChjaGlsZHJlbkNoYW5nZWQp
Ci0gICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwotCi0gICAgcmV0dXJuIGNoaWxkcmVuQ2hh
bmdlZDsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkKEdyYXBoaWNz
TGF5ZXIqIGNoaWxkTGF5ZXIpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoY2hpbGRM
YXllcik7Ci0gICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogY2hpbGRMYXllciwgaW50
IGluZGV4KQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChjaGlsZExheWVy
LCBpbmRleCk7Ci0gICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIsIEdy
YXBoaWNzTGF5ZXIqIHNpYmxpbmcpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxv
dyhjaGlsZExheWVyLCBzaWJsaW5nKTsKLSAgICB1cGRhdGVTdWJsYXllckxpc3QoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciog
Y2hpbGRMYXllciwgR3JhcGhpY3NMYXllciAqc2libGluZykKLXsKLSAgICBHcmFwaGljc0xheWVy
OjphZGRDaGlsZEFib3ZlKGNoaWxkTGF5ZXIsIHNpYmxpbmcpOwotICAgIHVwZGF0ZVN1YmxheWVy
TGlzdCgpOwotfQotCi1ib29sIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVwbGFjZUNoaWxkKEdy
YXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKLXsKLSAgICBp
ZiAoR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCkpIHsKLSAg
ICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1v
dmVGcm9tUGFyZW50KCkKLXsKLSAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7
Ci0gICAgbGF5ZXJGb3JTdXBlcmxheWVyKCktPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkKLXsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwb2ludCk7Ci0gICAg
dXBkYXRlTGF5ZXJQb3NpdGlvbigpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwb2ludCkKLXsKLSAgICBpZiAocG9p
bnQgPT0gbV9hbmNob3JQb2ludCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXll
cjo6c2V0QW5jaG9yUG9pbnQocG9pbnQpOwotICAgIHVwZGF0ZUFuY2hvclBvaW50KCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKLXsKLSAgICBpZiAoc2l6ZSA9PSBtX3NpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdy
YXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7Ci0gICAgdXBkYXRlTGF5ZXJTaXplKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKLXsKLSAgICBpZiAodHJhbnNmb3JtID09IG1fdHJhbnNm
b3JtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0o
dHJhbnNmb3JtKTsKLSAgICB1cGRhdGVUcmFuc2Zvcm0oKTsKLX0KLQotdm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKHRyYW5zZm9ybSA9PSBtX2NoaWxkcmVuVHJhbnNm
b3JtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRy
YW5zZm9ybSh0cmFuc2Zvcm0pOwotICAgIHVwZGF0ZUNoaWxkcmVuVHJhbnNmb3JtKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRQcmVzZXJ2ZXMzRChib29sIHByZXNlcnZl
czNEKQotewotICAgIGlmIChwcmVzZXJ2ZXMzRCA9PSBtX3ByZXNlcnZlczNEKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCk7
Ci0gICAgdXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6c2V0TWFza3NUb0JvdW5kcyhib29sIG1hc2tzVG9Cb3VuZHMpCi17Ci0gICAgaWYg
KG1hc2tzVG9Cb3VuZHMgPT0gbV9tYXNrc1RvQm91bmRzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKG1hc2tzVG9Cb3VuZHMpOwotICAgIHVw
ZGF0ZU1hc2tzVG9Cb3VuZHMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKLXsKLSAgICBpZiAoZHJhd3NDb250ZW50
ID09IG1fZHJhd3NDb250ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVy
OjpzZXREcmF3c0NvbnRlbnQoZHJhd3NDb250ZW50KTsKLSAgICB1cGRhdGVMYXllckRyYXdzQ29u
dGVudCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0QmFja2dyb3VuZENv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAobV9iYWNrZ3JvdW5kQ29sb3JTZXQg
JiYgbV9iYWNrZ3JvdW5kQ29sb3IgPT0gY29sb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdy
YXBoaWNzTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7Ci0KLSAgICBtX2NvbnRlbnRz
TGF5ZXJIYXNCYWNrZ3JvdW5kQ29sb3IgPSB0cnVlOwotICAgIHVwZGF0ZUxheWVyQmFja2dyb3Vu
ZENvbG9yKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpjbGVhckJhY2tncm91
bmRDb2xvcigpCi17Ci0gICAgaWYgKCFtX2JhY2tncm91bmRDb2xvclNldCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICBj
bGVhckxheWVyQmFja2dyb3VuZENvbG9yKCptX2NvbnRlbnRzTGF5ZXIpOwotfQotCi12b2lkIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCBvcGFxdWUpCi17Ci0g
ICAgaWYgKG1fY29udGVudHNPcGFxdWUgPT0gb3BhcXVlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShvcGFxdWUpOwotICAgIHVwZGF0ZUNv
bnRlbnRzT3BhcXVlKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNr
ZmFjZVZpc2liaWxpdHkoYm9vbCB2aXNpYmxlKQotewotICAgIGlmIChtX2JhY2tmYWNlVmlzaWJp
bGl0eSA9PSB2aXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpz
ZXRCYWNrZmFjZVZpc2liaWxpdHkodmlzaWJsZSk7Ci0gICAgdXBkYXRlQmFja2ZhY2VWaXNpYmls
aXR5KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRPcGFjaXR5KGZsb2F0
IG9wYWNpdHkpCi17Ci0gICAgZmxvYXQgY2xhbXBlZE9wYWNpdHkgPSBtYXgobWluKG9wYWNpdHks
IDEuMGYpLCAwLjBmKTsKLQotICAgIGlmIChtX29wYWNpdHkgPT0gY2xhbXBlZE9wYWNpdHkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoY2xhbXBlZE9w
YWNpdHkpOwotICAgIHByaW1hcnlMYXllcigpLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwotfQotCi12
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBpZiAo
ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwotfQot
Ci12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoZHJhd3NDb250ZW50KCkpCi0gICAgICAgIG1f
bGF5ZXItPnNldE5lZWRzRGlzcGxheShyZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChy
ZWN0ID09IG1fY29udGVudHNSZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c1JlY3QocmVjdCk7Ci0gICAgdXBkYXRlQ29udGVudHNSZWN0KCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2Uq
IGltYWdlKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKLX0KLQotdm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9WaWRlbyhQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVy
KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldEdlb21ldHJ5T3JpZW50YXRpb24oQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIGlmIChvcmllbnRhdGlvbiA9PSBtX2dlb21ldHJ5
T3JpZW50YXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEdl
b21ldHJ5T3JpZW50YXRpb24ob3JpZW50YXRpb24pOwotICAgIHVwZGF0ZUdlb21ldHJ5T3JpZW50
YXRpb24oKTsKLX0KLQotUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllckNocm9taXVtOjpob3N0
TGF5ZXJGb3JTdWJsYXllcnMoKSBjb25zdAotewotICAgIHJldHVybiBtX3RyYW5zZm9ybUxheWVy
ID8gbV90cmFuc2Zvcm1MYXllci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7Ci19Ci0KLVBsYXRmb3Jt
TGF5ZXIqIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bGF5ZXJGb3JTdXBlcmxheWVyKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV90cmFuc2Zvcm1MYXllciA/IG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkg
OiBtX2xheWVyLmdldCgpOwotfQotCi1QbGF0Zm9ybUxheWVyKiBHcmFwaGljc0xheWVyQ2hyb21p
dW06OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiBwcmltYXJ5TGF5ZXIoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldERlYnVnQmFja2dyb3VuZENvbG9y
KGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAoY29sb3IuaXNWYWxpZCgpKQotICAgICAg
ICBzZXRMYXllckJhY2tncm91bmRDb2xvcigqbV9sYXllciwgY29sb3IpOwotICAgIGVsc2UKLSAg
ICAgICAgY2xlYXJMYXllckJhY2tncm91bmRDb2xvcigqbV9sYXllcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NMYXllckNocm9taXVtOjpzZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZs
b2F0IGJvcmRlcldpZHRoKQotewotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAg
c2V0TGF5ZXJCb3JkZXJDb2xvcigqbV9sYXllciwgY29sb3IpOwotICAgICAgICBtX2xheWVyLT5z
ZXRCb3JkZXJXaWR0aChib3JkZXJXaWR0aCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2xlYXJC
b3JkZXJDb2xvcigqbV9sYXllcik7Ci0gICAgICAgIG1fbGF5ZXItPnNldEJvcmRlcldpZHRoKDAp
OwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZVN1YmxheWVy
TGlzdCgpCi17Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG5ld1N1YmxheWVy
czsKLQotICAgIGlmIChtX3RyYW5zZm9ybUxheWVyKSB7Ci0gICAgICAgIC8vIEFkZCB0aGUgcHJp
bWFyeSBsYXllciBmaXJzdC4gRXZlbiBpZiB3ZSBoYXZlIG5lZ2F0aXZlIHotb3JkZXIgY2hpbGRy
ZW4sIHRoZSBwcmltYXJ5IGxheWVyIGFsd2F5cyBjb21lcyBiZWhpbmQuCi0gICAgICAgIG5ld1N1
YmxheWVycy5hcHBlbmQobV9sYXllci5nZXQoKSk7Ci0gICAgfSBlbHNlIGlmIChtX2NvbnRlbnRz
TGF5ZXIpIHsKLSAgICAgICAgLy8gRklYTUU6IGFkZCB0aGUgY29udGVudHMgbGF5ZXIgaW4gdGhl
IGNvcnJlY3Qgb3JkZXIgd2l0aCBuZWdhdGl2ZSB6LW9yZGVyIGNoaWxkcmVuLgotICAgICAgICAv
LyBUaGlzIGRvZXMgbm90IGNhdXNlIHZpc2libGUgcmVuZGVyaW5nIGlzc3VlcyBiZWNhdXNlIGN1
cnJlbnRseSBjb250ZW50cyBsYXllcnMgYXJlIG9ubHkgdXNlZAotICAgICAgICAvLyBmb3IgcmVw
bGFjZWQgZWxlbWVudHMgdGhhdCBkb24ndCBoYXZlIGNoaWxkcmVuLgotICAgICAgICBuZXdTdWJs
YXllcnMuYXBwZW5kKG1fY29udGVudHNMYXllci5nZXQoKSk7Ci0gICAgfQotCi0gICAgY29uc3Qg
VmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRMYXllcnMgPSBjaGlsZHJlbigpOwotICAgIHNp
emVfdCBudW1DaGlsZHJlbiA9IGNoaWxkTGF5ZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bUNoaWxkcmVuOyArK2kpIHsKLSAgICAgICAgR3JhcGhpY3NMYXllckNocm9t
aXVtKiBjdXJDaGlsZCA9IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSo+KGNoaWxk
TGF5ZXJzW2ldKTsKLQotICAgICAgICBMYXllckNocm9taXVtKiBjaGlsZExheWVyID0gY3VyQ2hp
bGQtPmxheWVyRm9yU3VwZXJsYXllcigpOwotICAgICAgICBuZXdTdWJsYXllcnMuYXBwZW5kKGNo
aWxkTGF5ZXIpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3U3VibGF5
ZXJzLnNpemUoKTsgKytpKQotICAgICAgICBuZXdTdWJsYXllcnNbaV0tPnJlbW92ZUZyb21TdXBl
cmxheWVyKCk7Ci0KLSAgICBpZiAobV90cmFuc2Zvcm1MYXllcikgewotICAgICAgICBtX3RyYW5z
Zm9ybUxheWVyLT5zZXRTdWJsYXllcnMobmV3U3VibGF5ZXJzKTsKLQotICAgICAgICBpZiAobV9j
b250ZW50c0xheWVyKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdHJhbnNmb3JtIGxh
eWVyLCB0aGVuIHRoZSBjb250ZW50cyBsYXllciBpcyBwYXJlbnRlZCBpbiB0aGUKLSAgICAgICAg
ICAgIC8vIHByaW1hcnkgbGF5ZXIgKHdoaWNoIGlzIGl0c2VsZiBhIGNoaWxkIG9mIHRoZSB0cmFu
c2Zvcm0gbGF5ZXIpLgotICAgICAgICAgICAgbV9sYXllci0+cmVtb3ZlQWxsU3VibGF5ZXJzKCk7
Ci0gICAgICAgICAgICBtX2xheWVyLT5hZGRTdWJsYXllcihtX2NvbnRlbnRzTGF5ZXIpOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fbGF5ZXItPnNldFN1YmxheWVycyhuZXdTdWJs
YXllcnMpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQb3Np
dGlvbigpCi17Ci0gICAgLy8gUG9zaXRpb24gaXMgb2Zmc2V0IG9uIHRoZSBsYXllciBieSB0aGUg
bGF5ZXIgYW5jaG9yIHBvaW50LgotICAgIEZsb2F0UG9pbnQgbGF5ZXJQb3NpdGlvbihtX3Bvc2l0
aW9uLngoKSArIG1fYW5jaG9yUG9pbnQueCgpICogbV9zaXplLndpZHRoKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fcG9zaXRpb24ueSgpICsgbV9hbmNob3JQb2ludC55KCkgKiBt
X3NpemUuaGVpZ2h0KCkpOwotCi0gICAgcHJpbWFyeUxheWVyKCktPnNldFBvc2l0aW9uKGxheWVy
UG9zaXRpb24pOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJT
aXplKCkKLXsKLSAgICBJbnRTaXplIGxheWVyU2l6ZShtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKTsKLSAgICBpZiAobV90cmFuc2Zvcm1MYXllcikgewotICAgICAgICBtX3RyYW5zZm9y
bUxheWVyLT5zZXRCb3VuZHMobGF5ZXJTaXplKTsKLSAgICAgICAgLy8gVGhlIGFuY2hvciBvZiB0
aGUgY29udGVudHMgbGF5ZXIgaXMgYWx3YXlzIGF0IDAuNSwgMC41LCBzbyB0aGUgcG9zaXRpb24g
aXMgY2VudGVyLXJlbGF0aXZlLgotICAgICAgICBGbG9hdFBvaW50IGNlbnRlclBvaW50KG1fc2l6
ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhlaWdodCgpIC8gMik7Ci0gICAgICAgIG1fbGF5ZXItPnNl
dFBvc2l0aW9uKGNlbnRlclBvaW50KTsKLSAgICB9Ci0KLSAgICBtX2xheWVyLT5zZXRCb3VuZHMo
bGF5ZXJTaXplKTsKLQotICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCByZXNpemUgbV9jb250ZW50
c0xheWVyLiBJdCdzIHVwIHRoZSBjYWxsZXIgdG8gZG8gdGhhdC4KLQotICAgIC8vIElmIHdlJ3Zl
IGNoYW5nZWQgdGhlIGJvdW5kcywgd2UgbmVlZCB0byByZWNhbGN1bGF0ZSB0aGUgcG9zaXRpb24K
LSAgICAvLyBvZiB0aGUgbGF5ZXIsIHRha2luZyBhbmNob3IgcG9pbnQgaW50byBhY2NvdW50Lgot
ICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OnVwZGF0ZUFuY2hvclBvaW50KCkKLXsKLSAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0QW5jaG9y
UG9pbnQoRmxvYXRQb2ludChtX2FuY2hvclBvaW50LngoKSwgbV9hbmNob3JQb2ludC55KCkpKTsK
LSAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0QW5jaG9yUG9pbnRaKG1fYW5jaG9yUG9pbnQueigpKTsK
LSAgICB1cGRhdGVMYXllclBvc2l0aW9uKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9t
aXVtOjp1cGRhdGVUcmFuc2Zvcm0oKQotewotICAgIHByaW1hcnlMYXllcigpLT5zZXRUcmFuc2Zv
cm0obV90cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q2hpbGRyZW5UcmFuc2Zvcm0oKQotewotICAgIHByaW1hcnlMYXllcigpLT5zZXRTdWJsYXllclRy
YW5zZm9ybShtX2NoaWxkcmVuVHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnVwZGF0ZU1hc2tzVG9Cb3VuZHMoKQotewotICAgIG1fbGF5ZXItPnNldE1hc2tzVG9C
b3VuZHMobV9tYXNrc1RvQm91bmRzKTsKLSAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzT3BhcXVlKCkKLXsK
LSAgICBtX2xheWVyLT5zZXRPcGFxdWUobV9jb250ZW50c09wYXF1ZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKQotewotICAgIG1f
bGF5ZXItPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKLX0KLQotdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKQotewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0
ZUxheWVyRHJhd3NDb250ZW50KCkKLXsKLSAgICBpZiAobV9kcmF3c0NvbnRlbnQpCi0gICAgICAg
IG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwotCi0gICAgdXBkYXRlRGVidWdJbmRpY2F0b3Jz
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllckJhY2tncm91
bmRDb2xvcigpCi17Ci0gICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIFdlIG5ldmVyIGNyZWF0ZSB0aGUgY29udGVudHMgbGF5ZXIganVzdCBmb3IgYmFj
a2dyb3VuZCBjb2xvciB5ZXQuCi0gICAgaWYgKG1fYmFja2dyb3VuZENvbG9yU2V0KQotICAgICAg
ICBzZXRMYXllckJhY2tncm91bmRDb2xvcigqbV9jb250ZW50c0xheWVyLCBtX2JhY2tncm91bmRD
b2xvcik7Ci0gICAgZWxzZQotICAgICAgICBjbGVhckxheWVyQmFja2dyb3VuZENvbG9yKCptX2Nv
bnRlbnRzTGF5ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29u
dGVudHNJbWFnZSgpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudAotfQotCi12b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNWaWRlbygpCi17Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudAotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVu
dHNSZWN0KCkKLXsKLSAgICBpZiAoIW1fY29udGVudHNMYXllcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9jb250ZW50c0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KG1fY29udGVudHNS
ZWN0LngoKSwgbV9jb250ZW50c1JlY3QueSgpKSk7Ci0gICAgbV9jb250ZW50c0xheWVyLT5zZXRC
b3VuZHMoSW50U2l6ZShtX2NvbnRlbnRzUmVjdC53aWR0aCgpLCBtX2NvbnRlbnRzUmVjdC5oZWln
aHQoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlR2VvbWV0cnlP
cmllbnRhdGlvbigpCi17Ci0gICAgc3dpdGNoIChnZW9tZXRyeU9yaWVudGF0aW9uKCkpIHsKLSAg
ICBjYXNlIENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duOgotICAgICAgICBtX2xheWVyLT5z
ZXRHZW9tZXRyeUZsaXBwZWQoZmFsc2UpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ29t
cG9zaXRpbmdDb29yZGluYXRlc0JvdHRvbVVwOgotICAgICAgICBtX2xheWVyLT5zZXRHZW9tZXRy
eUZsaXBwZWQodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBHZW9tZXRyeSBv
cmllbnRhdGlvbiBpcyBtYXBwZWQgb250byBjaGlsZHJlbiB0cmFuc2Zvcm0gaW4gb2xkZXIgUXVh
cnR6Q29yZXMsCi0gICAgLy8gc28gaXMgaGFuZGxlZCB2aWEgc2V0R2VvbWV0cnlPcmllbnRhdGlv
bigpLgotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0dXBDb250ZW50c0xheWVy
KExheWVyQ2hyb21pdW0qIGNvbnRlbnRzTGF5ZXIpCi17Ci0gICAgaWYgKGNvbnRlbnRzTGF5ZXIg
PT0gbV9jb250ZW50c0xheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jb250ZW50
c0xheWVyKSB7Ci0gICAgICAgIG1fY29udGVudHNMYXllci0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIo
KTsKLSAgICAgICAgbV9jb250ZW50c0xheWVyID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoY29udGVu
dHNMYXllcikgewotICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSBjb250ZW50c0xheWVyOwotCi0g
ICAgICAgIG1fY29udGVudHNMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7
Ci0KLSAgICAgICAgLy8gSW5zZXJ0IHRoZSBjb250ZW50IGxheWVyIGZpcnN0LiBWaWRlbyBlbGVt
ZW50cyByZXF1aXJlIHRoaXMsIGJlY2F1c2UgdGhleSBoYXZlCi0gICAgICAgIC8vIHNoYWRvdyBj
b250ZW50IHRoYXQgbXVzdCBkaXNwbGF5IGluIGZyb250IG9mIHRoZSB2aWRlby4KLSAgICAgICAg
bV9sYXllci0+aW5zZXJ0U3VibGF5ZXIobV9jb250ZW50c0xheWVyLmdldCgpLCAwKTsKLQotICAg
ICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKLQotICAgICAgICBpZiAoc2hvd0RlYnVnQm9yZGVy
cygpKSB7Ci0gICAgICAgICAgICBzZXRMYXllckJvcmRlckNvbG9yKCptX2NvbnRlbnRzTGF5ZXIs
IENvbG9yKDAsIDAsIDEyOCwgMTgwKSk7Ci0gICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNl
dEJvcmRlcldpZHRoKDEpOwotICAgICAgICB9Ci0gICAgfQotICAgIHVwZGF0ZURlYnVnSW5kaWNh
dG9ycygpOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIHNpbXBseSBtaW1pY3MgdGhlIG9wZXJhdGlv
biBvZiBHcmFwaGljc0xheWVyQ0EKLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVP
cGFjaXR5T25MYXllcigpCi17Ci0gICAgcHJpbWFyeUxheWVyKCktPnNldE9wYWNpdHkobV9vcGFj
aXR5KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0dyYXBoaWNzTGF5ZXJTa2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmgJKHJldmlzaW9uIDU3MjI3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdyYXBoaWNzTGF5ZXJTa2lhX2gKLSNkZWZpbmUg
R3JhcGhpY3NMYXllclNraWFfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIExheWVyQ2hyb21pdW07Ci0KLWNsYXNz
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBHcmFwaGljc0xheWVyIHsKLXB1YmxpYzoK
LSAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNsaWVudCopOwotICAgIHZp
cnR1YWwgfkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE5h
bWUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvLyBmb3IgaG9zdGluZyB0aGlzIEdyYXBoaWNzTGF5
ZXIgaW4gYSBuYXRpdmUgbGF5ZXIgaGllcmFyY2h5Ci0gICAgdmlydHVhbCBOYXRpdmVMYXllciBu
YXRpdmVMYXllcigpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHNldENoaWxkcmVuKGNvbnN0
IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoR3Jh
cGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NM
YXllciosIGludCBpbmRleCk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQWJvdmUoR3JhcGhp
Y3NMYXllciosIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRD
aGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKTsKLSAgICB2
aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGlj
c0xheWVyKiBuZXdDaGlsZCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgp
OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJik7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhd3ND
b250ZW50KGJvb2wpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25z
dCBDb2xvciYpOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckJhY2tncm91bmRDb2xvcigpOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzT3BhcXVlKGJvb2wpOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3Bh
Y2l0eShmbG9hdCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYpOwotCi0gICAg
dmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c1RvVmlkZW8oUGxhdGZvcm1MYXllciopOwotCi0gICAgdmlydHVhbCBQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
RGVidWdCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
RGVidWdCb3JkZXIoY29uc3QgQ29sb3ImLCBmbG9hdCBib3JkZXJXaWR0aCk7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0R2VvbWV0cnlPcmllbnRhdGlvbihDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3Jp
ZW50YXRpb24pOwotCi0gICAgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKQotICAgIHsKLSAgICAg
ICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgbV9jbGllbnQtPm5vdGlmeVN5bmNSZXF1aXJl
ZCh0aGlzKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVPcGFjaXR5T25MYXll
cigpOwotCi0gICAgTGF5ZXJDaHJvbWl1bSogcHJpbWFyeUxheWVyKCkgY29uc3QgIHsgcmV0dXJu
IG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgPyBtX3RyYW5zZm9ybUxheWVyLmdldCgpIDogbV9sYXll
ci5nZXQoKTsgfQotICAgIExheWVyQ2hyb21pdW0qIGhvc3RMYXllckZvclN1YmxheWVycygpIGNv
bnN0OwotICAgIExheWVyQ2hyb21pdW0qIGxheWVyRm9yU3VwZXJsYXllcigpIGNvbnN0OwotCi0g
ICAgdm9pZCB1cGRhdGVTdWJsYXllckxpc3QoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRp
b24oKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyU2l6ZSgpOwotICAgIHZvaWQgdXBkYXRlQW5jaG9y
UG9pbnQoKTsKLSAgICB2b2lkIHVwZGF0ZVRyYW5zZm9ybSgpOwotICAgIHZvaWQgdXBkYXRlQ2hp
bGRyZW5UcmFuc2Zvcm0oKTsKLSAgICB2b2lkIHVwZGF0ZU1hc2tzVG9Cb3VuZHMoKTsKLSAgICB2
b2lkIHVwZGF0ZUNvbnRlbnRzT3BhcXVlKCk7Ci0gICAgdm9pZCB1cGRhdGVCYWNrZmFjZVZpc2li
aWxpdHkoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKTsKLSAgICB2b2lkIHVw
ZGF0ZUxheWVyRHJhd3NDb250ZW50KCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllckJhY2tncm91bmRD
b2xvcigpOwotCi0gICAgdm9pZCB1cGRhdGVDb250ZW50c0ltYWdlKCk7Ci0gICAgdm9pZCB1cGRh
dGVDb250ZW50c1ZpZGVvKCk7Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50c1JlY3QoKTsKLSAgICB2
b2lkIHVwZGF0ZUdlb21ldHJ5T3JpZW50YXRpb24oKTsKLQotICAgIHZvaWQgc2V0dXBDb250ZW50
c0xheWVyKExheWVyQ2hyb21pdW0qKTsKLSAgICBMYXllckNocm9taXVtKiBjb250ZW50c0xheWVy
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyLmdldCgpOyB9Ci0KLSAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV90cmFu
c2Zvcm1MYXllcjsKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9jb250ZW50c0xheWVyOwot
Ci0gICAgZW51bSBDb250ZW50c0xheWVyUHVycG9zZSB7Ci0gICAgICAgIE5vQ29udGVudHNMYXll
ciA9IDAsCi0gICAgICAgIENvbnRlbnRzTGF5ZXJGb3JJbWFnZSwKLSAgICAgICAgQ29udGVudHNM
YXllckZvclZpZGVvCi0gICAgfTsKLQotICAgIENvbnRlbnRzTGF5ZXJQdXJwb3NlIG1fY29udGVu
dHNMYXllclB1cnBvc2U7Ci0gICAgYm9vbCBtX2NvbnRlbnRzTGF5ZXJIYXNCYWNrZ3JvdW5kQ29s
b3IgOiAxOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyUmVuZGVyZXJTa2lhLmNwcAkocmV2aXNpb24g
NTcyMjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJSZW5kZXJlclNr
aWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiTGF5ZXJS
ZW5kZXJlclNraWEuaCIKLQotI2luY2x1ZGUgIkxheWVyU2tpYS5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dFNraWEuaCIKLSNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoKQotewotICAgIHJldHVybiBuZXcgTGF5
ZXJSZW5kZXJlckNocm9taXVtKCk7Ci19Ci0KLUxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtKCkKLSAgICA6IG1fcm9vdExheWVyKDApCi0gICAgLCBtX25lZWRzRGlz
cGxheShmYWxzZSkKLXsKLX0KLQotTGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5kZXJl
ckNocm9taXVtKCkKLXsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxh
eWVyQ29udGVudHMoKQotewotICAgIGlmIChtX3Jvb3RMYXllcikKLSAgICAgICAgdXBkYXRlTGF5
ZXJDb250ZW50c1JlY3Vyc2l2ZShtX3Jvb3RMYXllci5nZXQoKSk7Ci19Ci0KLSNpZiBQTEFURk9S
TShTS0lBKQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbkNhbnZhcyhz
a2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKLXsK
LSAgICBpZiAoIW1fcm9vdExheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYW52YXMtPnNh
dmUoKTsKLSAgICBjYW52YXMtPmNsaXBSZWN0KFNrUmVjdChjbGlwUmVjdCkpOwotCi0gICAgLy8g
Rmlyc3QgY29tcG9zaXRlIHRoZSByb290IGxheWVyIGludG8gdGhlIGNhbnZhcy4KLSAgICBjYW52
YXMtPmRyYXdCaXRtYXAobV9yb290TGF5ZXItPnBsYXRmb3JtQ2FudmFzKCktPmdldERldmljZSgp
LT5hY2Nlc3NCaXRtYXAoZmFsc2UpLCAwLCAwLCAwKTsKLQotICAgIC8vIEFjY291bnQgZm9yIHRo
ZSBzY3JvbGwgb2Zmc2V0IGJlZm9yZSBjb21wb3NpdGluZyB0aGUgcmVtYWluaW5nIGxheWVycy4K
LSAgICAvLyBOb3RlIHRoYXQgdGhlIHJvb3QgbGF5ZXIncyBwYWludGluZyB0YWtlcyBpbnRvIGFj
Y291bnQgdGhlIHNjcm9sbCBvZmZzZXQgYWxyZWFkeS4KLSAgICBjYW52YXMtPnRyYW5zbGF0ZSgt
bV9zY3JvbGxGcmFtZS5mTGVmdCwgLW1fc2Nyb2xsRnJhbWUuZlRvcCk7Ci0KLSAgICBmbG9hdCBv
cGFjaXR5ID0gMS4wZjsKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4m
IHN1YmxheWVycyA9IG1fcm9vdExheWVyLT5nZXRTdWJsYXllcnMoKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKLSAgICAgICAgZHJhd0xheWVySW5D
YW52YXNSZWN1cnNpdmUoY2FudmFzLCBzdWJsYXllcnNbaV0uZ2V0KCksIG9wYWNpdHkpOwotCi0g
ICAgY2FudmFzLT5yZXN0b3JlKCk7Ci0KLSAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwotfQot
Ci12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVySW5DYW52YXNSZWN1cnNpdmUo
c2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcywgTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGZsb2F0
IG9wYWNpdHkpCi17Ci0gICAgLy8gR3VhcmFudGVlcyB0aGF0IHRoZSBjYW52YXMgaXMgcmVzdG9y
ZWQgdG8gYSBrbm93biBzdGF0ZSBvbiBkZXN0cnVjdGlvbi4KLSAgICBTa0F1dG9DYW52YXNSZXN0
b3JlIGF1dG9SZXN0b3JlQ2FudmFzKGNhbnZhcywgdHJ1ZSk7Ci0KLSAgICBGbG9hdFBvaW50IHBv
c2l0aW9uID0gbGF5ZXItPnBvc2l0aW9uKCk7Ci0gICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCA9
IGxheWVyLT5hbmNob3JQb2ludCgpOwotICAgIFNrTWF0cml4IHRyYW5zZm9ybSA9IGxheWVyLT50
cmFuc2Zvcm0oKS50b0FmZmluZVRyYW5zZm9ybSgpOwotICAgIEludFNpemUgYm91bmRzID0gbGF5
ZXItPmJvdW5kcygpOwotCi0gICAgY2FudmFzLT50cmFuc2xhdGUocG9zaXRpb24ueCgpLCBwb3Np
dGlvbi55KCkpOwotCi0gICAgU2tTY2FsYXIgdHggPSBTa1NjYWxhck11bChhbmNob3JQb2ludC54
KCksIGJvdW5kcy53aWR0aCgpKTsKLSAgICBTa1NjYWxhciB0eSA9IFNrU2NhbGFyTXVsKGFuY2hv
clBvaW50LnkoKSwgYm91bmRzLmhlaWdodCgpKTsKLSAgICBjYW52YXMtPnRyYW5zbGF0ZSh0eCwg
dHkpOwotICAgIGNhbnZhcy0+Y29uY2F0KHRyYW5zZm9ybSk7Ci0gICAgY2FudmFzLT50cmFuc2xh
dGUoLXR4LCAtdHkpOwotCi0gICAgLy8gVGhlIHBvc2l0aW9uIHdlIGdldCBpcyBmb3IgdGhlIGNl
bnRlciBvZiB0aGUgbGF5ZXIsIGJ1dAotICAgIC8vIGRyYXdCaXRtYXAgc3RhcnRzIGF0IHRoZSB1
cHBlci1sZWZ0IGNvcm5lciwgYW5kIHRoZXJlZm9yZQotICAgIC8vIHdlIG5lZWQgdG8gYWRqdXN0
IG91ciB0cmFuc2Zvcm0uCi0gICAgY2FudmFzLT50cmFuc2xhdGUoLTAuNWYgKiBib3VuZHMud2lk
dGgoKSwgLTAuNWYgKiBib3VuZHMuaGVpZ2h0KCkpOwotCi0gICAgbGF5ZXItPmRyYXdEZWJ1Z0Jv
cmRlcigpOwotCi0gICAgU2tQYWludCBvcGFjaXR5UGFpbnQ7Ci0gICAgb3BhY2l0eSAqPSBsYXll
ci0+b3BhY2l0eSgpOwotICAgIG9wYWNpdHlQYWludC5zZXRBbHBoYShvcGFjaXR5ICogMjU1KTsK
LQotICAgIGNhbnZhcy0+ZHJhd0JpdG1hcChsYXllci0+cGxhdGZvcm1DYW52YXMoKS0+Z2V0RGV2
aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSksIDAsIDAsICZvcGFjaXR5UGFpbnQpOwotCi0gICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBsYXllci0+
Z2V0U3VibGF5ZXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6
ZSgpOyBpKyspCi0gICAgICAgIGRyYXdMYXllckluQ2FudmFzUmVjdXJzaXZlKGNhbnZhcywgc3Vi
bGF5ZXJzW2ldLmdldCgpLCBvcGFjaXR5KTsKLX0KLSNlbmRpZiAvLyBQTEFURk9STShTS0lBKQot
Ci12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJDb250ZW50c1JlY3Vyc2l2
ZShMYXllckNocm9taXVtKiBsYXllcikKLXsKLSAgICBsYXllci0+dXBkYXRlQ29udGVudHMoKTsK
LQotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0g
bGF5ZXItPmdldFN1YmxheWVycygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5
ZXJzLnNpemUoKTsgaSsrKQotICAgICAgICB1cGRhdGVMYXllckNvbnRlbnRzUmVjdXJzaXZlKHN1
YmxheWVyc1tpXS5nZXQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5oCShyZXZpc2lvbiA1NzIy
NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5kZWYgTGF5ZXJSZW5kZXJlclNr
aWFfaAotI2RlZmluZSBMYXllclJlbmRlcmVyU2tpYV9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5ZXJTa2lh
LmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBza2lhIHsKLWNsYXNz
IFBsYXRmb3JtQ2FudmFzOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIExheWVy
UmVuZGVyZXJDaHJvbWl1bSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoKTsKLQotICAgIExh
eWVyUmVuZGVyZXJDaHJvbWl1bSgpOwotICAgIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKLQot
I2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgdm9pZCBkcmF3TGF5ZXJzSW5DYW52YXMoc2tpYTo6UGxh
dGZvcm1DYW52YXMqLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7Ci0jZW5kaWYKLSAgICB2b2lk
IHVwZGF0ZUxheWVyQ29udGVudHMoKTsKLQotICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIpIHsgbV9yb290TGF5ZXIgPSBsYXllcjsgfQotICAgIExh
eWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9Ci0K
LSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpIHsgbV9uZWVkc0Rpc3BsYXkgPSB0cnVlOyB9Ci0K
LSAgICB2b2lkIHNldFNjcm9sbEZyYW1lKFNrSVJlY3QmIHNjcm9sbEZyYW1lKSB7IG1fc2Nyb2xs
RnJhbWUgPSBzY3JvbGxGcmFtZTsgfQotCi1wcml2YXRlOgotI2lmIFBMQVRGT1JNKFNLSUEpCi0g
ICAgdm9pZCBkcmF3TGF5ZXJJbkNhbnZhc1JlY3Vyc2l2ZShza2lhOjpQbGF0Zm9ybUNhbnZhcyos
IExheWVyQ2hyb21pdW0qLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotICAgIHZvaWQgdXBkYXRl
TGF5ZXJDb250ZW50c1JlY3Vyc2l2ZShMYXllckNocm9taXVtKik7Ci0KLSAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gbV9yb290TGF5ZXI7Ci0KLSAgICBib29sIG1fbmVlZHNEaXNwbGF5OwotICAg
IFNrSVJlY3QgbV9zY3JvbGxGcmFtZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvTGF5ZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTGF5ZXJTa2lhLmNwcAkocmV2aXNpb24gNTcyMjcpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwy
NTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLQotI2luY2x1ZGUgIkxheWVyU2tpYS5oIgotCi0jaW5jbHVkZSAiUGxhdGZvcm1D
b250ZXh0U2tpYS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgotI2luY2x1ZGUg
InNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVz
aW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLVBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKExheWVyVHlwZSB0eXBlLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bSh0eXBlLCBvd25lcikp
OwotfQotCi1MYXllckNocm9taXVtOjpMYXllckNocm9taXVtKExheWVyVHlwZSB0eXBlLCBHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDogbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0No
YW5nZShmYWxzZSkKLSAgICAsIG1fb3duZXIob3duZXIpCi0gICAgLCBtX2xheWVyVHlwZSh0eXBl
KQotICAgICwgbV9zdXBlcmxheWVyKDApCi0gICAgLCBtX2JvcmRlcldpZHRoKDApCi0gICAgLCBt
X2JvcmRlckNvbG9yKDAsIDAsIDAsIDApCi0gICAgLCBtX2JhY2tncm91bmRDb2xvcigwLCAwLCAw
LCAwKQotICAgICwgbV9hbmNob3JQb2ludFooMCkKLSAgICAsIG1fY2xlYXJzQ29udGV4dChmYWxz
ZSkKLSAgICAsIG1fZG91YmxlU2lkZWQoZmFsc2UpCi0gICAgLCBtX2VkZ2VBbnRpYWxpYXNpbmdN
YXNrKDApCi0gICAgLCBtX2hpZGRlbihmYWxzZSkKLSAgICAsIG1fbWFza3NUb0JvdW5kcyhmYWxz
ZSkKLSAgICAsIG1fY29udGVudHNHcmF2aXR5KEJvdHRvbSkKLSAgICAsIG1fb3BhY2l0eSgxLjAp
Ci0gICAgLCBtX29wYXF1ZSh0cnVlKQotICAgICwgbV96UG9zaXRpb24oMC4wKQotICAgICwgbV9j
YW52YXMoMCkKLSAgICAsIG1fc2tpYUNvbnRleHQoMCkKLSAgICAsIG1fZ3JhcGhpY3NDb250ZXh0
KDApCi0gICAgLCBtX2dlb21ldHJ5RmxpcHBlZChmYWxzZSkKLXsKLSAgICB1cGRhdGVHcmFwaGlj
c0NvbnRleHQobV9iYWNraW5nU3RvcmVSZWN0KTsKLX0KLQotTGF5ZXJDaHJvbWl1bTo6fkxheWVy
Q2hyb21pdW0oKQotewotICAgIC8vIE91ciBzdXBlcmxheWVyIHNob3VsZCBiZSBob2xkaW5nIGEg
cmVmZXJlbmNlIHRvIHVzLCBzbyB0aGVyZSBzaG91bGQgYmUgbm8gd2F5IGZvciB1cyB0byBiZSBk
ZXN0cm95ZWQgd2hpbGUgd2Ugc3RpbGwgaGF2ZSBhIHN1cGVybGF5ZXIuCi0gICAgQVNTRVJUKCFz
dXBlcmxheWVyKCkpOwotfQotCi12b2lkIExheWVyQ2hyb21pdW06OnVwZGF0ZUdyYXBoaWNzQ29u
dGV4dChjb25zdCBJbnRTaXplJiBzaXplKQotewotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgLy8g
Q3JlYXRlIG5ldyBjYW52YXMgYW5kIGNvbnRleHQuIE93blB0ciB0YWtlcyBjYXJlIG9mIGZyZWVp
bmcgdXAKLSAgICAvLyB0aGUgb2xkIG9uZXMuCi0gICAgbV9jYW52YXMgPSBuZXcgc2tpYTo6UGxh
dGZvcm1DYW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxzZSk7Ci0gICAgbV9z
a2lhQ29udGV4dCA9IG5ldyBQbGF0Zm9ybUNvbnRleHRTa2lhKG1fY2FudmFzLmdldCgpKTsKLQot
ICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cgdXAgY29ycmVjdGx5LiBX
aXRob3V0IGl0LAotICAgIC8vIEdESSByZW5kZXJzIHdpdGggemVybyBhbHBoYSBhbmQgdGhlIHRl
eHQgYmVjb21lcyBpbnZpc2libGUuCi0gICAgLy8gVW5mb3J0dW5hdGVseSwgc2V0dGluZyB0aGlz
IHRvIHRydWUgZGlzYWJsZXMgY2xlYXJ0eXBlLgotICAgIG1fc2tpYUNvbnRleHQtPnNldERyYXdp
bmdUb0ltYWdlQnVmZmVyKHRydWUpOwotCi0gICAgbV9ncmFwaGljc0NvbnRleHQgPSBuZXcgR3Jh
cGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPiht
X3NraWFDb250ZXh0LmdldCgpKSk7Ci0jZWxzZQotI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBm
b3IgeW91ciBwbGF0Zm9ybS4iCi0jZW5kaWYKLSAgICAvLyBUaGUgYmFja2luZyBzdG9yZSBhbGxv
Y2F0ZWQgZm9yIGEgbGF5ZXIgY2FuIGJlIHNtYWxsZXIgdGhhbiB0aGUgbGF5ZXIncyBib3VuZHMu
Ci0gICAgLy8gVGhpcyBpcyBtb3N0bHkgdHJ1ZSBmb3IgdGhlIHJvb3QgbGF5ZXIgd2hvc2UgYmFj
a2luZyBzdG9yZSBpcyBzaXplZCBiYXNlZCBvbiB0aGUgdmlzaWJsZQotICAgIC8vIHBvcnRpb24g
b2YgdGhlIGxheWVyIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgcGFnZSBzaXplLgotICAgIG1fYmFj
a2luZ1N0b3JlUmVjdCA9IHNpemU7Ci19Ci0KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29u
dGVudHMoKQotewotICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHN0YXRpY19jYXN0
PFJlbmRlckxheWVyQmFja2luZyo+KG1fb3duZXItPmNsaWVudCgpKTsKLQotICAgIGlmIChiYWNr
aW5nICYmICFiYWNraW5nLT5wYWludGluZ0dvZXNUb1dpbmRvdygpKQotICAgICAgICBtX293bmVy
LT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqbV9ncmFwaGljc0NvbnRleHQsIEludFJlY3Qo
MCwgMCwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBM
YXllckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXIoKQotewotICAgIG1fZ3JhcGhpY3NDb250ZXh0
LT5zZXRTdHJva2VDb2xvcihtX2JvcmRlckNvbG9yLCBEZXZpY2VDb2xvclNwYWNlKTsKLSAgICBt
X2dyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKG1fYm9yZGVyV2lkdGgpOwotICAg
IG1fZ3JhcGhpY3NDb250ZXh0LT5kcmF3TGluZShJbnRQb2ludCgwLCAwKSwgSW50UG9pbnQobV9i
b3VuZHMud2lkdGgoKSwgMCkpOwotICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5kcmF3TGluZShJbnRQ
b2ludCgwLCAwKSwgSW50UG9pbnQoMCwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKLSAgICBtX2dyYXBo
aWNzQ29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQobV9ib3VuZHMud2lkdGgoKSwgMCksIEludFBv
aW50KG1fYm91bmRzLndpZHRoKCksIG1fYm91bmRzLmhlaWdodCgpKSk7Ci0gICAgbV9ncmFwaGlj
c0NvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KDAsIG1fYm91bmRzLmhlaWdodCgpKSwgSW50UG9p
bnQobV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBMYXll
ckNocm9taXVtOjpzZXROZWVkc0NvbW1pdCgpCi17Ci0gICAgLy8gQ2FsbCBub3RpZnlTeW5jUmVx
dWlyZWQoKSwgd2hpY2ggaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBwbHVtYnMgdGhyb3VnaCB0bwot
ICAgIC8vIGNhbGwgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCkgb24gdGhlIFdlYlZpZXcsIHdo
aWNoIHdpbGwgY2F1c2UgTGF5ZXJSZW5kZXJlclNraWEKLSAgICAvLyB0byByZW5kZXIgYSBmcmFt
ZS4KLSAgICBpZiAobV9vd25lcikKLSAgICAgICAgbV9vd25lci0+bm90aWZ5U3luY1JlcXVpcmVk
KCk7Ci19Ci0KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6YWRkU3VibGF5ZXIoUGFzc1JlZlB0cjxMYXll
ckNocm9taXVtPiBzdWJsYXllcikKLXsKLSAgICBpbnNlcnRTdWJsYXllcihzdWJsYXllciwgbnVt
U3VibGF5ZXJzKCkpOwotfQotCi12b2lkIExheWVyQ2hyb21pdW06Omluc2VydFN1YmxheWVyKFBh
c3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gc3VibGF5ZXIsIHNpemVfdCBpbmRleCkKLXsKLSAgICBp
bmRleCA9IG1pbihpbmRleCwgbV9zdWJsYXllcnMuc2l6ZSgpKTsKLSAgICBtX3N1YmxheWVycy5p
bnNlcnQoaW5kZXgsIHN1YmxheWVyKTsKLSAgICBzdWJsYXllci0+c2V0U3VwZXJsYXllcih0aGlz
KTsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIExheWVyQ2hyb21pdW06OnJlbW92
ZUZyb21TdXBlcmxheWVyKCkKLXsKLSAgICBMYXllckNocm9taXVtKiBzdXBlcmxheWVyID0gdGhp
cy0+c3VwZXJsYXllcigpOwotICAgIGlmICghc3VwZXJsYXllcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgc3VwZXJsYXllci0+cmVtb3ZlU3VibGF5ZXIodGhpcyk7Ci19Ci0KLXZvaWQgTGF5ZXJD
aHJvbWl1bTo6cmVtb3ZlU3VibGF5ZXIoTGF5ZXJDaHJvbWl1bSogc3VibGF5ZXIpCi17Ci0gICAg
aW50IGZvdW5kSW5kZXggPSBpbmRleE9mU3VibGF5ZXIoc3VibGF5ZXIpOwotICAgIGlmIChmb3Vu
ZEluZGV4ID09IC0xKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N1YmxheWVycy5yZW1vdmUo
Zm91bmRJbmRleCk7Ci0gICAgc3VibGF5ZXItPnNldFN1cGVybGF5ZXIoMCk7Ci0gICAgc2V0TmVl
ZHNDb21taXQoKTsKLX0KLQotaW50IExheWVyQ2hyb21pdW06OmluZGV4T2ZTdWJsYXllcihjb25z
dCBMYXllckNocm9taXVtKiByZWZlcmVuY2UpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3N1YmxheWVycy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAobV9zdWJsYXllcnNbaV0g
PT0gcmVmZXJlbmNlKQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiAt
MTsKLX0KLQotdm9pZCBMYXllckNocm9taXVtOjpzZXRCYWNraW5nU3RvcmVSZWN0KGNvbnN0IElu
dFNpemUmIHJlY3QpCi17Ci0gICAgaWYgKG1fYmFja2luZ1N0b3JlUmVjdCA9PSByZWN0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQocmVjdCk7Ci19Ci0KLXZv
aWQgTGF5ZXJDaHJvbWl1bTo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIHJlY3QpCi17Ci0gICAg
aWYgKHJlY3QgPT0gbV9ib3VuZHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYm91bmRzID0g
cmVjdDsKLQotICAgIC8vIFJlLWNyZWF0ZSB0aGUgY2FudmFzIGFuZCBhc3NvY2lhdGVkIGNvbnRl
eHRzLgotICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChtX2JvdW5kcyk7Ci0KLSAgICAvLyBMYXll
ciBjb250ZW50cyBuZWVkIHRvIGJlIHJlZHJhd24gYXMgdGhlIGJhY2tpbmcgc3VyZmFjZQotICAg
IC8vIHdhcyByZWNyZWF0ZWQgYWJvdmUuCi0gICAgdXBkYXRlQ29udGVudHMoKTsKLQotICAgIHNl
dE5lZWRzQ29tbWl0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmIChyZWN0ID09IG1fZnJhbWUpCi0gICAgICByZXR1
cm47Ci0KLSAgICBtX2ZyYW1lID0gcmVjdDsKLSAgICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi1j
b25zdCBMYXllckNocm9taXVtKiBMYXllckNocm9taXVtOjpyb290TGF5ZXIoKSBjb25zdAotewot
ICAgIGNvbnN0IExheWVyQ2hyb21pdW0qIGxheWVyID0gdGhpczsKLSAgICBmb3IgKExheWVyQ2hy
b21pdW0qIHN1cGVybGF5ZXIgPSBsYXllci0+c3VwZXJsYXllcigpOyBzdXBlcmxheWVyOyBsYXll
ciA9IHN1cGVybGF5ZXIsIHN1cGVybGF5ZXIgPSBzdXBlcmxheWVyLT5zdXBlcmxheWVyKCkpIHsg
fQotICAgIHJldHVybiBsYXllcjsKLX0KLQotdm9pZCBMYXllckNocm9taXVtOjpyZW1vdmVBbGxT
dWJsYXllcnMoKQotewotICAgIG1fc3VibGF5ZXJzLmNsZWFyKCk7Ci0gICAgc2V0TmVlZHNDb21t
aXQoKTsKLX0KLQotdm9pZCBMYXllckNocm9taXVtOjpzZXRTdWJsYXllcnMoY29uc3QgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMpCi17Ci0gICAgbV9zdWJsYXllcnMg
PSBzdWJsYXllcnM7Ci19Ci0KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0U3VwZXJsYXllcihMYXll
ckNocm9taXVtKiBzdXBlcmxheWVyKQotewotICAgIG1fc3VwZXJsYXllciA9IHN1cGVybGF5ZXI7
Ci19Ci0KLUxheWVyQ2hyb21pdW0qIExheWVyQ2hyb21pdW06OnN1cGVybGF5ZXIoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3N1cGVybGF5ZXI7Ci19Ci0KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0
TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KQotewotICAgIC8vIFJlZHJh
dyB0aGUgY29udGVudHMgb2YgdGhlIGxheWVyLgotICAgIHVwZGF0ZUNvbnRlbnRzKCk7Ci0KLSAg
ICBzZXROZWVkc0NvbW1pdCgpOwotfQotCi12b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlz
cGxheSgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi19Ci0KLSNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvTGF5ZXJTa2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0xheWVyU2tpYS5oCShyZXZpc2lvbiA1NzIyNykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9MYXllclNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMjcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLQotI2lmbmRlZiBMYXllclNraWFfaAotI2RlZmluZSBMYXllclNraWFfaAotCi0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJTa2lhLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCi0j
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotCi1uYW1lc3BhY2Ugc2tpYSB7Ci1jbGFzcyBQ
bGF0Zm9ybUNhbnZhczsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBMYXllckNo
cm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJDaHJvbWl1bT4gewotcHVibGljOgotICAg
IGVudW0gTGF5ZXJUeXBlIHsgTGF5ZXIsIFRyYW5zZm9ybUxheWVyIH07Ci0gICAgZW51bSBGaWx0
ZXJUeXBlIHsgTGluZWFyLCBOZWFyZXN0LCBUcmlsaW5lYXIsIExhbmN6b3MgfTsKLSAgICBlbnVt
IENvbnRlbnRzR3Jhdml0eVR5cGUgeyBDZW50ZXIsIFRvcCwgQm90dG9tLCBMZWZ0LCBSaWdodCwg
VG9wTGVmdCwgVG9wUmlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm90dG9t
TGVmdCwgQm90dG9tUmlnaHQsIFJlc2l6ZSwgUmVzaXplQXNwZWN0LCBSZXNpemVBc3BlY3RGaWxs
IH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBjcmVhdGUoTGF5ZXJU
eXBlLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7Ci0KLSAgICB+TGF5ZXJDaHJv
bWl1bSgpOwotCi0gICAgdm9pZCBkaXNwbGF5KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7Ci0K
LSAgICB2b2lkIGFkZFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4pOwotICAgIHZv
aWQgaW5zZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiwgc2l6ZV90IGluZGV4
KTsKLSAgICB2b2lkIHJlbW92ZUZyb21TdXBlcmxheWVyKCk7Ci0KLSAgICB2b2lkIHNldEFuY2hv
clBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSB7IG1fYW5jaG9yUG9pbnQgPSBh
bmNob3JQb2ludDsgc2V0TmVlZHNDb21taXQoKTsgfQotICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9p
bnQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50OyB9Ci0KLSAgICB2b2lkIHNldEFuY2hv
clBvaW50WihmbG9hdCBhbmNob3JQb2ludFopIHsgbV9hbmNob3JQb2ludFogPSBhbmNob3JQb2lu
dFo7IHNldE5lZWRzQ29tbWl0KCk7IH0KLSAgICBmbG9hdCBhbmNob3JQb2ludFooKSBjb25zdCB7
IHJldHVybiBtX2FuY2hvclBvaW50WjsgfQotCi0gICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fYmFja2dyb3VuZENvbG9yID0gY29sb3I7IHNldE5lZWRz
Q29tbWl0KCk7IH0KLSAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tncm91bmRDb2xvcjsgfQotCi0gICAgdm9pZCBzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpIHsgbV9ib3JkZXJDb2xvciA9IGNvbG9yOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0g
ICAgQ29sb3IgYm9yZGVyQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlckNvbG9yOyB9Ci0K
LSAgICB2b2lkIHNldEJvcmRlcldpZHRoKGZsb2F0IHdpZHRoKSB7IG1fYm9yZGVyV2lkdGggPSB3
aWR0aDsgc2V0TmVlZHNDb21taXQoKTsgfQotICAgIGZsb2F0IGJvcmRlcldpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9ib3JkZXJXaWR0aDsgfQotCi0gICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgSW50
U2l6ZSYpOwotICAgIEludFNpemUgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0K
LQotICAgIHZvaWQgc2V0Q2xlYXJzQ29udGV4dChib29sIGNsZWFycykgeyBtX2NsZWFyc0NvbnRl
eHQgPSBjbGVhcnM7IHNldE5lZWRzQ29tbWl0KCk7IH0KLSAgICBib29sIGNsZWFyc0NvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX2NsZWFyc0NvbnRleHQ7IH0KLQotICAgIHZvaWQgc2V0Q29udGVu
dHNHcmF2aXR5KENvbnRlbnRzR3Jhdml0eVR5cGUgZ3Jhdml0eVR5cGUpIHsgbV9jb250ZW50c0dy
YXZpdHkgPSBncmF2aXR5VHlwZTsgc2V0TmVlZHNDb21taXQoKTsgfQotICAgIENvbnRlbnRzR3Jh
dml0eVR5cGUgY29udGVudHNHcmF2aXR5KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0dyYXZp
dHk7IH0KLQotICAgIHZvaWQgc2V0RG91YmxlU2lkZWQoYm9vbCBkb3VibGVTaWRlZCkgeyBtX2Rv
dWJsZVNpZGVkID0gZG91YmxlU2lkZWQ7IHNldE5lZWRzQ29tbWl0KCk7IH0KLSAgICBib29sIGRv
dWJsZVNpZGVkKCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVTaWRlZDsgfQotCi0gICAgdm9pZCBz
ZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1aW50MzJfdCBtYXNrKSB7IG1fZWRnZUFudGlhbGlhc2lu
Z01hc2sgPSBtYXNrOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0gICAgdWludDMyX3QgZWRnZUFudGlh
bGlhc2luZ01hc2soKSBjb25zdCB7IHJldHVybiBtX2VkZ2VBbnRpYWxpYXNpbmdNYXNrOyB9Ci0K
LSAgICB2b2lkIHNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIEZsb2F0UmVjdCBmcmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KLQotICAgIHZvaWQgc2V0SGlkZGVuKGJvb2wg
aGlkZGVuKSB7IG1faGlkZGVuID0gaGlkZGVuOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0gICAgYm9v
bCBpc0hpZGRlbigpIGNvbnN0IHsgcmV0dXJuIG1faGlkZGVuOyB9Ci0KLSAgICB2b2lkIHNldE1h
c2tzVG9Cb3VuZHMoYm9vbCBtYXNrc1RvQm91bmRzKSB7IG1fbWFza3NUb0JvdW5kcyA9IG1hc2tz
VG9Cb3VuZHM7IH0KLSAgICBib29sIG1hc2tzVG9Cb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX21h
c2tzVG9Cb3VuZHM7IH0KLQotICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsg
bV9uYW1lID0gbmFtZTsgfQotICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1l
OyB9Ci0KLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVj
dCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLQotICAgIHZvaWQgc2V0TmVlZHNEaXNw
bGF5T25Cb3VuZHNDaGFuZ2UoYm9vbCBuZWVkc0Rpc3BsYXkpIHsgbV9uZWVkc0Rpc3BsYXlPbkJv
dW5kc0NoYW5nZSA9IG5lZWRzRGlzcGxheTsgfQotCi0gICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0
IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgc2V0TmVlZHNDb21taXQoKTsgfQotICAg
IGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KLQotICAgIHZvaWQg
c2V0T3BhcXVlKGJvb2wgb3BhcXVlKSB7IG1fb3BhcXVlID0gb3BhcXVlOyBzZXROZWVkc0NvbW1p
dCgpOyB9Ci0gICAgYm9vbCBvcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQotCi0g
ICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikgeyBtX3Bvc2l0
aW9uID0gcG9zaXRpb247ICBzZXROZWVkc0NvbW1pdCgpOyB9Ci0KLSAgICBGbG9hdFBvaW50IHBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQotCi0gICAgdm9pZCBzZXRaUG9z
aXRpb24oZmxvYXQgelBvc2l0aW9uKSB7IG1felBvc2l0aW9uID0gelBvc2l0aW9uOyBzZXROZWVk
c0NvbW1pdCgpOyB9Ci0gICAgZmxvYXQgelBvc2l0aW9uKCkgY29uc3QgeyAgcmV0dXJuIG1felBv
c2l0aW9uOyB9Ci0KLSAgICBjb25zdCBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSBjb25zdDsK
LQotICAgIHZvaWQgcmVtb3ZlQWxsU3VibGF5ZXJzKCk7Ci0KLSAgICB2b2lkIHNldFN1YmxheWVy
cyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mKTsKLQotICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgZ2V0U3VibGF5ZXJzKCkgY29uc3QgeyByZXR1
cm4gbV9zdWJsYXllcnM7IH0KLQotICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX3N1YmxheWVyVHJhbnNmb3JtID0g
dHJhbnNmb3JtOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdWJsYXllclRyYW5z
Zm9ybTsgfQotCi0gICAgdm9pZCBzZXRTdXBlcmxheWVyKExheWVyQ2hyb21pdW0qIHN1cGVybGF5
ZXIpOwotICAgIExheWVyQ2hyb21pdW0qIHN1cGVybGF5ZXIoKSBjb25zdDsKLQotCi0gICAgdm9p
ZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBt
X3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgc2V0TmVlZHNDb21taXQoKTsgfQotICAgIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9y
bTsgfQotCi0gICAgdm9pZCBzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCBmbGlwcGVkKSB7IG1fZ2Vv
bWV0cnlGbGlwcGVkID0gZmxpcHBlZDsgc2V0TmVlZHNDb21taXQoKTsgfQotICAgIGJvb2wgZ2Vv
bWV0cnlGbGlwcGVkKCkgY29uc3QgeyByZXR1cm4gbV9nZW9tZXRyeUZsaXBwZWQ7IH0KLQotICAg
IHZvaWQgdXBkYXRlQ29udGVudHMoKTsKLQotICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBwbGF0
Zm9ybUNhbnZhcygpIHsgcmV0dXJuIG1fY2FudmFzLmdldCgpOyB9Ci0gICAgR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBtX2dyYXBoaWNzQ29udGV4dC5nZXQoKTsg
fQotCi0gICAgdm9pZCBzZXRCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEludFNpemUmKTsKLQotICAg
IHZvaWQgZHJhd0RlYnVnQm9yZGVyKCk7Ci0KLXByaXZhdGU6Ci0gICAgTGF5ZXJDaHJvbWl1bShM
YXllclR5cGUsIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwotCi0gICAgdm9pZCBzZXRO
ZWVkc0NvbW1pdCgpOwotCi0gICAgdm9pZCBwYWludE1lKCk7Ci0KLSAgICBzaXplX3QgbnVtU3Vi
bGF5ZXJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N1YmxheWVycy5zaXplKCk7
Ci0gICAgfQotCi0gICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHN1YmxheWVyIG9yIC0x
IGlmIG5vdCBmb3VuZC4KLSAgICBpbnQgaW5kZXhPZlN1YmxheWVyKGNvbnN0IExheWVyQ2hyb21p
dW0qKTsKLQotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gcmVtb3ZlRnJv
bVN1cGVybGF5ZXIuCi0gICAgdm9pZCByZW1vdmVTdWJsYXllcihMYXllckNocm9taXVtKik7Ci0K
LSAgICAvLyBSZS1jcmVhdGUgdGhlIGNhbnZhcyBhbmQgZ3JhcGhpY3MgY29udGV4dC4gVGhpcyBt
ZXRob2QKLSAgICAvLyBtdXN0IGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBsYXllciBpcyByZXNp
emVkLgotICAgIHZvaWQgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnN0IEludFNpemUmKTsKLQot
ICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX3N1YmxheWVyczsKLSAgICBMYXll
ckNocm9taXVtKiBtX3N1cGVybGF5ZXI7Ci0KLSAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG1f
b3duZXI7Ci0gICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX2NhbnZhczsKLSAgICBP
d25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gbV9za2lhQ29udGV4dDsKLSAgICBPd25QdHI8R3Jh
cGhpY3NDb250ZXh0PiBtX2dyYXBoaWNzQ29udGV4dDsKLQotICAgIExheWVyVHlwZSBtX2xheWVy
VHlwZTsKLQotICAgIEludFNpemUgbV9ib3VuZHM7Ci0gICAgSW50U2l6ZSBtX2JhY2tpbmdTdG9y
ZVJlY3Q7Ci0gICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQgbV9hbmNo
b3JQb2ludDsKLSAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKLSAgICBDb2xvciBtX2JvcmRl
ckNvbG9yOwotCi0gICAgRmxvYXRSZWN0IG1fZnJhbWU7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbV90cmFuc2Zvcm07Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5z
Zm9ybTsKLQotICAgIHVpbnQzMl90IG1fZWRnZUFudGlhbGlhc2luZ01hc2s7Ci0gICAgZmxvYXQg
bV9vcGFjaXR5OwotICAgIGZsb2F0IG1felBvc2l0aW9uOwotICAgIGZsb2F0IG1fYW5jaG9yUG9p
bnRaOwotICAgIGZsb2F0IG1fYm9yZGVyV2lkdGg7Ci0KLSAgICBib29sIG1fY2xlYXJzQ29udGV4
dDsKLSAgICBib29sIG1fZG91YmxlU2lkZWQ7Ci0gICAgYm9vbCBtX2hpZGRlbjsKLSAgICBib29s
IG1fbWFza3NUb0JvdW5kczsKLSAgICBib29sIG1fb3BhcXVlOwotICAgIGJvb2wgbV9nZW9tZXRy
eUZsaXBwZWQ7Ci0gICAgYm9vbCBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlOwotCi0gICAg
Q29udGVudHNHcmF2aXR5VHlwZSBtX2NvbnRlbnRzR3Jhdml0eTsKLSAgICBTdHJpbmcgbV9uYW1l
OwotfTsKLQotfQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0j
ZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTcyMzUpCisrKyBXZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDQtMDcg
IFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluY2x1ZGUgZmlsZSBjaGFuZ2Ug
YXMgYSByZXN1bHQgb2YgcmVuYW1pbmcgTGF5ZXJSZW5kZXJTa2lhLmggdG8gTGF5ZXJSZW5kZXJD
aHJvbWl1bS5oCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNzIzMQorCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTAtMDQtMDcgIFBh
dmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgWXVyeSBTZW1pa2hhdHNreS4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgJKHJl
dmlzaW9uIDU3MjIyKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50SW1wbC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRJ
bXBsLmgiCi0jaW5jbHVkZSAiTGF5ZXJSZW5kZXJlclNraWEuaCIKKyNpbmNsdWRlICJMYXllclJl
bmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgi
CiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>