<?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>41347</bug_id>
          
          <creation_ts>2010-06-29 06:19:13 -0700</creation_ts>
          <short_desc>Cleanup SVGRenderSupport</short_desc>
          <delta_ts>2010-06-29 07:27:34 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>244251</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-29 06:19:13 -0700</bug_when>
    <thetext>SVGRenderSupport contains the SVGRenderBase class, which was meant to be a base class for all SVG renders until all inherit from RenderSVGModelObject, introduced by Eric a year ago.
RenderSVGModelObject inherits from RenderObject. That means classes like RenderSVGImage, which inherits from RenderImage, can NOT inherit from RenderSVGModelObject, as RenderImage already inherits from RenderObject.
The whole class is uncessary and confusing. I&apos;ll rename it to SVGRenderSupport, just like the file name, and make all methods static and make it impossible to construct the class.
This shrinks the size of all SVG renderers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244271</commentid>
    <comment_count>1</comment_count>
      <attachid>60019</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-29 07:05:23 -0700</bug_when>
    <thetext>Created attachment 60019
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244272</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-29 07:07:42 -0700</bug_when>
    <thetext>Attachment 60019 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/rendering/RenderSVGResourcePattern.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 32 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>244276</commentid>
    <comment_count>3</comment_count>
      <attachid>60019</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-29 07:17:48 -0700</bug_when>
    <thetext>Comment on attachment 60019
Initial patch

LGTM. Fix the alphabetic order and you can land it. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244282</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-29 07:26:28 -0700</bug_when>
    <thetext>Landed in r62117.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244283</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-29 07:27:34 -0700</bug_when>
    <thetext>Oops, that should be: 62118.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60019</attachid>
            <date>2010-06-29 07:05:23 -0700</date>
            <delta_ts>2010-06-29 07:17:48 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>RenderTreeCleanup.diff</filename>
            <type>text/plain</type>
            <size>70438</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjExNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM1IEBACisyMDEwLTA2LTI5ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIENsZWFudXAgU1ZHUmVuZGVyU3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzNDcKKworICAgICAgICBSZW1vdmUgU1ZHUmVuZGVy
QmFzZSBiYXNlIGNsYXNzIGZyb20gYWxsIFNWRyByZW5kZXJlcnMuIEl0IHdhcyBtZWFudCBhcyB0
ZW1wb3Jhcnkgc29sdXRpb24gdW50aWwgYWxsIFNWRyByZW5kZXJlcnMgaW5oZXJpdCBmcm9tIFJl
bmRlclNWR01vZGVsT2JqZWN0LAorICAgICAgICB0aG91Z2ggdGhpcyBpcyBub3QgZ29pbmcgdG8g
aGFwcGVuLiBSZW5kZXJTVkdNb2RlbE9iamVjdCBpbmhlcml0cyBmcm9tIFJlbmRlck9iamVjdCwg
bWFraW5nIGl0IGltcG9zc2libGUgdG8gaW5oZXJpdCBlZy4gUmVuZGVyU1ZHSW1hZ2UgZnJvbSBp
dCwgYXMKKyAgICAgICAgaXQgYWxyZWFkeSBpbmRpcmVjdGx5IGluaGVyaXRzIGZyb20gUmVuZGVy
T2JqZWN0LCB0aHJvdWdoIFJlbmRlckltYWdlLiBPdGhlciBleGFtcGxlcyBhcmUgUmVuZGVyRm9y
ZWlnbk9iamVjdCAoUmVuZGVyQmxvY2sgaW5oZXJpdGFuY2UpLAorICAgICAgICBSZW5kZXJTVkdJ
bmxpbmVUZXh0IChSZW5kZXJUZXh0IGluaGVyaXRhbmNlKSBldGMuCisKKyAgICAgICAgUmVuYW1l
IFNWR1JlbmRlckJhc2UgdG8gU1ZHUmVuZGVyU3VwcG9ydCwganVzdCBsaWtlIHRoZSBmaWxlIGlz
IG5hbWVkLCByZW1vdmUgYWxsIGZyZWUgZnVuY3Rpb25zLCBhbmQgbWFrZSB0aGVtIGFsbCBzdGF0
aWMgZnVuY3Rpb25zIGluIFNWR1JlbmRlclN1cHBvcnQuCisgICAgICAgIFdlIGNhbiBzdGlsbCBz
aGFyZSBjb2RlIGJldHdlZW4gYWxsIFNWRyByZW5kZXJlcnMsIGJ1dCBkb24ndCBuZWVkIGEgc3Bl
Y2lhbCBiYXNlIGNsYXNzIGZvciBhbGwgcmVuZGVyZXJzIC0+IHNocmluayBzaXplIG9mIGFsbCBT
VkcgcmVuZGVyZXJzLgorCisgICAgICAgIERvZXNuJ3QgYWZmZWN0IGFueSB0ZXN0LgorCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6IFJlbW92ZSBsb2NhbFRyYW5zZm9ybSgpIG92
ZXJyaWRlLCBub3QgbmVlZGVkIGF0IGFsbC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
Lmg6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcDog
cy9TVkdSZW5kZXJCYXNlL1NWR1JlbmRlclN1cHBvcnQvCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGb3JlaWduT2JqZWN0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGb3JlaWdu
T2JqZWN0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGb3JlaWduT2JqZWN0Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRm9yZWlnbk9iamVjdDo6bm9kZUF0RmxvYXRQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGb3JlaWduT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCb3Vu
ZGluZ1JlY3RTdHJva2VTdHlsZUFwcGxpZXI6OnN0cm9rZVN0eWxlKTogYXBwbHlTdHJva2VTdHls
ZVRvQ29udGV4dCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBTVkdSZW5kZXJTdXBwb3J0IG5vdy4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6OnBhaW50KTogcy9TVkdSZW5kZXJCYXNlL1NW
R1JlbmRlclN1cHBvcnQvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpub2RlQXRGbG9h
dFBvaW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjp1cGRhdGVDYWNo
ZWRCb3VuZGFyaWVzKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2Nr
Lmg6IFJlbW92ZSBTVkdSZW5kZXJCYXNlIGluaGVyaXRhbmNlLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29u
dGFpbmVyOjpsYXlvdXQpOiBsYXlvdXRDaGlsZHJlbiBpcyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBT
VkdSZW5kZXJTdXBwb3J0IG5vdy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5l
cjo6cGFpbnQpOiBwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50L2ZpbmlzaFJlbmRlclNWR0NvbnRl
bnQgYXJlIG5vdyBzdGF0aWMgZnVuY3Rpb25zIGluIFNWR1JlbmRlclN1cHBvcnQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6Om9iamVjdEJvdW5kaW5nQm94KTogY29tcHV0
ZUNvbnRhaW5lckJvdW5kaW5nQm94IGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIFNWR1JlbmRlclN1
cHBvcnQgbm93LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpzdHJva2VC
b3VuZGluZ0JveCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVy
OjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyk6IFJlbW92ZSBjYWxsIHRvIGNvbXB1dGVD
b250YWluZXJCb3VuZGluZ0JveCwgdXNlIHN0cm9rZUJvdW5kaW5nQm94IGluc3RlYWQsIGZvciBj
b25zaXN0ZW5jeS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0
RmxvYXRQb2ludCk6IHBvaW50SW5DbGlwcGluZ0FyZWEgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4g
U1ZHUmVuZGVyU3VwcG9ydCBub3cuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRl
bkNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdIaWRkZW5Db250YWlu
ZXI6OmxheW91dCk6IGxheW91dENoaWxkcmVuIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIFNWR1Jl
bmRlclN1cHBvcnQgbm93LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6cGFpbnQpOiBwcmVwYXJlVG9SZW5k
ZXJTVkdDb250ZW50L2ZpbmlzaFJlbmRlclNWR0NvbnRlbnQgYXJlIHN0YXRpYyBmdW5jdGlvbnMg
aW4gU1ZHUmVuZGVyU3VwcG9ydCBub3cuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFn
ZTo6ZGVzdHJveSk6IGRlcmVnaXN0ZXJSZXNvdXJjZSB3YXMgcmVuYW1lZCB0byBpbnZhbGlkYXRl
QWxsUmVzb3VyY2VzT2ZSZW5kZXJlciBhbmQgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gU1ZHUmVu
ZGVyU3VwcG9ydC4gCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6bm9kZUF0Rmxv
YXRQb2ludCk6IHBvaW50SW5DbGlwcGluZ0FyZWEgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gU1ZH
UmVuZGVyU3VwcG9ydCBub3cuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6cmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMpOiBpbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNv
dXJjZXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gU1ZHUmVuZGVyU3VwcG9ydCBub3cuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFp
bnQpOiBzL1NWR1JlbmRlckJhc2UvU1ZHUmVuZGVyU3VwcG9ydC8KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR0ltYWdlOjpjb21wdXRlUmVjdEZvclJlcGFpbnQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjptYXBMb2NhbFRvQ29udGFpbmVyKTogRGl0dG8uCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmg6IFJlbW92ZSBTVkdSZW5kZXJCYXNl
IGluaGVyaXRhbmNlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lOjpvYmplY3RCb3VuZGluZ0JveCk6IGZp
bmRUZXh0Um9vdE9iamVjdCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBTVkdSZW5kZXJTdXBwb3J0
IG5vdy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZTo6c3Ryb2tlQm91bmRpbmdC
b3gpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZTo6cmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R0lubGluZTo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQpOiBzL1NWR1JlbmRlckJhc2Uv
U1ZHUmVuZGVyU3VwcG9ydC8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZTo6Y29t
cHV0ZVJlY3RGb3JSZXBhaW50KTogRGl0dG8sLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
SW5saW5lOjptYXBMb2NhbFRvQ29udGFpbmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdJbmxpbmU6OmFic29sdXRlUXVhZHMpOiBmaW5kVGV4dFJvb3RPYmplY3QgaXMgYSBz
dGF0aWMgZnVuY3Rpb24gaW4gU1ZHUmVuZGVyU3VwcG9ydCBub3cuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclNWR0lubGluZS5oOiBSZW1vdmUgU1ZHUmVuZGVyQmFzZSBpbmhlcml0YW5jZS4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KTogcy9TVkdSZW5kZXJCYXNlL1NWR1JlbmRlclN1cHBvcnQvCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bWFwTG9jYWxUb0NvbnRhaW5l
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmRlc3Ry
b3kpOiBkZXJlZ2lzdGVyUmVzb3VyY2Ugd2FzIHJlbmFtZWQgdG8gaW52YWxpZGF0ZUFsbFJlc291
cmNlc09mUmVuZGVyZXIgYW5kIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIFNWR1JlbmRlclN1cHBv
cnQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0Lmg6IFJlbW92ZSBT
VkdSZW5kZXJCYXNlIGluaGVyaXRhbmNlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbnZhbGlkYXRlUGFpbnRpbmdSZXNvdXJj
ZSk6IE1vdmVkIGhlcmUgZnJvbSBTVkdSZW5kZXJTdXBwb3J0IChzdGF0aWMgaW5saW5lIGhlbHBl
ciBmdW5jdGlvbikuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZTo6aW52YWxp
ZGF0ZUFsbFJlc291cmNlc09mUmVuZGVyZXIpOiBNb3ZlZCBoZXJlIGZyb20gU1ZHUmVuZGVyU3Vw
cG9ydCBhbmQgcmVuYW1lZCBmcm9tIGRlcmVnaXN0ZXJGcm9tUmVzb3VyY2VzLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oOiBFeHBvc2UgaW52YWxpZGF0ZUFsbFJlc291
cmNlc09mUmVuZGVyZXIgZnVuY3Rpb24uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXI6OmNyZWF0ZUNsaXBEYXRhKTogcmVuZGVyU3VidHJlZVRvSW1hZ2UgaXMgYSBzdGF0aWMg
ZnVuY3Rpb24gaW4gU1ZHUmVuZGVyU3VwcG9ydCBub3cuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29udGVudCk6IERpdHRvLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZU1hc2tBbmRTd2FwQ29udGV4dEZvclRleHRHcmFkaWVudCk6IGZpbmRUZXh0
Um9vdE9iamVjdCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBTVkdSZW5kZXJTdXBwb3J0IG5vdy4K
KyAgICAgICAgKFdlYkNvcmU6OmNsaXBUb1RleHRNYXNrKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKTogYXBwbHlTdHJv
a2VTdHlsZVRvQ29udGV4dCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBTVkdSZW5kZXJTdXBwb3J0
IG5vdy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RB
cHBseVJlc291cmNlKTogZmluZFRleHRSb290T2JqZWN0IGlzIGEgc3RhdGljIGZ1bmN0aW9uIGlu
IFNWR1JlbmRlclN1cHBvcnQgbm93LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZU1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
cjo6YXBwbHlWaWV3cG9ydENsaXApOiBzL1NWR1JlbmRlckJhc2UvU1ZHUmVuZGVyU3VwcG9ydC8K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmNyZWF0ZU1hc2tJbWFnZSk6IHJl
bmRlclN1YnRyZWVUb0ltYWdlIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIFNWR1JlbmRlclN1cHBv
cnQgbm93LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291
cmNlKTogYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBT
VkdSZW5kZXJTdXBwb3J0IG5vdy4KKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wSW1hZ2VCdWZmZXJT
aXplVG9WaWV3cG9ydCk6IE1vdmVkIGhlcmUgZnJvbSBTVkdSZW5kZXJTdXBwb3J0LgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpjcmVhdGVUaWxlSW1hZ2UpOiBy
ZW5kZXJTdWJ0cmVlVG9JbWFnZSBpcyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBTVkdSZW5kZXJTdXBw
b3J0IG5vdy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6YXBw
bHlSZXNvdXJjZSk6IGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQgaXMgYSBzdGF0aWMgZnVuY3Rp
b24gaW4gU1ZHUmVuZGVyU3VwcG9ydCBub3cKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZH
Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQpOiBsYXlv
dXRDaGlsZHJlbiBpcyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBTVkdSZW5kZXJTdXBwb3J0IG5vdy4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnBhaW50KTogcHJlcGFyZVRvUmVuZGVy
U1ZHQ29udGVudC9maW5pc2hSZW5kZXJTVkdDb250ZW50IGFyZSBub3cgc3RhdGljIGZ1bmN0aW9u
cyBpbiBTVkdSZW5kZXJTdXBwb3J0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6
ZGVzdHJveSk6IGRlcmVnaXN0ZXJSZXNvdXJjZSB3YXMgcmVuYW1lZCB0byBpbnZhbGlkYXRlQWxs
UmVzb3VyY2VzT2ZSZW5kZXJlciBhbmQgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gU1ZHUmVuZGVy
U3VwcG9ydC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKTogUmVtb3ZlIGNhbGwgdG8gY29tcHV0ZUNvbnRhaW5lckJvdW5kaW5n
Qm94LCB1c2Ugc3Ryb2tlQm91bmRpbmdCb3ggaW5zdGVhZCwgZm9yIGNvbnNpc3RlbmN5LgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSb290Lmg6IFJlbW92ZSBsb2NhbFRyYW5zZm9ybSgp
IG92ZXJyaWRlLCBubyBsb25nZXIgbmVlZGVkLiBSZW1vdmUgU1ZHUmVuZGVyQmFzZSBpbmhlcml0
YW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6Om9iamVjdEJvdW5kaW5nQm94
KTogSW5saW5lZCBmb3Igc3BlZWVkLiAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6
OnN0cm9rZUJvdW5kaW5nQm94KTogY29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94IGlzIGEgc3Rh
dGljIGZ1bmN0aW9uIGluIFNWR1JlbmRlclN1cHBvcnQgbm93LgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTVkdUZXh0LmNwcDogCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpj
bGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCk6IHMvU1ZHUmVuZGVyQmFzZS9TVkdSZW5kZXJT
dXBwb3J0LworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6Y29tcHV0ZVJlY3RGb3JS
ZXBhaW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjptYXBMb2Nh
bFRvQ29udGFpbmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpu
b2RlQXRGbG9hdFBvaW50KTogcG9pbnRJbkNsaXBwaW5nQXJlYSBpcyBhIHN0YXRpYyBmdW5jdGlv
biBpbiBTVkdSZW5kZXJTdXBwb3J0IG5vdy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Rl
eHQ6OmRlc3Ryb3kpOiBkZXJlZ2lzdGVyUmVzb3VyY2Ugd2FzIHJlbmFtZWQgdG8gaW52YWxpZGF0
ZUFsbFJlc291cmNlc09mUmVuZGVyZXIgYW5kIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIFNWR1Jl
bmRlclN1cHBvcnQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpyZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcyk6IGludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyBp
cyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBTVkdSZW5kZXJTdXBwb3J0IG5vdy4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OmFwcGx5Vmlld3BvcnRDbGlwKTogcy9TVkdS
ZW5kZXJCYXNlL1NWR1JlbmRlclN1cHBvcnQvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdW
aWV3cG9ydENvbnRhaW5lcjo6cG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xpcCk6IHBvaW50SW5DbGlw
cGluZ0FyZWEgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gU1ZHUmVuZGVyU3VwcG9ydCBub3cuCisg
ICAgICAgICogcmVuZGVyaW5nL1NWR0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW5saW5lRmxvd0JveDo6cGFpbnQpOiBwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50L2Zp
bmlzaFJlbmRlclNWR0NvbnRlbnQgYXJlIG5vdyBzdGF0aWMgZnVuY3Rpb25zIGluIFNWR1JlbmRl
clN1cHBvcnQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwOiBNYWtl
IGl0IGltcG9zc2libGUgdG8gY29uc3RydWN0IHRoZSBjbGFzcy4gUmVtb3ZlIHZpcnR1YWwgZGVz
dHJ1Y3RvciwgbWFkZSBhbGwgbWV0aG9kcyBzdGF0aWMuCisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZW5kZXJTdXBwb3J0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCk6IHMvU1ZHUmVuZGVy
QmFzZS9TVkdSZW5kZXJTdXBwb3J0LworICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9y
dDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZW5kZXJTdXBwb3J0OjptYXBMb2NhbFRvQ29udGFpbmVyKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250
ZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpyZW5kZXJT
dWJ0cmVlVG9JbWFnZSk6IE1hZGUgc3RhdGljLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVy
U3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbik6IHMvU1ZHUmVu
ZGVyQmFzZS9TVkdSZW5kZXJTdXBwb3J0LworICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3Vw
cG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKTogTWFkZSBz
dGF0aWMuCisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjpkYXNoQXJyYXlGcm9t
UmVuZGVyaW5nU3R5bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBv
cnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1JlbmRlclN1cHBvcnQ6OmZpbmRUZXh0Um9vdE9iamVjdCk6IERpdHRvLgorICAgICAgICAq
IHJlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1Jl
bmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTdHlsZSk6IGRhc2hB
cnJheUZyb21SZW5kZXJpbmdTdHlsZSBpcyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBTVkdSZW5kZXJT
dXBwb3J0IG5vdy4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpwYWludCk6IHMvU1ZHUmVuZGVyQmFz
ZS9TVkdSZW5kZXJTdXBwb3J0LworICAgICAgICAqIHJlbmRlcmluZy9TVkdSb290SW5saW5lQm94
Lmg6IFJlbW92ZSBTVkdSZW5kZXJCYXNlIGluaGVyaXRhbmNlLgorICAgICAgICAqIHN2Zy9TVkdG
RUltYWdlRWxlbWVudC5jcHA6IEFkZCBSZW5kZXJPYmplY3QuaCBpbmNsdWRlLCBvdGhlcndoaXNl
IGl0IHdvbid0IGJ1aWxkIGFueW1vcmUuCisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxl
bWVudDo6YnVpbGQpOiByZW5kZXJTdWJ0cmVlVG9JbWFnZSBpcyBhIHN0YXRpYyBmdW5jdGlvbiBp
biBTVkdSZW5kZXJTdXBwb3J0IG5vdy4KKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5j
cHA6IAorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZCk6IGRlcmVnaXN0ZXJSZXNvdXJjZSB3YXMgcmVuYW1lZCB0byBpbnZhbGlkYXRlQWxsUmVz
b3VyY2VzT2ZSZW5kZXJlciBhbmQgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gU1ZHUmVuZGVyU3Vw
cG9ydC4KKwogMjAxMC0wNi0yMSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCShyZXZpc2lvbiA2MjEwNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MDQsMTMgKzI5MDQsNCBAQCB2b2lkIFJlbmRlckJv
eDo6Y2xlYXJMYXlvdXRPdmVyZmxvdygpCiAgICAgbV9vdmVyZmxvdy0+cmVzZXRMYXlvdXRPdmVy
Zmxvdyhib3JkZXJCb3hSZWN0KCkpOwogfQogCi0jaWYgRU5BQkxFKFNWRykKLQotQWZmaW5lVHJh
bnNmb3JtIFJlbmRlckJveDo6bG9jYWxUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIHJldHVybiBB
ZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgeCgpLCB5KCkpOwotfQotCi0jZW5kaWYKLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDYy
MDk5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5NywxMCArMjk3LDYgQEAgcHVibGljOgogICAgIGJvb2wgc2hyaW5rVG9Bdm9pZEZsb2F0cygp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25zdDsKIAotI2lmIEVO
QUJMRShTVkcpCi0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBj
b25zdDsKLSNlbmRpZgotCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENo
YW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CiAgICAg
dmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25P
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25P
YmplY3QuY3BwCShyZXZpc2lvbiA2MjEwNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZv
cmVpZ25PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgUmVu
ZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnRJbmYKICAgICBjaGlsZFBhaW50SW5mby5jb250
ZXh0LT5zYXZlKCk7CiAgICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obG9jYWxUcmFu
c2Zvcm0oKSk7CiAKLSAgICBpZiAoU1ZHUmVuZGVyQmFzZTo6aXNPdmVyZmxvd0hpZGRlbih0aGlz
KSkKKyAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlzKSkKICAg
ICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+Y2xpcChtX3ZpZXdwb3J0KTsKIAogICAgIGZs
b2F0IG9wYWNpdHkgPSBzdHlsZSgpLT5vcGFjaXR5KCk7CkBAIC02NiwxMiArNjYsMTIgQEAgdm9p
ZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpwYWludChQYWludEluZgogCiBJbnRSZWN0IFJlbmRlckZv
cmVpZ25PYmplY3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyKQogewotICAgIHJldHVybiBTVkdSZW5kZXJCYXNlOjpj
bGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCh0aGlzLCByZXBhaW50Q29udGFpbmVyKTsKKyAg
ICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQo
dGhpcywgcmVwYWludENvbnRhaW5lcik7CiB9CiAKIHZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6
Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLCBJbnRSZWN0JiByZXBhaW50UmVjdCwgYm9vbCBmaXhlZCkKIHsKLSAgICBTVkdSZW5kZXJC
YXNlOjpjb21wdXRlUmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWludENvbnRhaW5lciwgcmVwYWlu
dFJlY3QsIGZpeGVkKTsKKyAgICBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlUmVjdEZvclJlcGFp
bnQodGhpcywgcmVwYWludENvbnRhaW5lciwgcmVwYWludFJlY3QsIGZpeGVkKTsKIH0KIAogY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBSZW5kZXJGb3JlaWduT2JqZWN0Ojpsb2NhbFRvUGFyZW50VHJh
bnNmb3JtKCkgY29uc3QKQEAgLTEyNyw3ICsxMjcsNyBAQCBib29sIFJlbmRlckZvcmVpZ25PYmpl
Y3Q6Om5vZGVBdEZsb2F0UG9pCiAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUcmFu
c2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CiAKICAgICAvLyBFYXJs
eSBleGl0IGlmIGxvY2FsIHBvaW50IGlzIG5vdCBjb250YWluZWQgaW4gY2xpcHBlZCB2aWV3cG9y
dCBhcmVhCi0gICAgaWYgKFNWR1JlbmRlckJhc2U6OmlzT3ZlcmZsb3dIaWRkZW4odGhpcykgJiYg
IW1fdmlld3BvcnQuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAgaWYgKFNWR1JlbmRlclN1cHBv
cnQ6OmlzT3ZlcmZsb3dIaWRkZW4odGhpcykgJiYgIW1fdmlld3BvcnQuY29udGFpbnMobG9jYWxQ
b2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEludFBvaW50IHJvdW5kZWRMb2Nh
bFBvaW50ID0gcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpOwpAQCAtMTQ1LDcgKzE0NSw3IEBA
IHZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6bWFwTG9jYWxUb0NvbnQKICAgICAvLyBXaGVuIGNy
YXdsaW5nIHVwIHRoZSBoaWVyYWNoeSBzdGFydGluZyBmcm9tIGZvcmVpZ25PYmplY3QgY2hpbGQg
Y29udGVudCwgdXNlVHJhbnNmb3JtcyBtYXkgbm90IGJlIHNldCB0byB0cnVlLgogICAgIGlmICgh
dXNlVHJhbnNmb3JtcykKICAgICAgICAgdXNlVHJhbnNmb3JtcyA9IHRydWU7Ci0gICAgU1ZHUmVu
ZGVyQmFzZTo6bWFwTG9jYWxUb0NvbnRhaW5lcih0aGlzLCByZXBhaW50Q29udGFpbmVyLCBmaXhl
ZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOworICAgIFNWR1JlbmRlclN1cHBvcnQ6
Om1hcExvY2FsVG9Db250YWluZXIodGhpcywgcmVwYWludENvbnRhaW5lciwgZml4ZWQsIHVzZVRy
YW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UGF0aC5jcHAJKHJldmlzaW9uIDYyMTA0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzdHJva2VTdHlsZShHcmFwaGljc0NvbnRleHQqIGdjKQogICAgIHsKLSAgICAgICAgYXBwbHlT
dHJva2VTdHlsZVRvQ29udGV4dChnYywgbV9zdHlsZSwgbV9vYmplY3QpOworICAgICAgICBTVkdS
ZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGdjLCBtX3N0eWxlLCBtX29i
amVjdCk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgUmVuZGVy
UGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEkKICAgICAgICAgaWYgKGNoaWxkUGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7CiAgICAgICAgICAgICBQYWludEluZm8g
c2F2ZWRJbmZvKGNoaWxkUGFpbnRJbmZvKTsKIAotICAgICAgICAgICAgaWYgKHByZXBhcmVUb1Jl
bmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8sIGJvdW5kaW5nQm94LCBmaWx0ZXIp
KSB7CisgICAgICAgICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZH
Q29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbywgYm91bmRpbmdCb3gsIGZpbHRlcikpIHsKICAg
ICAgICAgICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5z
dmdTdHlsZSgpOwogICAgICAgICAgICAgICAgIGlmIChzdmdTdHlsZS0+c2hhcGVSZW5kZXJpbmco
KSA9PSBTUl9DUklTUEVER0VTKQogICAgICAgICAgICAgICAgICAgICBjaGlsZFBhaW50SW5mby5j
b250ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOwpAQCAtMTg5LDcgKzE4OSw3IEBAIHZv
aWQgUmVuZGVyUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEkKICAgICAgICAgICAgICAgICAg
ICAgbV9tYXJrZXJMYXlvdXRJbmZvLmRyYXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGls
ZFBhaW50SW5mbywgZmlsdGVyLCBzYXZlZEluZm8uY29udGV4dCk7CisgICAgICAgICAgICBTVkdS
ZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZv
LCBmaWx0ZXIsIHNhdmVkSW5mby5jb250ZXh0KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChk
cmF3c091dGxpbmUpCkBAIC0yMTcsNyArMjE3LDcgQEAgYm9vbCBSZW5kZXJQYXRoOjpub2RlQXRG
bG9hdFBvaW50KGNvbnN0IAogCiAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV9sb2NhbFRy
YW5zZm9ybS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CiAKLSAgICBpZiAoIXBv
aW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCisgICAgaWYgKCFTVkdSZW5kZXJT
dXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzOjpTVkdfUEFUSF9ISVRURVNUSU5HLCByZXF1ZXN0LCBzdHlsZSgpLT5w
b2ludGVyRXZlbnRzKCkpOwpAQCAtMzE3LDcgKzMxNyw3IEBAIHZvaWQgUmVuZGVyUGF0aDo6dXBk
YXRlQ2FjaGVkQm91bmRhcmllcygKIAogICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJl
cGFpbnQgcmVjdGFuZ2xlCiAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX3N0cm9rZUFuZE1h
cmtlckJvdW5kaW5nQm94OwotICAgIGludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0
aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJz
ZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsK
IH0KIAogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oCShyZXZpc2lvbiA2MjA5
OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDggKzI5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdFbGVtZW50
OwogCi1jbGFzcyBSZW5kZXJTVkdCbG9jayA6IHB1YmxpYyBSZW5kZXJCbG9jawotICAgICAgICAg
ICAgICAgICAgICAgLCBwcm90ZWN0ZWQgU1ZHUmVuZGVyQmFzZSB7CitjbGFzcyBSZW5kZXJTVkdC
bG9jayA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CiBwdWJsaWM6CiAgICAgUmVuZGVyU1ZHQmxvY2so
U1ZHRWxlbWVudCopOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWlu
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5l
ci5jcHAJKHJldmlzaW9uIDYyMTA0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29u
dGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFJlbmRlclNW
R0NvbnRhaW5lcjo6bGF5b3V0KCkKICAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlz
LCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSB8fCBzZWxmV2lsbFBhaW50KCkpOwogICAg
IGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7IC8vIEFsbG93IFJlbmRlclNWR1RyYW5zZm9ybWFi
bGVDb250YWluZXIgdG8gdXBkYXRlIGl0cyB0cmFuc2Zvcm0KIAotICAgIGxheW91dENoaWxkcmVu
KHRoaXMsIHNlbGZOZWVkc0xheW91dCgpKTsKKyAgICBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRD
aGlsZHJlbih0aGlzLCBzZWxmTmVlZHNMYXlvdXQoKSk7CiAgICAgcmVwYWludGVyLnJlcGFpbnRB
ZnRlckxheW91dCgpOwogCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwpAQCAtMTAwLDcgKzEw
MCw3IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8KIAogICAgIGJv
b2wgY29udGludWVSZW5kZXJpbmcgPSB0cnVlOwogICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKLSAgICAgICAgY29udGludWVSZW5kZXJpbmcgPSBw
cmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBib3VuZGluZ0Jv
eCwgZmlsdGVyKTsKKyAgICAgICAgY29udGludWVSZW5kZXJpbmcgPSBTVkdSZW5kZXJTdXBwb3J0
OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBib3VuZGlu
Z0JveCwgZmlsdGVyKTsKIAogICAgIGlmIChjb250aW51ZVJlbmRlcmluZykgewogICAgICAgICBj
aGlsZFBhaW50SW5mby51cGRhdGVQYWludGluZ1Jvb3RGb3JDaGlsZHJlbih0aGlzKTsKQEAgLTEw
OSw3ICsxMDksNyBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvCiAg
ICAgfQogCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkK
LSAgICAgICAgZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbywgZmls
dGVyLCBwYWludEluZm8uY29udGV4dCk7CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlz
aFJlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8sIGZpbHRlciwgcGFpbnRJbmZv
LmNvbnRleHQpOwogCiAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogCkBA
IC0xMzMsMjAgKzEzMywyMCBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YWRkRm9jdXNSaW5n
UmVjCiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdDb250YWluZXI6Om9iamVjdEJvdW5kaW5nQm94KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gY29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94KHRoaXMsIGZh
bHNlKTsKKyAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5k
aW5nQm94KHRoaXMsIGZhbHNlKTsKIH0KIAogRmxvYXRSZWN0IFJlbmRlclNWR0NvbnRhaW5lcjo6
c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAogewotICAgIHJldHVybiBjb21wdXRlQ29udGFpbmVy
Qm91bmRpbmdCb3godGhpcywgdHJ1ZSk7CisgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNv
bXB1dGVDb250YWluZXJCb3VuZGluZ0JveCh0aGlzLCB0cnVlKTsKIH0KIAogLy8gUmVuZGVyU1ZH
Q29udGFpbmVyIGlzIHVzZWQgZm9yIDxnPiBlbGVtZW50cyB3aGljaCBkbyBub3QgdGhlbXNlbHZl
cyBoYXZlIGEKIC8vIHdpZHRoIG9yIGhlaWdodCwgc28gd2UgdW5pb24gYWxsIG9mIG91ciBjaGls
ZCByZWN0cyBhcyBvdXIgcmVwYWludCByZWN0LgogRmxvYXRSZWN0IFJlbmRlclNWR0NvbnRhaW5l
cjo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdAogewotICAgIEZsb2F0UmVj
dCByZXBhaW50UmVjdCA9IGNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveCh0aGlzLCB0cnVlKTsK
LSAgICBpbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgcmVwYWludFJlY3Qp
OworICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IHN0cm9rZUJvdW5kaW5nQm94KCk7CisgICAg
U1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMs
IHJlcGFpbnRSZWN0KTsKIAogICAgIHJldHVybiByZXBhaW50UmVjdDsKIH0KQEAgLTE1OSw3ICsx
NTksNyBAQCBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0RmxvYXRQb2luCiAKICAgICBG
bG9hdFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgp
Lm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwogCi0gICAgaWYgKCFwb2ludEluQ2xpcHBpbmdBcmVh
KHRoaXMsIGxvY2FsUG9pbnQpKQorICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNs
aXBwaW5nQXJlYSh0aGlzLCBsb2NhbFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgICAgIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAkocmV2aXNpb24g
NjIwOTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5l
cjo6UmVuZGVyU1ZHSGlkZGUKIHZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpsYXlvdXQo
KQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBsYXlvdXRDaGlsZHJlbih0aGlz
LCBzZWxmTmVlZHNMYXlvdXQoKSk7IAorICAgIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxk
cmVuKHRoaXMsIHNlbGZOZWVkc0xheW91dCgpKTsgCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2Up
OyAgICAKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAkocmV2aXNp
b24gNjIwOTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQoUGFp
bnRJbmZvJiBwYQogCiAgICAgICAgIFBhaW50SW5mbyBzYXZlZEluZm8ocGFpbnRJbmZvKTsKIAot
ICAgICAgICBpZiAocHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBwYWludEluZm8sIG1f
bG9jYWxCb3VuZHMsIGZpbHRlcikpIHsKKyAgICAgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OnBy
ZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQodGhpcywgcGFpbnRJbmZvLCBtX2xvY2FsQm91bmRzLCBm
aWx0ZXIpKSB7CiAgICAgICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBtX2xvY2FsQm91bmRz
OwogICAgICAgICAgICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwgMCwgaW1hZ2UoKS0+d2lkdGgoKSwg
aW1hZ2UoKS0+aGVpZ2h0KCkpOwogCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgUmVuZGVyU1ZHSW1h
Z2U6OnBhaW50KFBhaW50SW5mbyYgcGEKIAogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PmRyYXdJbWFnZShpbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCk7
CiAgICAgICAgIH0KLSAgICAgICAgZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBwYWludElu
Zm8sIGZpbHRlciwgc2F2ZWRJbmZvLmNvbnRleHQpOworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0
OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIHBhaW50SW5mbywgZmlsdGVyLCBzYXZlZElu
Zm8uY29udGV4dCk7CiAgICAgfQogCiAgICAgaWYgKChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZU91dGxpbmUgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSkg
JiYgc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBSZW5k
ZXJTVkdJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBwYQogCiB2b2lkIFJlbmRlclNWR0ltYWdlOjpk
ZXN0cm95KCkKIHsKLSAgICBkZXJlZ2lzdGVyRnJvbVJlc291cmNlcyh0aGlzKTsKKyAgICBSZW5k
ZXJTVkdSZXNvdXJjZTo6aW52YWxpZGF0ZUFsbFJlc291cmNlc09mUmVuZGVyZXIodGhpcyk7CiAg
ICAgUmVuZGVySW1hZ2U6OmRlc3Ryb3koKTsKIH0KIApAQCAtMTIzLDcgKzEyMyw3IEBAIGJvb2wg
UmVuZGVyU1ZHSW1hZ2U6Om5vZGVBdEZsb2F0UG9pbnQoY28KICAgICBpZiAoaXNWaXNpYmxlIHx8
ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgewogICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9p
bnQgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5Q
YXJlbnQpOwogICAgICAgICAgICAgCi0gICAgICAgIGlmICghcG9pbnRJbkNsaXBwaW5nQXJlYSh0
aGlzLCBsb2NhbFBvaW50KSkKKyAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludElu
Q2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgIGlmIChoaXRSdWxlcy5jYW5IaXRGaWxsKSB7CkBAIC0xNTAsNyArMTUwLDcg
QEAgRmxvYXRSZWN0IFJlbmRlclNWR0ltYWdlOjpyZXBhaW50UmVjdEluTAogICAgICAgICByZXR1
cm4gbV9jYWNoZWRMb2NhbFJlcGFpbnRSZWN0OwogCiAgICAgbV9jYWNoZWRMb2NhbFJlcGFpbnRS
ZWN0ID0gbV9sb2NhbEJvdW5kczsKLSAgICBpbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJj
ZXModGhpcywgbV9jYWNoZWRMb2NhbFJlcGFpbnRSZWN0KTsKKyAgICBTVkdSZW5kZXJTdXBwb3J0
OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9jYWNoZWRMb2NhbFJl
cGFpbnRSZWN0KTsKIAogICAgIHJldHVybiBtX2NhY2hlZExvY2FsUmVwYWludFJlY3Q7CiB9CkBA
IC0xNjksMTcgKzE2OSwxNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjppbWFnZUNoYW5nZWQoV3Jh
cHBlCiAKIEludFJlY3QgUmVuZGVyU1ZHSW1hZ2U6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKQogewotICAgIHJldHVy
biBTVkdSZW5kZXJCYXNlOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCh0aGlzLCByZXBh
aW50Q29udGFpbmVyKTsKKyAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6Y2xpcHBlZE92ZXJm
bG93UmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWludENvbnRhaW5lcik7CiB9CiAKIHZvaWQgUmVu
ZGVyU1ZHSW1hZ2U6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCiB7Ci0g
ICAgU1ZHUmVuZGVyQmFzZTo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250
YWluZXIsIHJlcGFpbnRSZWN0LCBmaXhlZCk7CisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0
ZVJlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIsIHJlcGFpbnRSZWN0LCBmaXhl
ZCk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6Om1hcExvY2FsVG9Db250YWluZXIoUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgLCBib29sIHVzZVRy
YW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKIHsKLSAgICBT
VkdSZW5kZXJCYXNlOjptYXBMb2NhbFRvQ29udGFpbmVyKHRoaXMsIHJlcGFpbnRDb250YWluZXIs
IGZpeGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0ZSk7CisgICAgU1ZHUmVuZGVyU3Vw
cG9ydDo6bWFwTG9jYWxUb0NvbnRhaW5lcih0aGlzLCByZXBhaW50Q29udGFpbmVyLCBmaXhlZCwg
dXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOwogfQogCiB2b2lkIFJlbmRlclNWR0ltYWdl
OjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQsIGludCkKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaAkocmV2aXNpb24gNjIwOTkpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICsz
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU1ZHSW1hZ2VFbGVtZW50OwogCi1j
bGFzcyBSZW5kZXJTVkdJbWFnZSA6IHB1YmxpYyBSZW5kZXJJbWFnZQotICAgICAgICAgICAgICAg
ICAgICAgLCBwcm90ZWN0ZWQgU1ZHUmVuZGVyQmFzZSB7CitjbGFzcyBSZW5kZXJTVkdJbWFnZSA6
IHB1YmxpYyBSZW5kZXJJbWFnZSB7CiBwdWJsaWM6CiAgICAgUmVuZGVyU1ZHSW1hZ2UoU1ZHSW1h
Z2VFbGVtZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lLmNwcAko
cmV2aXNpb24gNjIwOTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIElubGluZUZsb3dCb3gqIFJlbmRlclNW
R0lubGluZTo6Y3JlYXRlSW4KIAogRmxvYXRSZWN0IFJlbmRlclNWR0lubGluZTo6b2JqZWN0Qm91
bmRpbmdCb3goKSBjb25zdAogewotICAgIGlmIChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCA9
IGZpbmRUZXh0Um9vdE9iamVjdCh0aGlzKSkKKyAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0KiBv
YmplY3QgPSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVGV4dFJvb3RPYmplY3QodGhpcykpCiAgICAg
ICAgIHJldHVybiBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CiAKICAgICByZXR1cm4gRmxv
YXRSZWN0KCk7CkBAIC01Miw3ICs1Miw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdJbmxpbmU6Om9i
amVjdEJvdW5kaW4KIAogRmxvYXRSZWN0IFJlbmRlclNWR0lubGluZTo6c3Ryb2tlQm91bmRpbmdC
b3goKSBjb25zdAogewotICAgIGlmIChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCA9IGZpbmRU
ZXh0Um9vdE9iamVjdCh0aGlzKSkKKyAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3Qg
PSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVGV4dFJvb3RPYmplY3QodGhpcykpCiAgICAgICAgIHJl
dHVybiBvYmplY3QtPnN0cm9rZUJvdW5kaW5nQm94KCk7CiAKICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CkBAIC02MCw3ICs2MCw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdJbmxpbmU6OnN0cm9rZUJv
dW5kaW4KIAogRmxvYXRSZWN0IFJlbmRlclNWR0lubGluZTo6cmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKSBjb25zdAogewotICAgIGlmIChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCA9
IGZpbmRUZXh0Um9vdE9iamVjdCh0aGlzKSkKKyAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0KiBv
YmplY3QgPSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVGV4dFJvb3RPYmplY3QodGhpcykpCiAgICAg
ICAgIHJldHVybiBvYmplY3QtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAKICAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7CkBAIC02OCwyMiArNjgsMjIgQEAgRmxvYXRSZWN0IFJlbmRl
clNWR0lubGluZTo6cmVwYWludFJlY3RJbgogCiBJbnRSZWN0IFJlbmRlclNWR0lubGluZTo6Y2xp
cHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIpCiB7Ci0gICAgcmV0dXJuIFNWR1JlbmRlckJhc2U6OmNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIpOworICAgIHJldHVybiBTVkdSZW5k
ZXJTdXBwb3J0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCh0aGlzLCByZXBhaW50Q29u
dGFpbmVyKTsKIH0KIAogdm9pZCBSZW5kZXJTVkdJbmxpbmU6OmNvbXB1dGVSZWN0Rm9yUmVwYWlu
dChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWlu
dFJlY3QsIGJvb2wgZml4ZWQpCiB7Ci0gICAgU1ZHUmVuZGVyQmFzZTo6Y29tcHV0ZVJlY3RGb3JS
ZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIsIHJlcGFpbnRSZWN0LCBmaXhlZCk7CisgICAg
U1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250
YWluZXIsIHJlcGFpbnRSZWN0LCBmaXhlZCk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHSW5saW5lOjpt
YXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
LCBib29sIHVzZVRyYW5zZm9ybXMsIGJvb2wgZml4ZWQsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zv
cm1TdGF0ZSkgY29uc3QKIHsKLSAgICBTVkdSZW5kZXJCYXNlOjptYXBMb2NhbFRvQ29udGFpbmVy
KHRoaXMsIHJlcGFpbnRDb250YWluZXIsIHVzZVRyYW5zZm9ybXMsIGZpeGVkLCB0cmFuc2Zvcm1T
dGF0ZSk7CisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6bWFwTG9jYWxUb0NvbnRhaW5lcih0aGlzLCBy
ZXBhaW50Q29udGFpbmVyLCB1c2VUcmFuc2Zvcm1zLCBmaXhlZCwgdHJhbnNmb3JtU3RhdGUpOwog
fQogCiB2b2lkIFJlbmRlclNWR0lubGluZTo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFk
PiYgcXVhZHMpCiB7Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBmaW5kVGV4dFJv
b3RPYmplY3QodGhpcyk7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBTVkdSZW5k
ZXJTdXBwb3J0OjpmaW5kVGV4dFJvb3RPYmplY3QodGhpcyk7CiAgICAgaWYgKCFvYmplY3QpCiAg
ICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lLmgJKHJl
dmlzaW9uIDYyMDk5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBSZW5kZXJTVkdJbmxpbmUgOiBwdWJsaWMgUmVuZGVySW5saW5lCi0gICAgICAgICAgICAg
ICAgICAgICAgLCBwcm90ZWN0ZWQgU1ZHUmVuZGVyQmFzZSB7CitjbGFzcyBSZW5kZXJTVkdJbmxp
bmUgOiBwdWJsaWMgUmVuZGVySW5saW5lIHsKIHB1YmxpYzoKICAgICBSZW5kZXJTVkdJbmxpbmUo
Tm9kZSopOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
Y3BwCShyZXZpc2lvbiA2MjA5OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR01vZGVs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsNyBAQAogI2lmIEVOQUJMRShT
VkcpCiAjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKIAotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5
bGVkRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NywyMSArNDUsMjEgQEAg
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OlJlbmRlclNWR01vZGVsT2JqZQogCiBJbnRSZWN0IFJlbmRl
clNWR01vZGVsT2JqZWN0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikKIHsKLSAgICByZXR1cm4gU1ZHUmVuZGVyQmFz
ZTo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWludENvbnRhaW5lcik7
CisgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIpOwogfQogCiB2b2lkIFJlbmRlclNWR01vZGVsT2Jq
ZWN0Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIsIEludFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKQogewotICAgIFNWR1Jl
bmRlckJhc2U6OmNvbXB1dGVSZWN0Rm9yUmVwYWludCh0aGlzLCByZXBhaW50Q29udGFpbmVyLCBy
ZXBhaW50UmVjdCwgZml4ZWQpOworICAgIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVSZWN0Rm9y
UmVwYWludCh0aGlzLCByZXBhaW50Q29udGFpbmVyLCByZXBhaW50UmVjdCwgZml4ZWQpOwogfQog
CiB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkICwgYm9vbCB1c2VUcmFu
c2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0CiB7Ci0gICAgU1ZH
UmVuZGVyQmFzZTo6bWFwTG9jYWxUb0NvbnRhaW5lcih0aGlzLCByZXBhaW50Q29udGFpbmVyLCBm
aXhlZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOworICAgIFNWR1JlbmRlclN1cHBv
cnQ6Om1hcExvY2FsVG9Db250YWluZXIodGhpcywgcmVwYWludENvbnRhaW5lciwgZml4ZWQsIHVz
ZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsKIH0KIAogLy8gQ29waWVkIGZyb20gUmVuZGVy
Qm94LCB0aGlzIG1ldGhvZCBsaWtlbHkgcmVxdWlyZXMgZnVydGhlciByZWZhY3RvcmluZyB0byB3
b3JrIGVhc2lseSBmb3IgYm90aCBTVkcgYW5kIENTUyBCb3ggTW9kZWwgY29udGVudC4KLS8vIEZJ
WE1FOiBUaGlzIG1heSBhbHNvIG5lZWQgdG8gbW92ZSBpbnRvIFNWR1JlbmRlckJhc2UgYXMgdGhl
IFJlbmRlckJveCB2ZXJzaW9uIGRlcGVuZHMKKy8vIEZJWE1FOiBUaGlzIG1heSBhbHNvIG5lZWQg
dG8gbW92ZSBpbnRvIFNWR1JlbmRlclN1cHBvcnQgYXMgdGhlIFJlbmRlckJveCB2ZXJzaW9uIGRl
cGVuZHMKIC8vIG9uIGJvcmRlckJvdW5kaW5nQm94KCkgd2hpY2ggU1ZHIFJlbmRlckJveCBzdWJj
bGFzZXMgKGxpa2UgU1ZHUmVuZGVyQmxvY2spIGRvIG5vdCBpbXBsZW1lbnQuCiBJbnRSZWN0IFJl
bmRlclNWR01vZGVsT2JqZWN0OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UG9pbnQqKSBjb25zdAogewpAQCAtODUsNyAr
ODMsNyBAQCB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVF1YWRzCiAKIHZvaWQg
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmRlc3Ryb3koKQogewotICAgIGRlcmVnaXN0ZXJGcm9tUmVz
b3VyY2VzKHRoaXMpOworICAgIFJlbmRlclNWR1Jlc291cmNlOjppbnZhbGlkYXRlQWxsUmVzb3Vy
Y2VzT2ZSZW5kZXJlcih0aGlzKTsKICAgICBSZW5kZXJPYmplY3Q6OmRlc3Ryb3koKTsKIH0KIApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCShyZXZpc2lvbiA2
MjA5OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDExICs0MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBNb3N0
IHJlbmRlcmVycyBpbiB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlIHdpbGwgaW5oZXJpdCBmcm9tIHRo
aXMgY2xhc3MKIC8vIGJ1dCBub3QgYWxsLiAoZS5nLiBSZW5kZXJTVkdGb3JlaWduT2JqZWN0LCBS
ZW5kZXJTVkdCbG9jaywgUmVuZGVyU1ZHSW1hZ2UpIHRodXMgbWV0aG9kcwogLy8gcmVxdWlyZWQg
YnkgU1ZHIHJlbmRlcnMgbmVlZCB0byBiZSBkZWNsYXJlZCBvbiBSZW5kZXJPYmplY3QsIGJ1dCBz
aGFyZWQKLS8vIGxvZ2ljIGNhbiBnbyBpbiB0aGlzIGNsYXNzIG9yIGluIFNWR1JlbmRlckJhc2Uu
CisvLyBsb2dpYyBjYW4gZ28gaW4gdGhpcyBjbGFzcyBvciBpbiBTVkdSZW5kZXJTdXBwb3J0Lgog
CiBjbGFzcyBTVkdTdHlsZWRFbGVtZW50OwogCi1jbGFzcyBSZW5kZXJTVkdNb2RlbE9iamVjdCA6
IHB1YmxpYyBSZW5kZXJPYmplY3QsIHByb3RlY3RlZCBTVkdSZW5kZXJCYXNlIHsKK2NsYXNzIFJl
bmRlclNWR01vZGVsT2JqZWN0IDogcHVibGljIFJlbmRlck9iamVjdCB7CiBwdWJsaWM6CiAgICAg
UmVuZGVyU1ZHTW9kZWxPYmplY3QoU1ZHU3R5bGVkRWxlbWVudCopOwogCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA2MjA5OSkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsMTEgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
LmgiCiAKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvci5oIgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogCkBAIC0xOTcsNiAr
MjAxLDU5IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmQKICAgICBz
dGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmludmFsaWRhdGVSZXNvdXJj
ZXNJbkFuY2VzdG9yQ2hhaW4oKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVQ
YWludGluZ1Jlc291cmNlKFNWR1BhaW50KiBwYWludCwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7
CisgICAgQVNTRVJUKHBhaW50KTsKKworICAgIFNWR1BhaW50OjpTVkdQYWludFR5cGUgcGFpbnRU
eXBlID0gcGFpbnQtPnBhaW50VHlwZSgpOworICAgIGlmIChwYWludFR5cGUgIT0gU1ZHUGFpbnQ6
OlNWR19QQUlOVFRZUEVfVVJJICYmIHBhaW50VHlwZSAhPSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQ
RV9VUklfUkdCQ09MT1IpCisgICAgICAgIHJldHVybjsKKworICAgIEF0b21pY1N0cmluZyBpZChT
VkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChwYWludC0+dXJpKCkpKTsKKyAgICBpZiAoUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIqIHBhaW50aW5nUmVzb3VyY2UgPSBnZXRSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lckJ5SWQob2JqZWN0LT5kb2N1bWVudCgpLCBpZCkpCisgICAgICAgIHBhaW50
aW5nUmVzb3VyY2UtPmludmFsaWRhdGVDbGllbnQob2JqZWN0KTsKK30KKwordm9pZCBSZW5kZXJT
VkdSZXNvdXJjZTo6aW52YWxpZGF0ZUFsbFJlc291cmNlc09mUmVuZGVyZXIoUmVuZGVyT2JqZWN0
KiBvYmplY3QpCit7CisgICAgQVNTRVJUKG9iamVjdCk7CisgICAgQVNTRVJUKG9iamVjdC0+c3R5
bGUoKSk7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBvYmplY3QtPmRvY3VtZW50KCk7Cisg
ICAgQVNTRVJUKGRvY3VtZW50KTsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHls
ZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3ZnU3R5bGUpOwor
CisgICAgLy8gTWFza2VyCisgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIg
PSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI+KGRvY3Vt
ZW50LCBzdmdTdHlsZS0+bWFza2VyUmVzb3VyY2UoKSkpCisgICAgICAgIG1hc2tlci0+aW52YWxp
ZGF0ZUNsaWVudChvYmplY3QpOworCisgICAgLy8gQ2xpcHBlcgorICAgIGlmIChSZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyPihkb2N1bWVudCwgc3ZnU3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgp
KSkKKyAgICAgICAgY2xpcHBlci0+aW52YWxpZGF0ZUNsaWVudChvYmplY3QpOworCisgICAgLy8g
RmlsdGVyCisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlRmls
dGVyKiBmaWx0ZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI+KGRvY3VtZW50LCBzdmdTdHlsZS0+ZmlsdGVyUmVzb3VyY2UoKSkpCisgICAgICAgIGZp
bHRlci0+aW52YWxpZGF0ZUNsaWVudChvYmplY3QpOworI2VuZGlmCisKKyAgICAvLyBNYXJrZXJz
CisgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBzdGFydE1hcmtlciA9IGdldFJlbmRl
clNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcj4oZG9jdW1lbnQsIHN2Z1N0
eWxlLT5tYXJrZXJTdGFydFJlc291cmNlKCkpKQorICAgICAgICBzdGFydE1hcmtlci0+aW52YWxp
ZGF0ZUNsaWVudChvYmplY3QpOworICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWlk
TWFya2VyID0gZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlTWFya2Vy
Pihkb2N1bWVudCwgc3ZnU3R5bGUtPm1hcmtlck1pZFJlc291cmNlKCkpKQorICAgICAgICBtaWRN
YXJrZXItPmludmFsaWRhdGVDbGllbnQob2JqZWN0KTsKKyAgICBpZiAoUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXIqIGVuZE1hcmtlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlcj4oZG9jdW1lbnQsIHN2Z1N0eWxlLT5tYXJrZXJFbmRSZXNvdXJjZSgpKSkK
KyAgICAgICAgZW5kTWFya2VyLT5pbnZhbGlkYXRlQ2xpZW50KG9iamVjdCk7CisKKyAgICAvLyBH
cmFkaWVudHMvUGF0dGVybnMKKyAgICBpZiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSkKKyAgICAgICAg
aW52YWxpZGF0ZVBhaW50aW5nUmVzb3VyY2Uoc3ZnU3R5bGUtPmZpbGxQYWludCgpLCBvYmplY3Qp
OworICAgIGlmIChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkpCisgICAgICAgIGludmFsaWRhdGVQYWlu
dGluZ1Jlc291cmNlKHN2Z1N0eWxlLT5zdHJva2VQYWludCgpLCBvYmplY3QpOworfQorCiB9CiAK
ICNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oCShyZXZpc2lv
biA2MjA5OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc5LDYgKzc5LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBSZW5kZXJTVkdS
ZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25z
dCBSZW5kZXJTdHlsZSopOwogICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iq
IHNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwogCisgICAgc3RhdGljIHZvaWQgaW52YWxp
ZGF0ZUFsbFJlc291cmNlc09mUmVuZGVyZXIoUmVuZGVyT2JqZWN0Kik7CisKIHByaXZhdGU6CiAg
ICAgc3RhdGljIHZvaWQgYWRqdXN0Q29sb3JGb3JQc2V1ZG9SdWxlcyhjb25zdCBSZW5kZXJTdHls
ZSosIGJvb2wgdXNlRmlsbFBhaW50LCBDb2xvciYpOwogICAgIApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCShyZXZpc2lvbiA2MjA5OSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0Miw3ICsyNDIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
cjo6Y3JlYXRlQ2xpCiAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgPHVzZT4gZWxlbWVudCwg
d2Ugb2J0YWluZWQgaXRzIHJlbmRlcmVyZSBhYm92ZSwgdG8gcmV0cmlldmUgaXRzIGNsaXBSdWxl
LgogICAgICAgICAvLyBXZSBoc3ZlIHRvIHBhc3MgdGhlIDx1c2U+IHJlbmRlcmVyIGl0c2VsZiB0
byByZW5kZXJTdWJ0cmVlVG9JbWFnZSgpIHRvIGFwcGx5IGl0J3MgeC95L3RyYW5zZm9ybS9ldGMu
IHZhbHVlcyB3aGVuIHJlbmRlcmluZy4KICAgICAgICAgLy8gU28gaWYgaXNVc2VFbGVtZW50IGlz
IHRydWUsIHJlZmV0Y2ggdGhlIGNoaWxkTm9kZS0+cmVuZGVyZXIoKSwgYXMgcmVuZGVyZXIgZ290
IG92ZXJyaWRlbiBhYm92ZS4KLSAgICAgICAgcmVuZGVyU3VidHJlZVRvSW1hZ2UoY2xpcHBlckRh
dGEtPmNsaXBNYXNrSW1hZ2UuZ2V0KCksIGlzVXNlRWxlbWVudCA/IGNoaWxkTm9kZS0+cmVuZGVy
ZXIoKSA6IHJlbmRlcmVyKTsKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6cmVuZGVyU3VidHJl
ZVRvSW1hZ2UoY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UuZ2V0KCksIGlzVXNlRWxlbWVudCA/
IGNoaWxkTm9kZS0+cmVuZGVyZXIoKSA6IHJlbmRlcmVyKTsKIAogICAgICAgICByZW5kZXJlci0+
c2V0U3R5bGUob2xkUmVuZGVyU3R5bGUucmVsZWFzZSgpKTsKICAgICB9CkBAIC0yNzEsNyArMjcx
LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmNhbGN1bGF0ZQogYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29udGVudChjb25zdCBGbG9hdFJlY3Qm
IG9iamVjdEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFBvaW50JiBub2RlQXRQb2ludCkKIHsKICAg
ICBGbG9hdFBvaW50IHBvaW50ID0gbm9kZUF0UG9pbnQ7Ci0gICAgaWYgKCFwb2ludEluQ2xpcHBp
bmdBcmVhKHRoaXMsIHBvaW50KSkKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5D
bGlwcGluZ0FyZWEodGhpcywgcG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAoc3RhdGljX2Nhc3Q8U1ZHQ2xpcFBhdGhFbGVtZW50Kj4obm9kZSgpKS0+Y2xpcFBhdGhVbml0
cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5j
cHAJKHJldmlzaW9uIDYyMDk5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIGlu
bGluZSBib29sIGNyZWF0ZU1hc2tBbmRTd2FwQ29udAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+JiBp
bWFnZUJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgY29uc3Qg
UmVuZGVyT2JqZWN0KiB0ZXh0Um9vdEJsb2NrID0gZmluZFRleHRSb290T2JqZWN0KG9iamVjdCk7
CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiB0ZXh0Um9vdEJsb2NrID0gU1ZHUmVuZGVyU3VwcG9y
dDo6ZmluZFRleHRSb290T2JqZWN0KG9iamVjdCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtID0gYWJzb2x1dGVUcmFuc2Zvcm1Gb3JSZW5kZXJlcih0ZXh0Um9vdEJsb2NrKTsKICAg
ICBGbG9hdFJlY3QgbWFza0Fic29sdXRlQm91bmRpbmdCb3ggPSB0cmFuc2Zvcm0ubWFwUmVjdCh0
ZXh0Um9vdEJsb2NrLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKQEAgLTEyMyw3
ICsxMjMsNyBAQCBzdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSBjbGlwVG9UZXh0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdyYWRpZW50RGF0YSogZ3JhZGllbnREYXRhKQogewotICAgIGNvbnN0IFJlbmRlck9iamVjdCog
dGV4dFJvb3RCbG9jayA9IGZpbmRUZXh0Um9vdE9iamVjdChvYmplY3QpOworICAgIGNvbnN0IFJl
bmRlck9iamVjdCogdGV4dFJvb3RCbG9jayA9IFNWR1JlbmRlclN1cHBvcnQ6OmZpbmRUZXh0Um9v
dE9iamVjdChvYmplY3QpOwogICAgIGNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKHRleHRSb290
QmxvY2stPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCksIGltYWdlQnVmZmVyLmdldCgp
KTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7CkBAIC0yMTEsNyArMjExLDcgQEAgYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlcwogICAgICAgICAgICAgZ3JhZGll
bnREYXRhLT5ncmFkaWVudC0+c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybSh0cmFuc2Zvcm1Pbk5v
blNjYWxpbmdTdHJva2Uob2JqZWN0LCBncmFkaWVudERhdGEtPnVzZXJzcGFjZVRyYW5zZm9ybSkp
OwogICAgICAgICBjb250ZXh0LT5zZXRBbHBoYShzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpKTsK
ICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoZ3JhZGllbnREYXRhLT5ncmFkaWVu
dCk7Ci0gICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9i
amVjdCk7CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRl
eHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBA
IC0yMzUsNyArMjM1LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBw
bAogICAgICAgICAgICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudC0+c2V0R3JhZGllbnRTcGFjZVRy
YW5zZm9ybShjbGlwVG9UZXh0TWFzayhjb250ZXh0LCBtX2ltYWdlQnVmZmVyLCBvYmplY3QsIGdy
YWRpZW50RGF0YSkpOwogICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbEdyYWRpZW50KGdyYWRp
ZW50RGF0YS0+Z3JhZGllbnQpOwogCi0gICAgICAgICAgICBjb25zdCBSZW5kZXJPYmplY3QqIHRl
eHRSb290QmxvY2sgPSBmaW5kVGV4dFJvb3RPYmplY3Qob2JqZWN0KTsKKyAgICAgICAgICAgIGNv
bnN0IFJlbmRlck9iamVjdCogdGV4dFJvb3RCbG9jayA9IFNWR1JlbmRlclN1cHBvcnQ6OmZpbmRU
ZXh0Um9vdE9iamVjdChvYmplY3QpOwogICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QodGV4
dFJvb3RCbG9jay0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CiAKICAgICAgICAg
ICAgIG1faW1hZ2VCdWZmZXIuY2xlYXIoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAJKHJldmlzaW9uIDYyMTA0KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
OCw3ICs4OCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmludmFsaWRhdGUKIAog
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6YXBwbHlWaWV3cG9ydENsaXAoUGFpbnRJbmZv
JiBwYWludEluZm8pCiB7Ci0gICAgaWYgKFNWR1JlbmRlckJhc2U6OmlzT3ZlcmZsb3dIaWRkZW4o
dGhpcykpCisgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4odGhpcykp
CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKG1fdmlld3BvcnQpOwogfQogCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCShyZXZp
c2lvbiA2MjA5OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFza2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXI6OmNyZWF0ZU1hc2sKICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVu
ZGVyZXItPnN0eWxlKCk7CiAgICAgICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9
PSBOT05FIHx8IHN0eWxlLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICByZW5kZXJTdWJ0cmVlVG9JbWFnZShtYXNrZXJEYXRhLT5tYXNrSW1h
Z2UuZ2V0KCksIHJlbmRlcmVyKTsKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6cmVuZGVyU3Vi
dHJlZVRvSW1hZ2UobWFza2VyRGF0YS0+bWFza0ltYWdlLmdldCgpLCByZW5kZXJlcik7CiAgICAg
fQogCiAgICAgbWFza0ltYWdlQ29udGV4dC0+cmVzdG9yZSgpOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShyZXZpc2lvbiA2MjA5OSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm4uaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIlBhdHRlcm5BdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVu
ZGVyU3VwcG9ydC5oIgogCkBAIC0xMjAsNyArMTIxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm46OmFwcGx5UmVzbwogICAgICAgICAgICAgcGF0dGVybkRhdGEtPnBhdHRlcm4tPnNl
dFBhdHRlcm5TcGFjZVRyYW5zZm9ybSh0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2Uob2JqZWN0
LCBwYXR0ZXJuRGF0YS0+dHJhbnNmb3JtKSk7CiAgICAgICAgIGNvbnRleHQtPnNldEFscGhhKHN2
Z1N0eWxlLT5zdHJva2VPcGFjaXR5KCkpOwogICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VQYXR0
ZXJuKHBhdHRlcm5EYXRhLT5wYXR0ZXJuKTsKLSAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29u
dGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6
YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKICAgICB9
CiAKICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSB7CkBAIC0yMDgsNiAr
MjA5LDIyIEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmNhbGMKICAgICBy
ZXR1cm4gcGF0dGVybkJvdW5kYXJpZXNJbmNsdWRpbmdPdmVyZmxvdzsKIH0KIAorLy8gRklYTUU6
IFRoaXMgbWV0aG9kIHNob3VsZCBiZSByZW1vdmVkLiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm5z
IHVzYWdlIG9mIGl0IGlzIGp1c3Qgd3JvbmcuCitzdGF0aWMgaW5saW5lIHZvaWQgY2xhbXBJbWFn
ZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KEZyYW1lVmlldyogZnJhbWVWaWV3LCBJbnRTaXplJiBzaXpl
KQoreworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgdmll
d1dpZHRoID0gZnJhbWVWaWV3LT52aXNpYmxlV2lkdGgoKTsKKyAgICBpbnQgdmlld0hlaWdodCA9
IGZyYW1lVmlldy0+dmlzaWJsZUhlaWdodCgpOworCisgICAgaWYgKHNpemUud2lkdGgoKSA+IHZp
ZXdXaWR0aCkKKyAgICAgICAgc2l6ZS5zZXRXaWR0aCh2aWV3V2lkdGgpOworCisgICAgaWYgKHNp
emUuaGVpZ2h0KCkgPiB2aWV3SGVpZ2h0KQorICAgICAgICBzaXplLnNldEhlaWdodCh2aWV3SGVp
Z2h0KTsKK30KKwogUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuOjpjcmVhdGVUaWxlSW1hZ2UoUGF0dGVybkRhdGEqIHBhdHRlcm5EYXRhLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqIHBhdHRlcm5FbGVtZW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
T2JqZWN0KiBvYmplY3QpIGNvbnN0CkBAIC0yNjgsNyArMjg1LDcgQEAgUGFzc093blB0cjxJbWFn
ZUJ1ZmZlcj4gUmVuZGVyU1ZHUmVzb3VyYwogICAgIGZvciAoTm9kZSogbm9kZSA9IGF0dHJpYnV0
ZXMucGF0dGVybkNvbnRlbnRFbGVtZW50KCktPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5v
ZGUtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFub2RlLT5pc1NWR0VsZW1lbnQoKSB8
fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpLT5pc1N0eWxlZCgpIHx8ICFub2RlLT5y
ZW5kZXJlcigpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJlbmRlclN1YnRyZWVU
b0ltYWdlKHRpbGVJbWFnZS5nZXQoKSwgbm9kZS0+cmVuZGVyZXIoKSk7CisgICAgICAgIFNWR1Jl
bmRlclN1cHBvcnQ6OnJlbmRlclN1YnRyZWVUb0ltYWdlKHRpbGVJbWFnZS5nZXQoKSwgbm9kZS0+
cmVuZGVyZXIoKSk7CiAgICAgfQogCiAgICAgcGF0dGVybkRhdGEtPmJvdW5kYXJpZXMgPSBwYXR0
ZXJuQm91bmRhcmllczsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yLmNwcAkocmV2aXNpb24gNjIwOTkpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCiAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKIAogI2lmIFBMQVRGT1JNKFNLSUEpCkBAIC02
NSw3ICs2Niw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjphcHBseVIKICAg
ICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobV9jb2xvciwgY29sb3JTcGFjZSk7CiAKICAg
ICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChj
b250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKKyAgICAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFw
cGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7CiAKICAgICAg
ICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkKICAgICAgICAgICAgIGNvbnRl
eHQtPnNldFRleHREcmF3aW5nTW9kZShjVGV4dFN0cm9rZSk7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24gNjIxMDQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQg
UmVuZGVyU1ZHUm9vdDo6bGF5b3V0KCkKICAgICAvLyBSZW5kZXJTVkdSb290IG5lZWRzIHRvIHRh
a2Ugc3BlY2lhbCBjYXJlIHRvIHByb3BhZ2F0ZSB3aW5kb3cgc2l6ZSBjaGFuZ2VzIHRvIHRoZSBj
aGlsZHJlbiwKICAgICAvLyBpZiB0aGUgb3V0ZXJtb3N0IDxzdmc+IGlzIHVzaW5nIHJlbGF0aXZl
IHgveS93aWR0aC9oZWlnaHQgdmFsdWVzLiBIZW5jZSB0aGUgYWRkaXRvbmFsIHBhcmFtZXRlcnMu
CiAgICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5v
ZGUoKSk7Ci0gICAgbGF5b3V0Q2hpbGRyZW4odGhpcywgbmVlZHNMYXlvdXQgfHwgKHN2Zy0+aGFz
UmVsYXRpdmVWYWx1ZXMoKSAmJiBvbGRTaXplICE9IHNpemUoKSkpOworICAgIFNWR1JlbmRlclN1
cHBvcnQ6OmxheW91dENoaWxkcmVuKHRoaXMsIG5lZWRzTGF5b3V0IHx8IChzdmctPmhhc1JlbGF0
aXZlVmFsdWVzKCkgJiYgb2xkU2l6ZSAhPSBzaXplKCkpKTsKICAgICByZXBhaW50ZXIucmVwYWlu
dEFmdGVyTGF5b3V0KCk7CiAKICAgICB2aWV3KCktPmVuYWJsZUxheW91dFN0YXRlKCk7CkBAIC0x
NzUsMTMgKzE3NSwxMyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnBhaW50KFBhaW50SW5mbyYgcGFp
CiAKICAgICBib29sIGNvbnRpbnVlUmVuZGVyaW5nID0gdHJ1ZTsKICAgICBpZiAoY2hpbGRQYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCi0gICAgICAgIGNvbnRpbnVlUmVu
ZGVyaW5nID0gcHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbywg
Ym91bmRpbmdCb3gsIGZpbHRlcik7CisgICAgICAgIGNvbnRpbnVlUmVuZGVyaW5nID0gU1ZHUmVu
ZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5m
bywgYm91bmRpbmdCb3gsIGZpbHRlcik7CiAKICAgICBpZiAoY29udGludWVSZW5kZXJpbmcpCiAg
ICAgICAgIFJlbmRlckJveDo6cGFpbnQoY2hpbGRQYWludEluZm8sIDAsIDApOwogCiAgICAgaWYg
KGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQotICAgICAgICBm
aW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBmaWx0ZXIsIHBhaW50
SW5mby5jb250ZXh0KTsKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZH
Q29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbywgZmlsdGVyLCBwYWludEluZm8uY29udGV4dCk7
CiAKICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAKQEAgLTE5MSw3ICsx
OTEsNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAKIHZvaWQg
UmVuZGVyU1ZHUm9vdDo6ZGVzdHJveSgpCiB7Ci0gICAgZGVyZWdpc3RlckZyb21SZXNvdXJjZXMo
dGhpcyk7CisgICAgUmVuZGVyU1ZHUmVzb3VyY2U6OmludmFsaWRhdGVBbGxSZXNvdXJjZXNPZlJl
bmRlcmVyKHRoaXMpOwogICAgIFJlbmRlckJveDo6ZGVzdHJveSgpOwogfQogCkBAIC0yNTcsMjQg
KzI1NywxNCBAQCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlbmRlclNWR1Jvb3Q6OmxvCiAgICAg
cmV0dXJuIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKIH0KIAotRmxvYXRSZWN0IFJlbmRlclNW
R1Jvb3Q6Om9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcHV0ZUNv
bnRhaW5lckJvdW5kaW5nQm94KHRoaXMsIGZhbHNlKTsKLX0KLQogRmxvYXRSZWN0IFJlbmRlclNW
R1Jvb3Q6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QKIHsKICAgICAvLyBG
SVhNRTogVGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBib3JkZXIgYnV0IGl0IHNob3VsZCEKLSAg
ICBGbG9hdFJlY3QgcmVwYWludFJlY3QgPSBjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3godGhp
cywgdHJ1ZSk7CisgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gc3Ryb2tlQm91bmRpbmdCb3go
KTsKICAgICBzdHlsZSgpLT5zdmdTdHlsZSgpLT5pbmZsYXRlRm9yU2hhZG93KHJlcGFpbnRSZWN0
KTsKICAgICByZXR1cm4gcmVwYWludFJlY3Q7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBSZW5kZXJT
VkdSb290Ojpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEFmZmluZVRyYW5z
Zm9ybSgpOwotfQotCiB2b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJl
Y3QsIGJvb2wgZml4ZWQpCiB7CiAgICAgLy8gQXBwbHkgb3VyIGxvY2FsIHRyYW5zZm9ybXMgKGV4
Y2VwdCBmb3IgeC95IHRyYW5zbGF0aW9uKSwgdGhlbiBvdXIgc2hhZG93LCAKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSb290LmgJKHJldmlzaW9uIDYyMDk5KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNWR1N0eWxlZEVsZW1lbnQ7CiBjbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CiAKLWNsYXNzIFJlbmRlclNWR1Jvb3QgOiBwdWJsaWMgUmVuZGVyQm94LCBwcm90ZWN0
ZWQgU1ZHUmVuZGVyQmFzZSB7CitjbGFzcyBSZW5kZXJTVkdSb290IDogcHVibGljIFJlbmRlckJv
eCB7CiBwdWJsaWM6CiAgICAgUmVuZGVyU1ZHUm9vdChTVkdTdHlsZWRFbGVtZW50Kik7CiAKQEAg
LTYyLDEzICs2MiwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdDsKICAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7
IHJldHVybiBjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3godGhpcywgdHJ1ZSk7IH0KKyAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Jl
bmRlclN1cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveCh0aGlzLCBmYWxzZSk7IH0K
KyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJu
IFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveCh0aGlzLCB0cnVl
KTsgfQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCkgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBvdmVycmlkZSBzaG91bGQgYmUgcmVtb3Zl
ZC4KLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0Owot
CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24p
OwogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4
ZWQpOwpAQCAtMTA4LDUgKzEwNSwzIEBAIHZvaWQgdG9SZW5kZXJTVkdSb290KGNvbnN0IFJlbmRl
clNWR1Jvb3QKIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCiAjZW5kaWYgLy8gUmVuZGVyU1ZHUm9v
dF9oCi0KLS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQu
Y3BwCShyZXZpc2lvbiA2MjEwNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJl
cXVlc3QuaCIKICNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKICNpbmNsdWRlICJT
VkdSZW5kZXJTdXBwb3J0LmgiCkBAIC01NiwxNyArNTcsMTcgQEAgUmVuZGVyU1ZHVGV4dDo6UmVu
ZGVyU1ZHVGV4dChTVkdUZXh0RWxlbQogCiBJbnRSZWN0IFJlbmRlclNWR1RleHQ6OmNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyKQogewotICAgIHJldHVybiBTVkdSZW5kZXJCYXNlOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9y
UmVwYWludCh0aGlzLCByZXBhaW50Q29udGFpbmVyKTsKKyAgICByZXR1cm4gU1ZHUmVuZGVyU3Vw
cG9ydDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWludENvbnRhaW5l
cik7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiByZXBhaW50UmVjdCwg
Ym9vbCBmaXhlZCkKIHsKLSAgICBTVkdSZW5kZXJCYXNlOjpjb21wdXRlUmVjdEZvclJlcGFpbnQo
dGhpcywgcmVwYWludENvbnRhaW5lciwgcmVwYWludFJlY3QsIGZpeGVkKTsKKyAgICBTVkdSZW5k
ZXJTdXBwb3J0Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWludENvbnRhaW5lciwg
cmVwYWludFJlY3QsIGZpeGVkKTsKIH0KIAogdm9pZCBSZW5kZXJTVkdUZXh0OjptYXBMb2NhbFRv
Q29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZp
eGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkg
Y29uc3QKIHsKLSAgICBTVkdSZW5kZXJCYXNlOjptYXBMb2NhbFRvQ29udGFpbmVyKHRoaXMsIHJl
cGFpbnRDb250YWluZXIsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0ZSk7Cisg
ICAgU1ZHUmVuZGVyU3VwcG9ydDo6bWFwTG9jYWxUb0NvbnRhaW5lcih0aGlzLCByZXBhaW50Q29u
dGFpbmVyLCBmaXhlZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOwogfQogCiB2b2lk
IFJlbmRlclNWR1RleHQ6OmxheW91dCgpCkBAIC0xMTcsNyArMTE4LDcgQEAgYm9vbCBSZW5kZXJT
VkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KGNvbgogICAgICAgICAgICAgfHwgKGhpdFJ1bGVzLmNh
bkhpdEZpbGwgJiYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMu
cmVxdWlyZUZpbGwpKSkgewogICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbG9j
YWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsK
IAotICAgICAgICAgICAgaWYgKCFwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQp
KQorICAgICAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVh
KHRoaXMsIGxvY2FsUG9pbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAg
CiAKICAgICAgICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwg
cmVzdWx0LCAoaW50KWxvY2FsUG9pbnQueCgpLCAoaW50KWxvY2FsUG9pbnQueSgpLCAwLCAwLCBo
aXRUZXN0QWN0aW9uKTsKQEAgLTEyOSw3ICsxMzAsNyBAQCBib29sIFJlbmRlclNWR1RleHQ6Om5v
ZGVBdEZsb2F0UG9pbnQoY29uCiAKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6ZGVzdHJveSgpCiB7Ci0g
ICAgZGVyZWdpc3RlckZyb21SZXNvdXJjZXModGhpcyk7CisgICAgUmVuZGVyU1ZHUmVzb3VyY2U6
OmludmFsaWRhdGVBbGxSZXNvdXJjZXNPZlJlbmRlcmVyKHRoaXMpOwogICAgIFJlbmRlclNWR0Js
b2NrOjpkZXN0cm95KCk7CiB9CiAKQEAgLTE3NCw3ICsxNzUsNyBAQCBGbG9hdFJlY3QgUmVuZGVy
U1ZHVGV4dDo6c3Ryb2tlQm91bmRpbmdCCiBGbG9hdFJlY3QgUmVuZGVyU1ZHVGV4dDo6cmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdAogewogICAgIEZsb2F0UmVjdCByZXBhaW50
UmVjdCA9IHN0cm9rZUJvdW5kaW5nQm94KCk7Ci0gICAgaW50ZXJzZWN0UmVwYWludFJlY3RXaXRo
UmVzb3VyY2VzKHRoaXMsIHJlcGFpbnRSZWN0KTsKKyAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRl
cnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgcmVwYWludFJlY3QpOwogCiAgICAg
cmV0dXJuIHJlcGFpbnRSZWN0OwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
Vmlld3BvcnRDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAkocmV2aXNpb24gNjIwOTkpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDcgKzM5LDcgQEAgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OlJlbmRlclNWR1Zp
ZQogCiB2b2lkIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjphcHBseVZpZXdwb3J0Q2xpcChQ
YWludEluZm8mIHBhaW50SW5mbykKIHsKLSAgICBpZiAoU1ZHUmVuZGVyQmFzZTo6aXNPdmVyZmxv
d0hpZGRlbih0aGlzKSkKKyAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRl
bih0aGlzKSkKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAobV92aWV3cG9ydCk7CiB9
CiAKQEAgLTgyLDcgKzgyLDcgQEAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZW5kZXJTVkdWaWV3
cG9ydAogYm9vbCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6cG9pbnRJc0luc2lkZVZpZXdw
b3J0Q2xpcChjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50KQogewogICAgIC8vIFJlc3Bl
Y3QgdGhlIHZpZXdwb3J0IGNsaXAgKHdoaWNoIGlzIGluIHBhcmVudCBjb29yZHMpCi0gICAgaWYg
KCFTVkdSZW5kZXJCYXNlOjppc092ZXJmbG93SGlkZGVuKHRoaXMpKQorICAgIGlmICghU1ZHUmVu
ZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlzKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgCiAgICAgcmV0dXJuIG1fdmlld3BvcnQuY29udGFpbnMocG9pbnRJblBhcmVudCk7Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gNjIxMDQp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQsMTIgKzQ0LDEyIEBAIHZvaWQgU1ZHSW5saW5lRmxvd0JveDo6cGFpbnQoUGFpbnRJ
bmZvJiAKICAgICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0gMDsKICAgICBGbG9h
dFJlY3QgcmVwYWludFJlY3QgPSBib3hSZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKTsKIAotICAgIGlmIChTVkdSZW5kZXJCYXNlOjpwcmVwYXJlVG9SZW5kZXJTVkdDb250
ZW50KGJveFJlbmRlcmVyLCBjaGlsZFBhaW50SW5mbywgcmVwYWludFJlY3QsIGZpbHRlcikpIHsK
KyAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChib3hS
ZW5kZXJlciwgY2hpbGRQYWludEluZm8sIHJlcGFpbnRSZWN0LCBmaWx0ZXIpKSB7CiAgICAgICAg
IGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRPbkxpbmUoKSkKICAgICAgICAgICAgIGNoaWxkLT5wYWludChjaGlsZFBhaW50SW5m
bywgMCwgMCk7CiAgICAgfQogCi0gICAgU1ZHUmVuZGVyQmFzZTo6ZmluaXNoUmVuZGVyU1ZHQ29u
dGVudChib3hSZW5kZXJlciwgY2hpbGRQYWludEluZm8sIGZpbHRlciwgcGFpbnRJbmZvLmNvbnRl
eHQpOworICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQoYm94UmVu
ZGVyZXIsIGNoaWxkUGFpbnRJbmZvLCBmaWx0ZXIsIHBhaW50SW5mby5jb250ZXh0KTsKICAgICBj
aGlsZFBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwCShyZXZpc2lvbiA2MjEwNCkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwzMSArMjgs
MjMgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKIAot
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJO
b2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgotI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2Vy
LmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0
ZS5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVNWR1JlbmRlckJhc2U6On5TVkdSZW5kZXJCYXNlKCkKLXsKLX0KLQotSW50UmVjdCBTVkdS
ZW5kZXJCYXNlOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJPYmplY3QqIG9i
amVjdCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpCitJbnRSZWN0IFNW
R1JlbmRlclN1cHBvcnQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlck9iamVj
dCogb2JqZWN0LCBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikKIHsKICAg
ICAvLyBSZXR1cm4gZWFybHkgZm9yIGFueSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBhY3R1YWxseSBw
YWludAogICAgIGlmIChvYmplY3QtPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFICYm
ICFvYmplY3QtPmVuY2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkpCkBAIC02NSw3
ICs1Nyw3IEBAIEludFJlY3QgU1ZHUmVuZGVyQmFzZTo6Y2xpcHBlZE92ZXJmbG93UmUKICAgICBy
ZXR1cm4gcmVwYWludFJlY3Q7CiB9CiAKLXZvaWQgU1ZHUmVuZGVyQmFzZTo6Y29tcHV0ZVJlY3RG
b3JSZXBhaW50KFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCit2b2lkIFNW
R1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJPYmplY3QqIG9iamVj
dCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmIHJlcGFp
bnRSZWN0LCBib29sIGZpeGVkKQogewogICAgIG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+
aW5mbGF0ZUZvclNoYWRvdyhyZXBhaW50UmVjdCk7CiAKQEAgLTc0LDcgKzY2LDcgQEAgdm9pZCBT
VkdSZW5kZXJCYXNlOjpjb21wdXRlUmVjdEZvclJlcGFpbgogICAgIG9iamVjdC0+cGFyZW50KCkt
PmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCByZXBhaW50UmVjdCwgZml4
ZWQpOwogfQogCi12b2lkIFNWR1JlbmRlckJhc2U6Om1hcExvY2FsVG9Db250YWluZXIoY29uc3Qg
UmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLCBib29sIGZpeGVkICwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYgdHJh
bnNmb3JtU3RhdGUpCit2b2lkIFNWR1JlbmRlclN1cHBvcnQ6Om1hcExvY2FsVG9Db250YWluZXIo
Y29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBib29sIGZpeGVkICwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0
ZSYgdHJhbnNmb3JtU3RhdGUpCiB7CiAgICAgQVNTRVJUKCFmaXhlZCk7IC8vIFdlIHNob3VsZCBo
YXZlIG5vIGZpeGVkIGNvbnRlbnQgaW4gdGhlIFNWRyByZW5kZXJpbmcgdHJlZS4KICAgICBBU1NF
UlQodXNlVHJhbnNmb3Jtcyk7IC8vIE1hcHBpbmcgYSBwb2ludCB0aHJvdWdoIFNWRyB3L28gcmVz
cGVjdGluZyB0cmFuc2Zvcm1zIGlzIHVzZWxlc3MuCkBAIC04Miw3ICs3NCw3IEBAIHZvaWQgU1ZH
UmVuZGVyQmFzZTo6bWFwTG9jYWxUb0NvbnRhaW5lcigKICAgICBvYmplY3QtPnBhcmVudCgpLT5t
YXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIGZpeGVkLCB1c2VUcmFuc2Zvcm1z
LCB0cmFuc2Zvcm1TdGF0ZSk7CiB9CiAKLWJvb2wgU1ZHUmVuZGVyQmFzZTo6cHJlcGFyZVRvUmVu
ZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqIG9iamVjdCwgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEZsb2F0UmVjdCYgcmVwYWludFJlY3QsIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiYg
ZmlsdGVyKQorYm9vbCBTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50
KFJlbmRlck9iamVjdCogb2JqZWN0LCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRS
ZWN0JiByZXBhaW50UmVjdCwgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqJiBmaWx0ZXIpCiB7CiAj
aWYgIUVOQUJMRShGSUxURVJTKQogICAgIFVOVVNFRF9QQVJBTShmaWx0ZXIpOwpAQCAtMTQ2LDcg
KzEzOCw3IEBAIGJvb2wgU1ZHUmVuZGVyQmFzZTo6cHJlcGFyZVRvUmVuZGVyU1ZHQ28KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTVkdSZW5kZXJCYXNlOjpmaW5pc2hSZW5kZXJTVkdDb250
ZW50KFJlbmRlck9iamVjdCogb2JqZWN0LCBQYWludEluZm8mIHBhaW50SW5mbywgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIqJiBmaWx0ZXIsIEdyYXBoaWNzQ29udGV4dCogc2F2ZWRDb250ZXh0KQor
dm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KFJlbmRlck9iamVj
dCogb2JqZWN0LCBQYWludEluZm8mIHBhaW50SW5mbywgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIq
JiBmaWx0ZXIsIEdyYXBoaWNzQ29udGV4dCogc2F2ZWRDb250ZXh0KQogewogI2lmICFFTkFCTEUo
RklMVEVSUykKICAgICBVTlVTRURfUEFSQU0oZmlsdGVyKTsKQEAgLTE3NSw3ICsxNjcsNyBAQCB2
b2lkIFNWR1JlbmRlckJhc2U6OmZpbmlzaFJlbmRlclNWR0NvbnRlCiAgICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCi12b2lkIHJlbmRlclN1YnRy
ZWVUb0ltYWdlKEltYWdlQnVmZmVyKiBpbWFnZSwgUmVuZGVyT2JqZWN0KiBpdGVtKQordm9pZCBT
VkdSZW5kZXJTdXBwb3J0OjpyZW5kZXJTdWJ0cmVlVG9JbWFnZShJbWFnZUJ1ZmZlciogaW1hZ2Us
IFJlbmRlck9iamVjdCogaXRlbSkKIHsKICAgICBBU1NFUlQoaXRlbSk7CiAgICAgQVNTRVJUKGlt
YWdlKTsKQEAgLTIwNiwyMiArMTk4LDcgQEAgdm9pZCByZW5kZXJTdWJ0cmVlVG9JbWFnZShJbWFn
ZUJ1ZmZlciogaQogICAgICAgICBzdmdDb250YWluZXItPnNldERyYXdzQ29udGVudHMoZmFsc2Up
OwogfQogCi12b2lkIGNsYW1wSW1hZ2VCdWZmZXJTaXplVG9WaWV3cG9ydChGcmFtZVZpZXcqIGZy
YW1lVmlldywgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaW50IHZpZXdXaWR0aCA9IGZyYW1lVmlldy0+dmlzaWJsZVdpZHRoKCk7
Ci0gICAgaW50IHZpZXdIZWlnaHQgPSBmcmFtZVZpZXctPnZpc2libGVIZWlnaHQoKTsKLQotICAg
IGlmIChzaXplLndpZHRoKCkgPiB2aWV3V2lkdGgpCi0gICAgICAgIHNpemUuc2V0V2lkdGgodmll
d1dpZHRoKTsKLQotICAgIGlmIChzaXplLmhlaWdodCgpID4gdmlld0hlaWdodCkKLSAgICAgICAg
c2l6ZS5zZXRIZWlnaHQodmlld0hlaWdodCk7Ci19Ci0KLUZsb2F0UmVjdCBTVkdSZW5kZXJCYXNl
Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWlu
ZXIsIGJvb2wgaW5jbHVkZUFsbFBhaW50ZWRDb250ZW50KQorRmxvYXRSZWN0IFNWR1JlbmRlclN1
cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QqIGNv
bnRhaW5lciwgYm9vbCBpbmNsdWRlQWxsUGFpbnRlZENvbnRlbnQpCiB7CiAgICAgRmxvYXRSZWN0
IGJvdW5kaW5nQm94OwogCkBAIC0yMzUsNyArMjEyLDcgQEAgRmxvYXRSZWN0IFNWR1JlbmRlckJh
c2U6OmNvbXB1dGVDb250YWluZQogICAgIHJldHVybiBib3VuZGluZ0JveDsKIH0KIAotdm9pZCBT
VkdSZW5kZXJCYXNlOjpsYXlvdXRDaGlsZHJlbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBib29sIHNl
bGZOZWVkc0xheW91dCkKK3ZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4oUmVu
ZGVyT2JqZWN0KiBzdGFydCwgYm9vbCBzZWxmTmVlZHNMYXlvdXQpCiB7CiAgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGNoaWxkID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgLy8gT25seSBmb3JjZSBvdXIga2lkcyB0byBs
YXlvdXQgaWYgd2UncmUgYmVpbmcgYXNrZWQgdG8gcmVsYXlvdXQgYXMgYSByZXN1bHQgb2YgYSBw
YXJlbnQgY2hhbmdpbmcKQEAgLTI1OCw3ICsyMzUsNyBAQCB2b2lkIFNWR1JlbmRlckJhc2U6Omxh
eW91dENoaWxkcmVuKFJlbmRlCiAgICAgfQogfQogCi1ib29sIFNWR1JlbmRlckJhc2U6OmlzT3Zl
cmZsb3dIaWRkZW4oY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCitib29sIFNWR1JlbmRlclN1
cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4oY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7CiAg
ICAgLy8gU1ZHIGRvZXNuJ3Qgc3VwcG9ydCBpbmRlcGVuZGVudCB4L3kgb3ZlcmZsb3cKICAgICBB
U1NFUlQob2JqZWN0LT5zdHlsZSgpLT5vdmVyZmxvd1goKSA9PSBvYmplY3QtPnN0eWxlKCktPm92
ZXJmbG93WSgpKTsKQEAgLTI3Miw3ICsyNDksNyBAQCBib29sIFNWR1JlbmRlckJhc2U6OmlzT3Zl
cmZsb3dIaWRkZW4oY29uCiAgICAgcmV0dXJuIG9iamVjdC0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkg
PT0gT0hJRERFTjsKIH0KIAotdm9pZCBTVkdSZW5kZXJCYXNlOjppbnRlcnNlY3RSZXBhaW50UmVj
dFdpdGhSZXNvdXJjZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIEZsb2F0UmVjdCYgcmVw
YWludFJlY3QpIGNvbnN0Cit2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRS
ZWN0V2l0aFJlc291cmNlcyhjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgRmxvYXRSZWN0JiBy
ZXBhaW50UmVjdCkKIHsKICAgICBBU1NFUlQob2JqZWN0KTsKICAgICBBU1NFUlQob2JqZWN0LT5z
dHlsZSgpKTsKQEAgLTMwMSwyMCArMjc4LDcgQEAgdm9pZCBTVkdSZW5kZXJCYXNlOjppbnRlcnNl
Y3RSZXBhaW50UmVjdAogICAgIHN2Z1N0eWxlLT5pbmZsYXRlRm9yU2hhZG93KHJlcGFpbnRSZWN0
KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVQYWludGluZ1Jlc291cmNlKFNW
R1BhaW50KiBwYWludCwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKHBhaW50
KTsKLQotICAgIFNWR1BhaW50OjpTVkdQYWludFR5cGUgcGFpbnRUeXBlID0gcGFpbnQtPnBhaW50
VHlwZSgpOwotICAgIGlmIChwYWludFR5cGUgIT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfVVJJ
ICYmIHBhaW50VHlwZSAhPSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfUkdCQ09MT1IpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEF0b21pY1N0cmluZyBpZChTVkdVUklSZWZlcmVuY2U6Omdl
dFRhcmdldChwYWludC0+dXJpKCkpKTsKLSAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIqIHBhaW50aW5nUmVzb3VyY2UgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lckJ5SWQo
b2JqZWN0LT5kb2N1bWVudCgpLCBpZCkpCi0gICAgICAgIHBhaW50aW5nUmVzb3VyY2UtPmludmFs
aWRhdGVDbGllbnQob2JqZWN0KTsKLX0KLQotYm9vbCBwb2ludEluQ2xpcHBpbmdBcmVhKGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK2Jvb2wgU1ZH
UmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYShjb25zdCBSZW5kZXJPYmplY3QqIG9i
amVjdCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7CiAgICAgQVNTRVJUKG9iamVjdCk7CiAg
ICAgQVNTRVJUKG9iamVjdC0+c3R5bGUoKSk7CkBAIC0zMzUsNjcgKzI5OSwyOCBAQCBib29sIHBv
aW50SW5DbGlwcGluZ0FyZWEoY29uc3QgUmVuZGVyT2JqCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgZGVyZWdpc3RlckZyb21SZXNvdXJjZXMoUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0g
ICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgQVNTRVJUKG9iamVjdC0+c3R5bGUoKSk7Ci0KLSAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBvYmplY3QtPmRvY3VtZW50KCk7Ci0gICAgQVNTRVJUKGRvY3Vt
ZW50KTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IG9iamVjdC0+c3R5
bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBBU1NFUlQoc3ZnU3R5bGUpOwotCi0gICAgLy8gTWFza2Vy
Ci0gICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIgPSBnZXRSZW5kZXJTVkdS
ZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI+KGRvY3VtZW50LCBzdmdTdHlsZS0+
bWFza2VyUmVzb3VyY2UoKSkpCi0gICAgICAgIG1hc2tlci0+aW52YWxpZGF0ZUNsaWVudChvYmpl
Y3QpOwotCi0gICAgLy8gQ2xpcHBlcgotICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIq
IGNsaXBwZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyPihkb2N1bWVudCwgc3ZnU3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgpKSkKLSAgICAgICAgY2xp
cHBlci0+aW52YWxpZGF0ZUNsaWVudChvYmplY3QpOwotCi0gICAgLy8gRmlsdGVyCi0jaWYgRU5B
QkxFKEZJTFRFUlMpCi0gICAgaWYgKFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSBn
ZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KGRvY3VtZW50
LCBzdmdTdHlsZS0+ZmlsdGVyUmVzb3VyY2UoKSkpCi0gICAgICAgIGZpbHRlci0+aW52YWxpZGF0
ZUNsaWVudChvYmplY3QpOwotI2VuZGlmCi0KLSAgICAvLyBNYXJrZXJzCi0gICAgaWYgKFJlbmRl
clNWR1Jlc291cmNlTWFya2VyKiBzdGFydE1hcmtlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJ
ZDxSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcj4oZG9jdW1lbnQsIHN2Z1N0eWxlLT5tYXJrZXJTdGFy
dFJlc291cmNlKCkpKQotICAgICAgICBzdGFydE1hcmtlci0+aW52YWxpZGF0ZUNsaWVudChvYmpl
Y3QpOwotICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWlkTWFya2VyID0gZ2V0UmVu
ZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlTWFya2VyPihkb2N1bWVudCwgc3Zn
U3R5bGUtPm1hcmtlck1pZFJlc291cmNlKCkpKQotICAgICAgICBtaWRNYXJrZXItPmludmFsaWRh
dGVDbGllbnQob2JqZWN0KTsKLSAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIGVuZE1h
cmtlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcj4o
ZG9jdW1lbnQsIHN2Z1N0eWxlLT5tYXJrZXJFbmRSZXNvdXJjZSgpKSkKLSAgICAgICAgZW5kTWFy
a2VyLT5pbnZhbGlkYXRlQ2xpZW50KG9iamVjdCk7Ci0KLSAgICAvLyBHcmFkaWVudHMvUGF0dGVy
bnMKLSAgICBpZiAoc3ZnU3R5bGUtPmhhc0ZpbGwoKSkKLSAgICAgICAgaW52YWxpZGF0ZVBhaW50
aW5nUmVzb3VyY2Uoc3ZnU3R5bGUtPmZpbGxQYWludCgpLCBvYmplY3QpOwotICAgIGlmIChzdmdT
dHlsZS0+aGFzU3Ryb2tlKCkpCi0gICAgICAgIGludmFsaWRhdGVQYWludGluZ1Jlc291cmNlKHN2
Z1N0eWxlLT5zdHJva2VQYWludCgpLCBvYmplY3QpOwotfQotCi1EYXNoQXJyYXkgZGFzaEFycmF5
RnJvbVJlbmRlcmluZ1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUq
IHJvb3RTdHlsZSkKK0Rhc2hBcnJheSBTVkdSZW5kZXJTdXBwb3J0OjpkYXNoQXJyYXlGcm9tUmVu
ZGVyaW5nU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlKQogewogICAgIERhc2hBcnJheSBhcnJheTsKICAgICAKICAgICBDU1NWYWx1ZUxpc3QqIGRh
c2hlcyA9IHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VEYXNoQXJyYXkoKTsKLSAgICBpZiAoZGFz
aGVzKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBkYXNoID0gMDsKLSAgICAgICAgdW5z
aWduZWQgbG9uZyBsZW4gPSBkYXNoZXMtPmxlbmd0aCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGxvbmcgaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgZGFzaCA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oZGFzaGVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkp
KTsKLSAgICAgICAgICAgIGlmICghZGFzaCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICBpZiAoIWRhc2hlcykKKyAgICAgICAgcmV0dXJuIGFycmF5OwogCi0gICAgICAgICAgICBhcnJh
eS5hcHBlbmQoKGZsb2F0KSBkYXNoLT5jb21wdXRlTGVuZ3RoRmxvYXQoY29uc3RfY2FzdDxSZW5k
ZXJTdHlsZSo+KHN0eWxlKSwgcm9vdFN0eWxlKSk7Ci0gICAgICAgIH0KKyAgICBDU1NQcmltaXRp
dmVWYWx1ZSogZGFzaCA9IDA7CisgICAgdW5zaWduZWQgbG9uZyBsZW4gPSBkYXNoZXMtPmxlbmd0
aCgpOworICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAg
ICAgIGRhc2ggPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGRhc2hlcy0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjayhpKSk7CisgICAgICAgIGlmICghZGFzaCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGFycmF5LmFwcGVuZChkYXNoLT5jb21wdXRlTGVuZ3RoRmxvYXQo
Y29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlKSwgcm9vdFN0eWxlKSk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIGFycmF5OwogfQogCi12b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJl
bmRlck9iamVjdCogb2JqZWN0KQordm9pZCBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0
eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKICAgICBjb250ZXh0LT5zZXRT
dHJva2VUaGlja25lc3MoU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVj
dCwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCksIDEuMGYpKTsKICAgICBjb250ZXh0
LT5zZXRMaW5lQ2FwKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpKTsKQEAgLTQxMSw3ICsz
MzYsNyBAQCB2b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDCiAgICAgICAg
IGNvbnRleHQtPnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7CiB9CiAKLWNvbnN0IFJl
bmRlck9iamVjdCogZmluZFRleHRSb290T2JqZWN0KGNvbnN0IFJlbmRlck9iamVjdCogc3RhcnQp
Citjb25zdCBSZW5kZXJPYmplY3QqIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmRUZXh0Um9vdE9iamVj
dChjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0KQogewogICAgIHdoaWxlIChzdGFydCAmJiAhc3Rh
cnQtPmlzU1ZHVGV4dCgpKQogICAgICAgICBzdGFydCA9IHN0YXJ0LT5wYXJlbnQoKTsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmgJKHJldmlzaW9uIDYyMTA0KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYg
KzMsNyBAQAogICogICAgICAgICAgIChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICogICAgICAgICAgIChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw2NCAr
MjcsNjQgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiRGFzaEFycmF5LmgiCi0jaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUg
IlNWR1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJQYWludEluZm8uaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjsKK2NsYXNzIEZsb2F0
UG9pbnQ7CitjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFJlbmRl
ckJveE1vZGVsT2JqZWN0OworY2xhc3MgUmVuZGVyT2JqZWN0OworY2xhc3MgUmVuZGVyU3R5bGU7
CitjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjsKK2NsYXNzIFRyYW5zZm9ybVN0YXRlOwog
Ci0vLyBTVkdSZW5kZXJlckJhc2UgaXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyB3aGljaCBhbGwg
U1ZHIHJlbmRlcmVycyBpbmhlcml0Ci0vLyBmcm9tIGluIG9yZGVyIHRvIHNoYXJlIFNWRyByZW5k
ZXJlciBjb2RlLgotLy8gRklYTUU6IFRoaXMgY29kZSBjYW4gYWxsIG1vdmUgaW50byBSZW5kZXJT
VkdNb2RlbE9iamVjdCBvbmNlCi0vLyBhbGwgU1ZHIHJlbmRlcmVycyBpbmhlcml0IGZyb20gUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuCi1jbGFzcyBTVkdSZW5kZXJCYXNlIHsKKy8vIFNWR1JlbmRlcmVy
U3VwcG9ydCBpcyBhIGhlbHBlciBjbGFzcyBzaGFyaW5nIGNvZGUgYmV0d2VlbiBhbGwgU1ZHIHJl
bmRlcmVycy4KK2NsYXNzIFNWR1JlbmRlclN1cHBvcnQgewogcHVibGljOgotICAgIHZpcnR1YWwg
flNWR1JlbmRlckJhc2UoKTsKLQotICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgb25seSBwdWJsaWMg
Zm9yIFNWR1Jvb3RJbmxpbmVCb3guCi0gICAgLy8gSXQncyB1bmNsZWFyIGlmIHRoZXNlIHNob3Vs
ZCBiZSBleHBvc2VkIG9yIG5vdC4gIFNWR1Jvb3RJbmxpbmVCb3ggbWF5Ci0gICAgLy8gcGFzcyB0
aGUgd3JvbmcgUmVuZGVyT2JqZWN0KiBhbmQgYm91bmRpbmdCb3ggdG8gdGhlc2UgZnVuY3Rpb25z
LgorICAgIC8vIFVzZWQgYnkgYWxsIFNWRyByZW5kZXJlcnMgd2hvIGFwcGx5IGNsaXAvZmlsdGVy
L2V0Yy4gcmVzb3VyY2VzIHRvIHRoZSByZW5kZXJlciBjb250ZW50CiAgICAgc3RhdGljIGJvb2wg
cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqLCBQYWludEluZm8mLCBjb25z
dCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciomKTsKICAg
ICBzdGF0aWMgdm9pZCBmaW5pc2hSZW5kZXJTVkdDb250ZW50KFJlbmRlck9iamVjdCosIFBhaW50
SW5mbyYsIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiYsIEdyYXBoaWNzQ29udGV4dCogc2F2ZWRD
b250ZXh0KTsKIAotICAgIC8vIExheW91dCBhbGwgY2hpbGRyZW4gb2YgdGhlIHBhc3NlZCByZW5k
ZXIgb2JqZWN0CisgICAgLy8gU2hhcmVzIGNoaWxkIGxheW91dGluZyBjb2RlIGJldHdlZW4gUmVu
ZGVyU1ZHUm9vdC9SZW5kZXJTVkcoSGlkZGVuKUNvbnRhaW5lcgogICAgIHN0YXRpYyB2b2lkIGxh
eW91dENoaWxkcmVuKFJlbmRlck9iamVjdCosIGJvb2wgc2VsZk5lZWRzTGF5b3V0KTsKIAogICAg
IC8vIEhlbHBlciBmdW5jdGlvbiBkZXRlcm1pbmluZyB3aGV0ZXIgb3ZlcmZsb3cgaXMgaGlkZGVu
CiAgICAgc3RhdGljIGJvb2wgaXNPdmVyZmxvd0hpZGRlbihjb25zdCBSZW5kZXJPYmplY3QqKTsK
IAogICAgIC8vIENhbGN1bGF0ZXMgdGhlIHJlcGFpbnRSZWN0IGluIGNvbWJpbmF0aW9uIHdpdGgg
ZmlsdGVyLCBjbGlwcGVyIGFuZCBtYXNrZXIgaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgdm9p
ZCBpbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXMoY29uc3QgUmVuZGVyT2JqZWN0Kiwg
RmxvYXRSZWN0JikgY29uc3Q7CisgICAgc3RhdGljIHZvaWQgaW50ZXJzZWN0UmVwYWludFJlY3RX
aXRoUmVzb3VyY2VzKGNvbnN0IFJlbmRlck9iamVjdCosIEZsb2F0UmVjdCYpOwogCi1wcm90ZWN0
ZWQ6Ci0gICAgc3RhdGljIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVu
ZGVyT2JqZWN0KiwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOwotICAg
IHN0YXRpYyB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJPYmplY3QqLCBSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQpOwot
Ci0gICAgc3RhdGljIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3Qq
LCBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zv
cm1zLCBib29sIGZpeGVkLCBUcmFuc2Zvcm1TdGF0ZSYpOworICAgIC8vIERldGVybWluZXMgd2hl
dGhlciB0aGUgcGFzc2VkIHBvaW50IGxpZXMgaW4gYSBjbGlwcGluZyBhcmVhCisgICAgc3RhdGlj
IGJvb2wgcG9pbnRJbkNsaXBwaW5nQXJlYShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBGbG9h
dFBvaW50Jik7CiAKICAgICAvLyBVc2VkIHRvIHNoYXJlIHRoZSAid2FsayBhbGwgdGhlIGNoaWxk
cmVuIiBsb2dpYyBiZXR3ZWVuIG9iamVjdEJvdW5kaW5nQm94CiAgICAgLy8gYW5kIHJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzIGluIFJlbmRlclNWR1Jvb3QgYW5kIFJlbmRlclNWR0NvbnRh
aW5lcgogICAgIHN0YXRpYyBGbG9hdFJlY3QgY29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94KGNv
bnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyLCBib29sIGluY2x1ZGVBbGxQYWludGVkQ29udGVu
dCk7Ci19OwotCi0vLyBUaGlzIG9mZmVycyBhIHdheSB0byByZW5kZXIgcGFydHMgb2YgYSBXZWJL
aXQgcmVuZGVyaW5nIHRyZWUgaW50byBhIEltYWdlQnVmZmVyLgotdm9pZCByZW5kZXJTdWJ0cmVl
VG9JbWFnZShJbWFnZUJ1ZmZlciosIFJlbmRlck9iamVjdCopOwogCi1ib29sIHBvaW50SW5DbGlw
cGluZ0FyZWEoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIC8v
IEltcG9ydGFudCBmdW5jdGlvbnMgdXNlZCBieSBuZWFybHkgYWxsIFNWRyByZW5kZXJlcnMgY2Vu
dHJhbGl6aW5nIGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb25zIC8gcmVwYWludCByZWN0IGNhbGN1
bGF0aW9ucworICAgIHN0YXRpYyBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50
KFJlbmRlck9iamVjdCosIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsK
KyAgICBzdGF0aWMgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyT2JqZWN0KiwgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmLCBib29sIGZpeGVk
KTsKKyAgICBzdGF0aWMgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVj
dCosIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIHVzZVRyYW5z
Zm9ybXMsIGJvb2wgZml4ZWQsIFRyYW5zZm9ybVN0YXRlJik7CiAKLXZvaWQgZGVyZWdpc3RlckZy
b21SZXNvdXJjZXMoUmVuZGVyT2JqZWN0Kik7Ci12b2lkIGNsYW1wSW1hZ2VCdWZmZXJTaXplVG9W
aWV3cG9ydChGcmFtZVZpZXcqLCBJbnRTaXplJiBpbWFnZUJ1ZmZlclNpemUpOworICAgIC8vIFRo
aXMgb2ZmZXJzIGEgd2F5IHRvIHJlbmRlciBwYXJ0cyBvZiBhIFdlYktpdCByZW5kZXJpbmcgdHJl
ZSBpbnRvIGEgSW1hZ2VCdWZmZXIuCisgICAgc3RhdGljIHZvaWQgcmVuZGVyU3VidHJlZVRvSW1h
Z2UoSW1hZ2VCdWZmZXIqLCBSZW5kZXJPYmplY3QqKTsKIAotdm9pZCBhcHBseVN0cm9rZVN0eWxl
VG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVu
ZGVyT2JqZWN0Kik7Ci1EYXNoQXJyYXkgZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSk7CisgICAgLy8gU2hh
cmVkIGJldHdlZW4gU1ZHIHJlbmRlcmVycyBhbmQgcmVzb3VyY2VzLgorICAgIHN0YXRpYyB2b2lk
IGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgUmVuZGVy
U3R5bGUqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKIAotY29uc3QgUmVuZGVyT2JqZWN0KiBmaW5k
VGV4dFJvb3RPYmplY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBzdGFydCk7CisgICAgLy8gRklYTUU6
IFRoZXNlIG1ldGhvZHMgZG8gbm90IGJlbG9uZyBoZXJlLgorICAgIHN0YXRpYyBjb25zdCBSZW5k
ZXJPYmplY3QqIGZpbmRUZXh0Um9vdE9iamVjdChjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0KTsK
KyAgICBzdGF0aWMgRGFzaEFycmF5IGRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUpOworCitwcml2YXRlOgor
ICAgIC8vIFRoaXMgY2xhc3MgaXMgbm90IGNvbnN0cnVjdGFibGUuCisgICAgU1ZHUmVuZGVyU3Vw
cG9ydCgpOworICAgIH5TVkdSZW5kZXJTdXBwb3J0KCk7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQotCiAjZW5kaWYgLy8gU1ZHUmVuZGVyU3Vw
cG9ydF9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAko
cmV2aXNpb24gNjIwOTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcyLDcgKzM3Miw3IEBAIHN0YXRpYyB2b2lkIHdyaXRl
U3R5bGUoVGV4dFN0cmVhbSYgdHMsIGMKICAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNv
dXJjZSh0cywgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSk7CiAKICAgICAgICAgICAgIGRvdWJsZSBk
YXNoT2Zmc2V0ID0gU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKCZwYXRoLCBz
dmdTdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjBmKTsKLSAgICAgICAgICAgIGNvbnN0IERh
c2hBcnJheSYgZGFzaEFycmF5ID0gZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKHN0eWxlLCBv
YmplY3QuZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCkpOworICAg
ICAgICAgICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkgPSBTVkdSZW5kZXJTdXBwb3J0Ojpk
YXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUoc3R5bGUsIG9iamVjdC5kb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKSk7CiAgICAgICAgICAgICBkb3VibGUgc3Ryb2tl
V2lkdGggPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoJnBhdGgsIHN2Z1N0
eWxlLT5zdHJva2VXaWR0aCgpLCAxLjBmKTsKIAogICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1
bHQodHMsICJvcGFjaXR5Iiwgc3ZnU3R5bGUtPnN0cm9rZU9wYWNpdHkoKSwgMS4wZik7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gNjIxMDQpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTMsMTIgKzUzLDEyIEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZv
JiAKICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3QgPSBib3hSZW5kZXJlci0+cmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKTsKIAogICAgIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiBmaWx0
ZXIgPSAwOwotICAgIGlmIChTVkdSZW5kZXJCYXNlOjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50
KGJveFJlbmRlcmVyLCBjaGlsZFBhaW50SW5mbywgcmVwYWludFJlY3QsIGZpbHRlcikpIHsKKyAg
ICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChib3hSZW5k
ZXJlciwgY2hpbGRQYWludEluZm8sIHJlcGFpbnRSZWN0LCBmaWx0ZXIpKSB7CiAgICAgICAgIGZv
ciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRPbkxpbmUoKSkKICAgICAgICAgICAgIGNoaWxkLT5wYWludChjaGlsZFBhaW50SW5mbywg
MCwgMCk7CiAgICAgfQogCi0gICAgU1ZHUmVuZGVyQmFzZTo6ZmluaXNoUmVuZGVyU1ZHQ29udGVu
dChib3hSZW5kZXJlciwgY2hpbGRQYWludEluZm8sIGZpbHRlciwgcGFpbnRJbmZvLmNvbnRleHQp
OworICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQoYm94UmVuZGVy
ZXIsIGNoaWxkUGFpbnRJbmZvLCBmaWx0ZXIsIHBhaW50SW5mby5jb250ZXh0KTsKICAgICBjaGls
ZFBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1NWR1Jvb3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9T
VkdSb290SW5saW5lQm94LmgJKHJldmlzaW9uIDYyMTA0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHUm9vdElubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU1ZHSW5saW5lVGV4dEJveDsKIAotY2xhc3MgU1ZHUm9v
dElubGluZUJveCA6IHB1YmxpYyBSb290SW5saW5lQm94Ci0gICAgICAgICAgICAgICAgICAgICAg
ICwgcHJvdGVjdGVkIFNWR1JlbmRlckJhc2UgeworY2xhc3MgU1ZHUm9vdElubGluZUJveCA6IHB1
YmxpYyBSb290SW5saW5lQm94IHsKIHB1YmxpYzoKICAgICBTVkdSb290SW5saW5lQm94KFJlbmRl
ck9iamVjdCogb2JqKQogICAgICAgICA6IFJvb3RJbmxpbmVCb3gob2JqKQpJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gNjIwOTkpCisrKyBXZWJDb3JlL3N2Zy9TVkdG
RUltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3Ro
LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvLmgiCkBAIC0xMjMsNyArMTI0LDcgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZF
SW1hZ2VFbGVtZQogICAgICAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KHJlbmRlcmVyLT5vYmplY3RCb3VuZGluZ0JveCgpKTsKICAgICAgICAgbV90YXJnZXRJbWFnZSA9
IEltYWdlQnVmZmVyOjpjcmVhdGUodGFyZ2V0UmVjdC5zaXplKCksIExpbmVhclJHQik7CiAKLSAg
ICAgICAgcmVuZGVyU3VidHJlZVRvSW1hZ2UobV90YXJnZXRJbWFnZS5nZXQoKSwgcmVuZGVyZXIp
OworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjpyZW5kZXJTdWJ0cmVlVG9JbWFnZShtX3Rhcmdl
dEltYWdlLmdldCgpLCByZW5kZXJlcik7CiAgICAgfQogCiAgICAgcmV0dXJuIEZFSW1hZ2U6OmNy
ZWF0ZShtX3RhcmdldEltYWdlID8gbV90YXJnZXRJbWFnZS0+aW1hZ2UoKSA6IG1fY2FjaGVkSW1h
Z2UtPmltYWdlKCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSk7CkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdTdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRF
bGVtZW50LmNwcAkocmV2aXNpb24gNjIwOTkpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgU1ZHU3R5bGVk
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmcKICAgICAgICAgaW52YWxpZGF0ZVJlc291cmNlc0lu
QW5jZXN0b3JDaGFpbigpOwogCiAgICAgICAgIC8vIElmIHdlJ3JlIHJlZmVyZW5jaW5nIHJlc291
cmNlcywgdGVsbCB0aGVtIHdlJ3ZlIGNoYW5nZWQuCi0gICAgICAgIGRlcmVnaXN0ZXJGcm9tUmVz
b3VyY2VzKG9iamVjdCk7CisgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjppbnZhbGlkYXRlQWxs
UmVzb3VyY2VzT2ZSZW5kZXJlcihvYmplY3QpOwogICAgIH0KIAogICAgIC8vIEludmFsaWRhdGUg
YWxsIFNWR0VsZW1lbnRJbnN0YW5jZXMgYXNzb2NpYXRlZCB3aXRoIHVzCg==
</data>
<flag name="review"
          id="47252"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>