<?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>52087</bug_id>
          
          <creation_ts>2011-01-07 15:18:48 -0800</creation_ts>
          <short_desc>Move all SVG renderer to WebCore/rendering/svg</short_desc>
          <delta_ts>2011-01-09 04:36:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</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="Dirk Schulze">krit</reporter>
          <assigned_to name="Dirk Schulze">krit</assigned_to>
          <cc>webkit-ews</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>331049</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-07 15:18:48 -0800</bug_when>
    <thetext>Move all SVG renderer to WebCore/rendering/svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331053</commentid>
    <comment_count>1</comment_count>
      <attachid>78283</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-07 15:25:55 -0800</bug_when>
    <thetext>Created attachment 78283
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331054</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-07 15:27:21 -0800</bug_when>
    <thetext>Please don&apos;t review the patch above. Just testing the build. Will clear the review flag when all build bots are ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331070</commentid>
    <comment_count>3</comment_count>
      <attachid>78283</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-07 15:45:34 -0800</bug_when>
    <thetext>Comment on attachment 78283
Patch

Hm. I&apos;ll try to clean up the code according to the webkit style and try uploading this patch later, when less changes occur to the build systems. When ever this will be :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331162</commentid>
    <comment_count>4</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-01-07 22:56:28 -0800</bug_when>
    <thetext>Why? Is this a new policy?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331164</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-07 23:00:51 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Why? Is this a new policy?

Talked on webkit-dev about it. I think it makes much more sense to move code to the type specific folders. I think even the renderer for mathml should move to rendering/mathml and if WML has renderers too, they should move to rendering/wml. Makes the structure of rendering/ much more readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331388</commentid>
    <comment_count>6</comment_count>
      <attachid>78343</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-09 00:15:02 -0800</bug_when>
    <thetext>Created attachment 78343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331399</commentid>
    <comment_count>7</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-09 01:25:20 -0800</bug_when>
    <thetext>Attachment 78343 did not build on qt:
Build output: http://queues.webkit.org/results/7371076</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331414</commentid>
    <comment_count>8</comment_count>
      <attachid>78348</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-09 02:52:47 -0800</bug_when>
    <thetext>Created attachment 78348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331421</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-09 04:12:08 -0800</bug_when>
    <thetext>It looks like the EWS bots are not sync to trunk. The patch applies and builds with trunk. Checked it locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331422</commentid>
    <comment_count>10</comment_count>
      <attachid>78348</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-01-09 04:15:55 -0800</bug_when>
    <thetext>Comment on attachment 78348
Patch

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

r=me.

&gt; Source/WebCore/GNUmakefile.am:2922
&gt; +	Source/WebCore/rendering/svg/RenderForeignObject.cpp \
&gt; +	Source/WebCore/rendering/svg/RenderForeignObject.h \

This should be renamed RenderSVGForeignObject, do you plan to do this in a follow-up patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331423</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-09 04:18:49 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 78348 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78348&amp;action=review
&gt; 
&gt; r=me.
&gt; 
&gt; &gt; Source/WebCore/GNUmakefile.am:2922
&gt; &gt; +	Source/WebCore/rendering/svg/RenderForeignObject.cpp \
&gt; &gt; +	Source/WebCore/rendering/svg/RenderForeignObject.h \
&gt; 
&gt; This should be renamed RenderSVGForeignObject, do you plan to do this in a follow-up patch?

Yes, I&apos;ll prepare a follow-up for review. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331425</commentid>
    <comment_count>12</comment_count>
      <attachid>78348</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-09 04:36:00 -0800</bug_when>
    <thetext>Comment on attachment 78348
Patch

Clearing flags on attachment: 78348

Committed r75350: &lt;http://trac.webkit.org/changeset/75350&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331426</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-09 04:36:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78283</attachid>
            <date>2011-01-07 15:25:55 -0800</date>
            <delta_ts>2011-01-09 00:14:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52087-20110108002545.patch</filename>
            <type>text/plain</type>
            <size>883268</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTI4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQ4IEBACisyMDExLTAxLTA3ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92
ZSBhbGwgU1ZHIHJlbmRlcmVyIHRvIFdlYkNvcmUvcmVuZGVyaW5nL3N2ZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIwODcKKworICAgICAgICBObyBu
ZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIEFuZHJvaWQubWs6CisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclNWR0NvbnRhaW5lci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclNWR0NvbnRhaW5lci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
VkdHcmFkaWVudFN0b3AuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
VkdHcmFkaWVudFN0b3AuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHSGlkZGVuQ29udGFpbmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clNWR0ltYWdlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1h
Z2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5o
OiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmg6IFJlbW92ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oOiBSZW1v
dmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXJQcmltaXRpdmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oOiBSZW1vdmVk
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmg6IFJlbW92
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6
IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3Jh
ZGllbnQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZVJhZGlhbEdyYWRpZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTVkdSb290LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHUm9vdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmg6IFJlbW92ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHTWFya2VyRGF0YS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oOiBSZW1vdmVkLgorICAgICAgICAqIHJl
bmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvU1ZHUmVuZGVyU3VwcG9ydC5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZXNvdXJj
ZXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZXNvdXJjZXMuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHA6IENvcGllZCBmcm9t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwLgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdBbGxJbk9uZS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR0FsbEluT25lLmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2Nr
LmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suY3BwLgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suaDogQ29waWVkIGZyb20gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0NvbnRhaW5lci5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0NvbnRhaW5lci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdD
b250YWluZXIuaDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFp
bmVyLmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuY3Bw
OiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuY3Bw
LgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmg6IENvcGll
ZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50U3RvcC5oLgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcDogQ29waWVkIGZy
b20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oOiBDb3BpZWQgZnJv
bSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaC4KKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW1hZ2UuaDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1h
Z2UuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDog
Q29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwLgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDogQ29waWVkIGZy
b20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2UuaDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2UuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuaDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyLmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lci5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyLmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyLmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlclByaW1pdGl2ZS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmguCisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDogQ29waWVkIGZyb20gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Lmg6IENvcGllZCBmcm9tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwOiBDb3BpZWQg
ZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNw
cC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGll
bnQuaDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudC5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1h
cmtlci5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1h
cmtlci5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIu
Y3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tl
ci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5o
OiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5o
LgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDog
Q29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNw
cC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOiBD
b3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaC4K
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQu
Y3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlh
bEdyYWRpZW50LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
UmFkaWFsR3JhZGllbnQuaDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaC4KKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jvb3QuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSb290LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaDog
Q29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oLgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwOiBDb3Bp
ZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5l
ci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENv
bnRhaW5lci5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lci5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJh
bnNmb3JtYWJsZUNvbnRhaW5lci5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwLgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oOiBDb3BpZWQgZnJvbSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmguCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHA6IENvcGllZCBmcm9t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmg6IENvcGllZCBm
cm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmguCisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcDogQ29waWVkIGZyb20g
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAuCisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVu
ZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R01hcmtlckRhdGEuaDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHTWFya2VyRGF0
YS5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHA6IENv
cGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uY3BwLgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmguCisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJTdXBwb3J0Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBv
cnQuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOiBD
b3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaDogQ29waWVkIGZyb20g
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oLgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHUmVzb3VyY2VzLmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5o
OiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuaC4KKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcDogQ29waWVkIGZyb20gV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwLgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvU1ZHUmVzb3VyY2VzQ2FjaGUuaDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
UmVzb3VyY2VzQ2FjaGUuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5
Y2xlU29sdmVyLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2Vz
Q3ljbGVTb2x2ZXIuY3BwLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ3lj
bGVTb2x2ZXIuaDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3lj
bGVTb2x2ZXIuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50
cy5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50
cy5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaDog
Q29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmguCisK
IDIwMTEtMDEtMDcgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAg
RnVydGhlciBidWlsZCBmaXhlcy4gIEFkZCBhIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgZ3VhcmQg
YXJvdW5kCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9B
bmRyb2lkLm1rCShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUvQW5kcm9pZC5tawkod29ya2lu
ZyBjb3B5KQpAQCAtNjY5LDcgKzY2OSw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NS
Q19GSUxFUykgXAogCXJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAgXAogCXJlbmRlcmluZy9S
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAgXAogCXJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJv
eC5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcCBcCisJcmVuZGVyaW5n
L3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcCBcCiAJcmVuZGVyaW5nL1JlbmRlckZyYW1lLmNw
cCBcCiAJcmVuZGVyaW5nL1JlbmRlckZyYW1lQmFzZS5jcHAgXAogCXJlbmRlcmluZy9SZW5kZXJG
cmFtZVNldC5jcHAgXApAQCAtNjk3LDI4ICs2OTcsMjggQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQo
TE9DQUxfU1JDX0ZJTEVTKSBcCiAKIGlmZXEgKCQoRU5BQkxFX1NWRyksIHRydWUpCiBMT0NBTF9T
UkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHQmxv
Y2suY3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBcCi0JcmVuZGVyaW5n
L1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5D
b250YWluZXIuY3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwIFwKLQlyZW5kZXJp
bmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2UuY3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBcCi0JcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBcCi0JcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcCBcCi0JcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyUHJpbWl0aXZlLmNwcCBcCi0JcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAgXAot
CXJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAgXAotCXJlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm4uY3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5j
cHAgXAotCXJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIFwKLQlyZW5k
ZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJTVkdTaGFkb3dUcmVl
Um9vdENvbnRhaW5lci5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29u
dGFpbmVyLmNwcCBcCi0JcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCBc
CisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAgXAorCXJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHQ29udGFpbmVyLmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0
b3AuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgXAor
CXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR01vZGVsT2JqZWN0LmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5j
cHAgXAorCXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBcCisJcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgXAorCXJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50LmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxp
bmVhckdyYWRpZW50LmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtl
ci5jcHAgXAorCXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwIFwKKwly
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgXAorCXJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAgXAorCXJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRh
aW5lci5jcHAgXAorCXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5l
ci5jcHAgXAorCXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIFwK
IAlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAgXAogCXJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW5saW5lVGV4dC5jcHAgXAogCXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAg
XApAQCAtNzY0LDE0ICs3NjQsMTQgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJ
TEVTKSBcCiAKIGlmZXEgKCQoRU5BQkxFX1NWRyksIHRydWUpCiBMT0NBTF9TUkNfRklMRVMgOj0g
JChMT0NBTF9TUkNfRklMRVMpIFwKLQlyZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAg
XAotCXJlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcCBcCi0JcmVuZGVyaW5nL1NWR1Jl
bmRlclN1cHBvcnQuY3BwIFwKLQlyZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgXAot
CXJlbmRlcmluZy9TVkdSZXNvdXJjZXMuY3BwIFwKLQlyZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2Fj
aGUuY3BwIFwKLQlyZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwIFwKLQlyZW5k
ZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcAorCXJlbmRlcmluZy9zdmcvU1ZHSW1hZ2VC
dWZmZXJUb29scy5jcHAgXAorCXJlbmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAg
XAorCXJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgXAorCXJlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgXAorCXJlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNw
cCBcCisJcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAgXAorCXJlbmRlcmluZy9z
dmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1NWR1NoYWRv
d1RyZWVFbGVtZW50cy5jcHAKIGVuZGlmCiAKIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NS
Q19GSUxFUykgXApJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE3OTAsMzcgKzE3OTAsMzcgQEAgSUYgKEVOQUJM
RV9TVkcpCiAgICAgICAgIGNzcy9TVkdDU1NQYXJzZXIuY3BwCiAgICAgICAgIGNzcy9TVkdDU1NT
dHlsZVNlbGVjdG9yLmNwcAogICAgICAgICByZW5kZXJpbmcvUG9pbnRlckV2ZW50c0hpdFJ1bGVz
LmNwcAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAKLSAgICAgICAg
cmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmNwcAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNw
cAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAotICAgICAg
ICByZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJT
VkdNb2RlbE9iamVjdC5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmNw
cAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAotICAgICAg
ICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCi0gICAgICAgIHJlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcAotICAgICAgICByZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlTGluZWFyR3JhZGllbnQuY3BwCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlci5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNw
cAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAotICAgICAg
ICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAKLSAgICAgICAg
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKLSAgICAgICAgcmVuZGVy
aW5nL1JlbmRlclNWR1Jvb3QuY3BwCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lci5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1RyYW5zZm9y
bWFibGVDb250YWluZXIuY3BwCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENv
bnRhaW5lci5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCi0g
ICAgICAgIHJlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcAotICAgICAgICByZW5kZXJp
bmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCi0gICAgICAgIHJlbmRlcmluZy9TVkdSZXNvdXJjZXMuY3BwCi0gICAgICAgIHJl
bmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1NWR1Jlc291
cmNlc0N5Y2xlU29sdmVyLmNwcAotICAgICAgICByZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1l
bnRzLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCisg
ICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3BwCisgICAgICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0dyYWRpZW50U3RvcC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRk
ZW5Db250YWluZXIuY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3Bw
CisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCisgICAgICAg
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCisgICAgICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VMaW5lYXJHcmFkaWVudC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlci5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlci5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFk
aWVudC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IuY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKKyAgICAgICAg
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAKKyAgICAg
ICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAorICAg
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAorICAgICAg
ICByZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCisgICAgICAgIHJlbmRlcmlu
Zy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJTdXBwb3J0LmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAorICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcAorICAgICAgICByZW5kZXJpbmcvc3Zn
L1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1No
YWRvd1RyZWVFbGVtZW50cy5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0
eWxlLmNwcAogICAgICAgICByZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcAog
ICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAKSW5kZXg6IFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2
aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzQ0LDggKzI3NDQsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZsZXhpYmxlQm94LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3gu
aCBcCi0JV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAgXAotCVdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnJhbWVCYXNlLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVCYXNl
LmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lLmNwcCBcCkBAIC0yOTU5LDIzICsy
OTU3LDI1IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
U1ZHUmVuZGVyU3R5bGVEZWZzLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVu
ZGVyU3R5bGVEZWZzLmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxl
LmggXAotCVdlYkNvcmUvcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwIFwKLQlXZWJD
b3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmggXAotCVdlYkNvcmUvcmVuZGVyaW5n
L1NWR01hcmtlckRhdGEuaCBcCi0JV2ViQ29yZS9yZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5m
by5jcHAgXAotCVdlYkNvcmUvcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uaCBcCi0JV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgXAotCVdlYkNvcmUvcmVuZGVyaW5n
L1NWR1JlbmRlclN1cHBvcnQuaCBcCi0JV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5jcHAgXAotCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuaCBcCi0J
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIFwKLQlXZWJDb3JlL3JlbmRl
cmluZy9TVkdSZXNvdXJjZXNDYWNoZS5oIFwKLQlXZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJj
ZXMuY3BwIFwKLQlXZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAg
XAotCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmggXAotCVdlYkNv
cmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlcy5oIFwKLQlXZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFk
b3dUcmVlRWxlbWVudHMuY3BwIFwKLQlXZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxl
bWVudHMuaCBcCisJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3Bw
IFwKKwlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5oIFwKKwlXZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAgXAorCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdN
YXJrZXJMYXlvdXRJbmZvLmggXAorCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBw
b3J0LmNwcCBcCisJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaCBcCisJ
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIFwKKwlXZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIFwKKwlXZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVzb3VyY2VzQ2FjaGUuaCBcCisJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5j
cHAgXAorCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAg
XAorCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oIFwKKwlX
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmggXAorCVdlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHU2hhZG93VHJlZUVsZW1lbnRzLmggXAorCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJG
b3JlaWduT2JqZWN0LmNwcCBcCisJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlckZvcmVpZ25P
YmplY3QuaCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAgXAog
CVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaCBcCiAJV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3NTI3
MikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNjU4LDYgKzM2
NTgsOCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdHlsZS9TdHlsZVRyYW5zZm9ybURhdGEu
aCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N0eWxlL1N0eWxlVmlzdWFsRGF0YS5jcHAnLAog
ICAgICAgICAgICAgJ3JlbmRlcmluZy9zdHlsZS9TdHlsZVZpc3VhbERhdGEuaCcsCisgICAgICAg
ICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcCcsCisgICAgICAgICAg
ICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmgnLAogICAgICAgICAgICAgJ3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbmxpbmUuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmVUZXh0LmNwcCcsCkBAIC0zNjk1LDYgKzM2OTcsNjcgQEAKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0UXVlcnkuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRv
b2xzLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xz
LmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oJywKKyAgICAg
ICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR01hcmtlckxheW91dEluZm8uY3BwJywKKyAgICAgICAg
ICAgICdyZW5kZXJpbmcvc3ZnL1NWR01hcmtlckxheW91dEluZm8uaCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCcsCisgICAgICAgICAgICAncmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyVHJlZUFzVGV4dC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1Jlc291
cmNlcy5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmgnLAor
ICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwJywKKyAgICAg
ICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmgnLAorICAgICAgICAgICAg
J3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwJywKKyAgICAgICAgICAg
ICdyZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmgnLAorICAgICAgICAgICAg
J3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaCcsCisgICAgICAgICAgICAncmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHQmxvY2suaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdDb250YWluZXIuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Nv
bnRhaW5lci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50
U3RvcC5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRT
dG9wLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250
YWluZXIuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAn
LAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaCcsCisgICAgICAg
ICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAnLAorICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAnLAorICAgICAgICAgICAgJ3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCcsCisgICAgICAgICAgICAncmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oJywKKyAgICAgICAgICAgICdyZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCcsCisgICAgICAgICAgICAncmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oJywKKyAgICAgICAgICAgICdyZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCcsCisgICAgICAg
ICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oJywK
KyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3Bw
JywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
aCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdy
YWRpZW50LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUxpbmVhckdyYWRpZW50LmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlTWFya2VyLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VNYXNrZXIuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlTWFza2VyLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4uaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgnLAorICAgICAgICAgICAgJ3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCcsCisgICAgICAgICAg
ICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcCcsCisgICAgICAgICAgICAncmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSb290LmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgnLAorICAgICAgICAgICAg
J3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAnLAorICAg
ICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5o
JywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdWaWV3cG9ydENvbnRh
aW5lci5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCcsCiAg
ICAgICAgICAgICAncmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5oJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvQmlkaVJ1bi5jcHAnLApAQCAtMzc1NSw4ICszODE4LDYgQEAKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCcsCiAgICAgICAgICAgICAncmVu
ZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1Jl
bmRlckZsZXhpYmxlQm94LmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJGb3JlaWdu
T2JqZWN0LmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3Qu
aCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlckZyYW1lLmNwcCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL1JlbmRlckZyYW1lLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5k
ZXJGcmFtZUJhc2UuY3BwJywKQEAgLTM4MjUsNTAgKzM4ODYsNiBAQAogICAgICAgICAgICAgJ3Jl
bmRlcmluZy9SZW5kZXJSdWJ5VGV4dC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVy
U3VtbWFyeS5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTdW1tYXJ5LmgnLAot
ICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAnLAotICAgICAgICAgICAg
J3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVu
ZGVyU1ZHQ29udGFpbmVyLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR0Nv
bnRhaW5lci5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50U3RvcC5oJywK
LSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCcsCi0g
ICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oJywKLSAgICAg
ICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwJywKLSAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR01vZGVs
T2JqZWN0LmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAn
LAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oJywKLSAgICAgICAg
ICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCcsCi0gICAgICAgICAg
ICAncmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oJywKLSAgICAgICAgICAgICdy
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwJywKLSAgICAgICAgICAgICdy
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCcsCi0gICAgICAgICAgICAncmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAnLAotICAgICAgICAgICAgJ3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oJywKLSAgICAgICAgICAgICdy
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAnLAotICAgICAgICAgICAgJ3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgnLAotICAgICAgICAgICAgJ3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCcsCi0gICAgICAgICAgICAn
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCcsCi0gICAgICAgICAg
ICAncmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcCcsCi0gICAgICAgICAgICAn
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmgnLAotICAgICAgICAgICAgJ3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlUGF0dGVybi5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9S
ZW5kZXJTVkdSb290LmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1Jvb3Qu
aCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFp
bmVyLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290
Q29udGFpbmVyLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1RyYW5z
Zm9ybWFibGVDb250YWluZXIuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTY3JvbGxi
YXIuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgnLAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcCcsCkBAIC0zOTMwLDIz
ICszOTQ3LDYgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvU2Nyb2xsQmVoYXZpb3IuaCcsCiAg
ICAgICAgICAgICAncmVuZGVyaW5nL1NoYWRvd0VsZW1lbnQuY3BwJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvU2hhZG93RWxlbWVudC5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHSW1h
Z2VCdWZmZXJUb29scy5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZl
clRvb2xzLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdNYXJrZXJEYXRhLmgnLAotICAg
ICAgICAgICAgJ3JlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcCcsCi0gICAgICAgICAg
ICAncmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uaCcsCi0gICAgICAgICAgICAncmVuZGVy
aW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHUmVu
ZGVyU3VwcG9ydC5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgnLAot
ICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuY3BwJywKLSAgICAgICAgICAgICdy
ZW5kZXJpbmcvU1ZHUmVzb3VyY2VzLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdSZXNv
dXJjZXNDYWNoZS5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdSZXNvdXJjZXNDYWNo
ZS5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3Bw
JywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCcsCi0g
ICAgICAgICAgICAncmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAnLAotICAgICAg
ICAgICAgJ3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaCcsCiAgICAgICAgICAgICAn
cmVuZGVyaW5nL1RhYmxlTGF5b3V0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUvV2Vi
Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEzNTksNyArMTM1OSw2IEBAIFNPVVJDRVMgKz0g
XAogICAgIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVy
V29yZEJyZWFrLmNwcCBcCiAgICAgcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwIFwKLSAgICBy
ZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgXAogICAgIHJlbmRlcmluZy9TY3JvbGxC
ZWhhdmlvci5jcHAgXAogICAgIHJlbmRlcmluZy9TaGFkb3dFbGVtZW50LmNwcCBcCiAgICAgcmVu
ZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgXApAQCAtMjM5MiwxNSArMjM5MSwx
NSBAQCBIRUFERVJTICs9IFwKICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVT
cGFjaW5nLmggXAogICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuaCBcCiAgICAgcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaCBcCi0gICAgcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVy
VG9vbHMuaCBcCi0gICAgcmVuZGVyaW5nL1NWR01hcmtlckRhdGEuaCBcCi0gICAgcmVuZGVyaW5n
L1NWR01hcmtlckxheW91dEluZm8uaCBcCi0gICAgcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQu
aCBcCi0gICAgcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuaCBcCi0gICAgcmVuZGVyaW5n
L1NWR1Jlc291cmNlcy5oIFwKLSAgICByZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2FjaGUuaCBcCi0g
ICAgcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmggXAotICAgIHJlbmRlcmluZy9T
VkdTaGFkb3dUcmVlRWxlbWVudHMuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZl
clRvb2xzLmggXAorICAgIHJlbmRlcmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oIFwKKyAgICByZW5k
ZXJpbmcvc3ZnL1NWR01hcmtlckxheW91dEluZm8uaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJTdXBwb3J0LmggXAorICAgIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5o
IFwKKyAgICByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5oIFwKKyAgICByZW5kZXJpbmcvc3Zn
L1NWR1Jlc291cmNlc0NhY2hlLmggXAorICAgIHJlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ3lj
bGVTb2x2ZXIuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaCBc
CiAgICAgcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIFwKICAgICByZW5kZXJp
bmcvVHJhbnNmb3JtU3RhdGUuaCBcCiAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5l
ci5oIFwKQEAgLTM0NzEsNiArMzQ3MCw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9
MSkgewogICAgICAgICBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgXAogICAgICAgICByZW5k
ZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N0eWxl
L1NWR1JlbmRlclN0eWxlRGVmcy5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlckZv
cmVpZ25PYmplY3QuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUu
Y3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBcCiAg
ICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgXApAQCAtMzQ3OSw2ICszNDc5
LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0xKSB7CiAgICAgICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdJ
bmxpbmVGbG93Qm94LmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIFwK
ICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcCBcCiAgICAgICAgIHJl
bmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZH
VGV4dENodW5rQnVpbGRlci5jcHAgXApAQCAtMzQ4OSw2ICszNDkwLDM1IEBAIGNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlv
dXRFbmdpbmVTcGFjaW5nLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJp
Y3MuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwIFwKKyAgICAg
ICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAgXAorICAgICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0dyYWRpZW50U3RvcC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hp
ZGRlbkNvbnRhaW5lci5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdl
LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIFwK
KyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAgXAorICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgXAorICAgICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBcCisgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAgXAorICAgICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIFwKKyAgICAgICAgcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCBcCisgICAgICAgIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwIFwKKyAgICAgICAgcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgXAorICAgICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
U2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9T
VkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHTWFya2Vy
TGF5b3V0SW5mby5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQu
Y3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwIFwKKyAgICAgICAg
cmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAgXAorICAgICAgICByZW5kZXJpbmcv
c3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcv
U1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9Qb2ludGVyRXZl
bnRzSGl0UnVsZXMuY3BwIFwKICAgICAgICAgc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAg
XAogICAgICAgICBzdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwIFwKQEAgLTM2MjksMzcgKzM2NTksNyBA
QCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsKICAgICAgICAgc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBcCiAgICAgICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBc
Ci0gICAgICAgIHN2Zy9wcm9wZXJ0aWVzL1NWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNw
cCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcCBcCi0gICAgICAg
IHJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAgXAotICAgICAgICByZW5kZXJpbmcvUmVuZGVy
U1ZHQ29udGFpbmVyLmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdHcmFkaWVudFN0
b3AuY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAg
XAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwIFwKLSAgICAgICAgcmVuZGVy
aW5nL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZS5jcHAgXAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyLmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5j
cHAgXAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIFwKLSAg
ICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCBcCi0g
ICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBcCi0gICAgICAg
IHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCBcCi0gICAgICAg
IHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAgXAotICAgICAgICByZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlUGF0dGVybi5jcHAgXAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VSYWRpYWxHcmFkaWVudC5jcHAgXAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmNw
cCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5j
cHAgXAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5j
cHAgXAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIFwK
LSAgICAgICAgcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwIFwKLSAgICAgICAgcmVu
ZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1NWR1Jl
bmRlclN1cHBvcnQuY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1NWR1Jlc291cmNlcy5jcHAgXAot
ICAgICAgICByZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIFwKLSAgICAgICAgcmVuZGVy
aW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9TVkdT
aGFkb3dUcmVlRWxlbWVudHMuY3BwCisgICAgICAgIHN2Zy9wcm9wZXJ0aWVzL1NWR1BhdGhTZWdM
aXN0UHJvcGVydHlUZWFyT2ZmLmNwcAogfQogCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfSkFW
QVNDUklQVF9ERUJVR0dFUj0xKSB7CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHJldmlzaW9uIDc1MjcyKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMzMzNjYsNyArMzMzNjYsNyBAQAogCQkJCT4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVy
Rm9yZWlnbk9iamVjdC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJl
bmRlckZvcmVpZ25PYmplY3QuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJ
CQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zMzQxOCw3ICszMzQxOCw3IEBACiAJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxyZW5kZXJpbmdcUmVuZGVyRm9yZWlnbk9iamVjdC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cmVuZGVyaW5nXHN2Z1xSZW5kZXJGb3JlaWduT2JqZWN0LmgiCiAJCQkJPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKQEAgLTM1NDcwLDExICszNTQ3MCwxMSBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHQWxsSW5PbmUu
Y3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdBbGxJbk9u
ZS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHJlbmRlcmluZ1xSZW5kZXJTVkdCbG9jay5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5k
ZXJpbmdcc3ZnXFJlbmRlclNWR0Jsb2NrLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0
aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzU1MjYsMTEgKzM1NTI2LDExIEBACiAJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHQmxvY2suaCIKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHQmxvY2suaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR0NvbnRhaW5l
ci5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0NvbnRh
aW5lci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1
Z3xXaW4zMiIKQEAgLTM1NTgyLDExICszNTU4MiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5n
XFJlbmRlclNWR0NvbnRhaW5lci5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2
Z1xSZW5kZXJTVkdDb250YWluZXIuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0dyYWRpZW50U3RvcC5j
cHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4z
MiIKQEAgLTM1NjM4LDExICszNTYzOCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRl
clNWR0dyYWRpZW50U3RvcC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xS
ZW5kZXJTVkdHcmFkaWVudFN0b3AuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAi
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0hpZGRlbkNvbnRh
aW5lci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1
Z3xXaW4zMiIKQEAgLTM1Njk0LDExICszNTY5NCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5n
XFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVy
aW5nXHN2Z1xSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR0ltYWdlLmNw
cCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHSW1hZ2UuY3Bw
IgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIi
CkBAIC0zNTc1MCwxMSArMzU3NTAsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJT
VkdJbWFnZS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdJ
bWFnZS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxyZW5kZXJpbmdcUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAiCiAJCQkJPgogCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM1ODA2LDExICsz
NTgwNiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR01vZGVsT2JqZWN0Lmgi
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR01vZGVsT2JqZWN0
LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZS5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5k
ZXJpbmdcc3ZnXFJlbmRlclNWR1Jlc291cmNlLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1
cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzU4NjIsMTEgKzM1ODYyLDExIEBA
CiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVzb3VyY2UuaCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3Zn
XFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM1OTE4LDExICszNTkxOCwxMSBAQAog
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVy
aW5nXFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIgogCQkJCT4KIAkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zNTk3NCwx
MSArMzU5NzQsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lci5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIgorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4z
MiIKQEAgLTM2MDMwLDExICszNjAzMCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3Zn
XFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZS5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0
aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzYwODYsMTEgKzM2MDg2LDExIEBACiAJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXJQcmltaXRpdmUuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNw
cCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMy
IgpAQCAtMzYxNDIsMTEgKzM2MTQyLDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2
Z1xSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZUxpbmVh
ckdyYWRpZW50LmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVy
U1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM2MTk4LDExICszNjE5OCwxMSBAQAog
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCIK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwIgorCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAiCiAJ
CQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAg
LTM2MjU0LDExICszNjI1NCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jl
c291cmNlTWFya2VyLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRl
clNWR1Jlc291cmNlTWFya2VyLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1Jlc291cmNlTWFza2Vy
LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdp
bjMyIgpAQCAtMzYzMTAsMTEgKzM2MzEwLDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
IAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xz
dmdcUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1Jlc291
cmNlUGF0dGVybi5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1l
PSJEZWJ1Z3xXaW4zMiIKQEAgLTM2MzY2LDExICszNjM2NiwxMSBAQAogCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVu
ZGVyaW5nXFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jl
c291cmNlUmFkaWFsR3JhZGllbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5n
XHN2Z1xSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCIKIAkJCQk+CiAJCQkJPEZp
bGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzY0MjIsMTEgKzM2
NDIyLDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxH
cmFkaWVudC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdS
ZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
Y3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFt
ZT0iRGVidWd8V2luMzIiCkBAIC0zNjQ3OCwxMSArMzY0NzgsMTEgQEAKIAkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCiAJCQkJPgog
CQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5k
ZXJTVkdSb290LmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVy
U1ZHUm9vdC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJE
ZWJ1Z3xXaW4zMiIKQEAgLTM2NTM0LDExICszNjUzNCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVy
aW5nXFJlbmRlclNWR1Jvb3QuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdc
UmVuZGVyU1ZHUm9vdC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3Bw
IgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdTaGFkb3dUcmVl
Um9vdENvbnRhaW5lci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlO
YW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM2NTkwLDExICszNjU5MCwxMSBAQAogCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cmVuZGVyaW5nXFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgiCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVy
LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCIKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5j
cHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4z
MiIKQEAgLTM2NjQ2LDExICszNjY0NiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRl
clNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRl
cmluZ1xzdmdcUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIgogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZH
Vmlld3BvcnRDb250YWluZXIuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2
Z1xSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM3OTA0LDExICszNzkwNCwxMSBA
QAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5k
ZXJpbmdcU1ZHTWFya2VyRGF0YS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2
Z1xTVkdNYXJrZXJEYXRhLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdNYXJrZXJMYXlvdXRJbmZvLmNwcCIKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAiCiAJCQkJ
PgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM3
OTYwLDExICszNzk2MCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNWR01hcmtlckxheW91
dEluZm8uaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHTWFya2VyTGF5
b3V0SW5mby5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxyZW5kZXJpbmdcU1ZHUmVuZGVyU3VwcG9ydC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxyZW5kZXJpbmdcc3ZnXFNWR1JlbmRlclN1cHBvcnQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zODAxNiwxMSArMzgwMTYs
MTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdSZW5kZXJTdXBwb3J0LmgiCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1JlbmRlclN1cHBvcnQuaCIKIAkJCQk+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNWR1Jl
bmRlclRyZWVBc1RleHQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xT
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJ
CQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzgwNzIsMTEgKzM4MDcyLDExIEBACiAJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxyZW5kZXJpbmdcU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgorCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccmVuZGVyaW5nXHN2Z1xTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCiAJCQkJPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdSZXNvdXJjZXMu
Y3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdSZXNvdXJjZXMuY3Bw
IgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIi
CkBAIC0zODEyOCwxMSArMzgxMjgsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdSZXNv
dXJjZXMuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHUmVzb3VyY2Vz
LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xTVkdSZXNvdXJjZXNDYWNoZS5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5k
ZXJpbmdcc3ZnXFNWR1Jlc291cmNlc0NhY2hlLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1
cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzgxODQsMTEgKzM4MTg0LDExIEBA
CiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNWR1Jlc291
cmNlc0N5Y2xlU29sdmVyLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdc
U1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zODI0MCwxMSArMzgyNDAsMTEgQEAKIAkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oIgorCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdc
U1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmlu
Z1xzdmdcU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1
cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzgyOTYsNyArMzgyOTYsNyBAQAog
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNWR1NoYWRvd1RyZWVFbGVtZW50cy5oIgorCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdTaGFkb3dUcmVlRWxlbWVudHMuaCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc1MjcyKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDYgQEAKIAkJ
MDgwNEJGNkUwRUUwOUMzQjAwMDZDMDAwIC8qIFdNTERvRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODA0QkY2QzBFRTA5QzNCMDAwNkMw
MDAgLyogV01MRG9FbGVtZW50LmNwcCAqLzsgfTsKIAkJMDgwNEJGNkYwRUUwOUMzQjAwMDZDMDAw
IC8qIFdNTERvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDgwNEJGNkQwRUUwOUMzQjAwMDZDMDAwIC8qIFdNTERvRWxlbWVudC5oICovOyB9
OwogCQkwODA2RTU3QTEyODkzMDQ1MDA3Q0VEMzIgLyogU1ZHTWF0cml4LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODA2RTU3OTEyODkzMDQ1MDA3Q0VE
MzIgLyogU1ZHTWF0cml4LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMDgwODIzNzMxMTc5ODdDMTAwMjQxREU4IC8qIFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwODA4MjM3MjExNzk4N0MxMDAyNDFERTggLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIu
aCAqLzsgfTsKIAkJMDgwQUVDODEwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MEFF
QzdEMEVEODcwOEEwMERGNENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudC5jcHAgKi87IH07CiAJCTA4
MEFFQzgyMEVEODcwOEIwMERGNENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgwQUVDN0UwRUQ4NzA4QjAwREY0
Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50LmggKi87IH07CiAJCTA4MEFFQzgzMEVEODcwOEIwMERG
NENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgwQUVDN0YwRUQ4NzA4QjAwREY0Q0NFIC8qIFdN
TEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAgKi87IH07CkBAIC05NywxMCArOTYsNiBAQAogCQkw
ODIzRDE1OTEyN0FENkFDMDAwRUJDOTUgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODIzRDE1ODEyN0FENkFDMDAw
RUJDOTUgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDgyNTA5MzkxMjhCRDREODAwRTJFRDhFIC8qIFNWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDgyNTA5MzgxMjhCRDREODAwRTJFRDhFIC8qIFNWR0FuaW1hdGVkVHJhbnNm
b3JtTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTA4MkRFNDJEMTI5MjYyMTYwMEQ5MjNERiAvKiBTVkdQYXRoU2VnV2l0aENvbnRleHQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MkRFNDJDMTI5
MjYyMTYwMEQ5MjNERiAvKiBTVkdQYXRoU2VnV2l0aENvbnRleHQuaCAqLzsgfTsKLQkJMDgzMTky
QUExMTJCNDMwNTAwODNDM0I5IC8qIFJlbmRlclNWR1Jlc291cmNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODMxOTJBNzExMkI0MzA1MDA4M0MzQjkg
LyogUmVuZGVyU1ZHUmVzb3VyY2UuaCAqLzsgfTsKLQkJMDgzMTkyQUIxMTJCNDMwNTAwODNDM0I5
IC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MzE5MkE4MTEyQjQzMDUwMDgzQzNCOSAvKiBSZW5kZXJT
VkdSZXNvdXJjZU1hc2tlci5jcHAgKi87IH07Ci0JCTA4MzE5MkFDMTEyQjQzMDUwMDgzQzNCOSAv
KiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDgzMTkyQTkxMTJCNDMwNTAwODNDM0I5IC8qIFJlbmRlclNWR1Jl
c291cmNlTWFza2VyLmggKi87IH07Ci0JCTA4Mzg1RkY2MTBGMDE4NjAwMEJGRTA3QiAvKiBTVkdN
YXJrZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwODM4NUZGNTEwRjAxODYwMDBCRkUwN0IgLyogU1ZHTWFya2VyRGF0YS5oICovOyB9OwogCQkw
ODM5NDc2QzBFQ0U0QkQ2MDAwMjczNTAgLyogV01MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhGQjg0QjAwRUNFMzczMzAw
REMwNjRFIC8qIFdNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLzsgfTsKIAkJMDgzOTQ3NkQwRUNFNEJE
NjAwMDI3MzUwIC8qIFdNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEZCODRCMTBFQ0UzNzMzMDBEQzA2NEUgLyogV01MRWxl
bWVudEZhY3RvcnkuaCAqLzsgfTsKIAkJMDgzREFFQTYwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4M0RBRUEyMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZS5jcHAgKi87IH07CkBAIC0xMTQsMTAgKzEwOSw2IEBACiAJCTA4NENFNUND
MEYyN0RBREMwMEU2MjQwRSAvKiBXTUxPcHRHcm91cEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NENFNUM4MEYyN0RBREMwMEU2MjQwRSAv
KiBXTUxPcHRHcm91cEVsZW1lbnQuaCAqLzsgfTsKIAkJMDg0Q0U1Q0QwRjI3REFEQzAwRTYyNDBF
IC8qIFdNTE9wdGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDg0Q0U1QzkwRjI3REFEQzAwRTYyNDBFIC8qIFdNTE9wdGlvbkVsZW1l
bnQuY3BwICovOyB9OwogCQkwODRDRTVDRTBGMjdEQURDMDBFNjI0MEUgLyogV01MT3B0aW9uRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0
Q0U1Q0EwRjI3REFEQzAwRTYyNDBFIC8qIFdNTE9wdGlvbkVsZW1lbnQuaCAqLzsgfTsKLQkJMDg0
RDBFM0MxMUY1ODE2MTAwMDgxRTFBIC8qIFNWR1Jlc291cmNlcy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODREMEUzODExRjU4MTYxMDAwODFFMUEg
LyogU1ZHUmVzb3VyY2VzLmNwcCAqLzsgfTsKLQkJMDg0RDBFM0QxMUY1ODE2MTAwMDgxRTFBIC8q
IFNWR1Jlc291cmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDg0RDBFMzkxMUY1ODE2MTAwMDgxRTFBIC8qIFNWR1Jlc291cmNlcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTA4NEQwRTNFMTFGNTgx
NjEwMDA4MUUxQSAvKiBTVkdSZXNvdXJjZXNDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODREMEUzQTExRjU4MTYxMDAwODFFMUEgLyogU1ZH
UmVzb3VyY2VzQ2FjaGUuY3BwICovOyB9OwotCQkwODREMEUzRjExRjU4MTYxMDAwODFFMUEgLyog
U1ZHUmVzb3VyY2VzQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4NEQwRTNCMTFGNTgxNjEwMDA4MUUxQSAvKiBTVkdSZXNvdXJjZXNDYWNoZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4NERC
NTlCMTI4MDA4Q0MwMDJBNkQ2NCAvKiBTVkdBbmltYXRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0REI1OUExMjgwMDhDQzAwMkE2RDY0
IC8qIFNWR0FuaW1hdGVkU3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMDg0REJBQTEwRUQzOUQzNjAwMzhDMjI2IC8qIFdNTFZhcmlhYmxl
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODRE
QkE5RDBFRDM5RDM1MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmNwcCAqLzsgfTsKIAkJMDg0REJB
QTIwRUQzOUQzNjAwMzhDMjI2IC8qIFdNTFZhcmlhYmxlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0REJBOUUwRUQzOUQzNjAwMzhDMjI2IC8qIFdN
TFZhcmlhYmxlcy5oICovOyB9OwpAQCAtMTQwLDMwICsxMzEsMjIgQEAKIAkJMDg1NEIwMjMxMjU1
RTRFNjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTRCMDExMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdS
b290SW5saW5lQm94LmggKi87IH07CiAJCTA4NTRCMDI0MTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdU
ZXh0UXVlcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDg1NEIwMTIxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5jcHAgKi87IH07CiAJ
CTA4NTRCMDI1MTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdUZXh0UXVlcnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTRCMDEzMTI1NUU0RTYwMEI5Q0RE
MCAvKiBTVkdUZXh0UXVlcnkuaCAqLzsgfTsKLQkJMDg1NjNCQjQxMTc4NjE3ODAwMTJCNTc4IC8q
IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODU2M0JCMjExNzg2MTc3MDAxMkI1NzggLyogUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmNwcCAqLzsgfTsKLQkJMDg1NjNCQjUxMTc4NjE3ODAwMTJCNTc4IC8q
IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDg1NjNCQjMxMTc4NjE3NzAwMTJCNTc4IC8qIFJlbmRlclNWR1Jl
c291cmNlUGF0dGVybi5oICovOyB9OwotCQkwODU2M0JEMDExNzg2NUY1MDAxMkI1NzggLyogUmVu
ZGVyU1ZHUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDg1NjNCQ0YxMTc4NjVGNTAwMTJCNTc4IC8qIFJlbmRlclNWR1Jlc291cmNlLmNw
cCAqLzsgfTsKIAkJMDg1Nzk3MDkxMjc4Mzk0QzAwQThFQzVGIC8qIFNWR0FuaW1hdGVkQm9vbGVh
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1Nzk3
MDgxMjc4Mzk0QzAwQThFQzVGIC8qIFNWR0FuaW1hdGVkQm9vbGVhbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4NTkxQUE1MEYwODVDNEUwMDlC
QUNCMSAvKiBJbnB1dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4NTkxQUE0MEYwODVDNEUwMDlCQUNCMSAvKiBJbnB1dEVsZW1lbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwODVBMTU5
MzEyODlBOEREMDAyNzEwRTMgLyogU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFy
T2ZmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODVB
MTU5MjEyODlBOEREMDAyNzEwRTMgLyogU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlU
ZWFyT2ZmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMDg1QUZEQzgwRjI5NzczNTAwNjFGMkIzIC8qIFdNTEZvcm1Db250cm9sRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODVBRkRDNjBG
Mjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCAqLzsgfTsKIAkJMDg1
QUZEQzkwRjI5NzczNTAwNjFGMkIzIC8qIFdNTEZvcm1Db250cm9sRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1QUZEQzcwRjI5NzczNTAw
NjFGMkIzIC8qIFdNTEZvcm1Db250cm9sRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKCk7IH07IH07Ci0JCTA4NUIwNUMyMTFGQUUxNkMwMDRENjVGNiAvKiBTVkdSZXNvdXJj
ZXNDeWNsZVNvbHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwODVCMDVDMDExRkFFMTZDMDA0RDY1RjYgLyogU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2
ZXIuY3BwICovOyB9OwotCQkwODVCMDVDMzExRkFFMTZDMDA0RDY1RjYgLyogU1ZHUmVzb3VyY2Vz
Q3ljbGVTb2x2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA4NUIwNUMxMTFGQUUxNkMwMDRENjVGNiAvKiBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5o
ICovOyB9OwogCQkwODVCOTJCQTBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NUI5MkI4
MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwICovOyB9OwogCQkwODVCOTJC
QjBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODVCOTJCOTBFRkRFNzNEMDBFNjEyM0MgLyog
Rm9ybURhdGFCdWlsZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsK
IAkJMDg2NDFENDcxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUlt
YWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4
NjQxRDQ1MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5j
cHAgKi87IH07CiAJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291
cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDg2NDFENDYxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHls
ZUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMDg2NUNDRTYwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NjVDQ0U0MEVEREY1MUIw
MERGOUVDMyAvKiBXTUxOb29wRWxlbWVudC5jcHAgKi87IH07CiAJCTA4NjVDQ0U3MEVEREY1MUIw
MERGOUVDMyAvKiBXTUxOb29wRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDg2NUNDRTUwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BFbGVt
ZW50LmggKi87IH07Ci0JCTA4NkE0MDA2MTFGNkQ2QjcwMDJDRUM1MyAvKiBSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwODZBNDAwNTExRjZENkI3MDAyQ0VDNTMgLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuY3BwICovOyB9OwogCQkwODcwMEJFNzBGMDg2QzUzMDA5MTk0MTkgLyogSW5wdXRFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4
NzAwQkU2MEYwODZDNTMwMDkxOTQxOSAvKiBJbnB1dEVsZW1lbnQuY3BwICovOyB9OwogCQkwODcy
ODE1NTBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODcyODE1MTBGMjZCOUI2MDBBRkM1OTYg
LyogT3B0aW9uRWxlbWVudC5jcHAgKi87IH07CiAJCTA4NzI4MTU2MEYyNkI5QjYwMEFGQzU5NiAv
KiBPcHRpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwODcyODE1MjBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uRWxlbWVudC5oICovOyB9
OwogCQkwODcyODE1NzBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uR3JvdXBFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzI4MTUzMEYy
NkI5QjYwMEFGQzU5NiAvKiBPcHRpb25Hcm91cEVsZW1lbnQuY3BwICovOyB9OwogCQkwODcyODE1
ODBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uR3JvdXBFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODcyODE1NDBGMjZCOUI2MDBBRkM1OTYg
LyogT3B0aW9uR3JvdXBFbGVtZW50LmggKi87IH07Ci0JCTA4NzM1RkI4MTBFOTEyMzIwMDZENkZB
RCAvKiBTVkdNYXJrZXJMYXlvdXRJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzM1RkI2MTBFOTEyMzIwMDZENkZBRCAvKiBTVkdNYXJrZXJM
YXlvdXRJbmZvLmNwcCAqLzsgfTsKLQkJMDg3MzVGQjkxMEU5MTIzMjAwNkQ2RkFEIC8qIFNWR01h
cmtlckxheW91dEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4NzM1RkI3MTBFOTEyMzIwMDZENkZBRCAvKiBTVkdNYXJrZXJMYXlvdXRJbmZvLmgg
Ki87IH07CiAJCTA4NzQ0QkFBMEVEQjdEODYwMDRDOUU2MyAvKiBXTUxPbkV2ZW50RWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODc0NEJB
OTBFREI3RDg2MDA0QzlFNjMgLyogV01MT25FdmVudEVsZW1lbnQuY3BwICovOyB9OwogCQkwODc0
NEJBRTBFREI3RDkyMDA0QzlFNjMgLyogV01MT25FdmVudEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzQ0QkFEMEVEQjdEOTIwMDRDOUU2
MyAvKiBXTUxPbkV2ZW50RWxlbWVudC5oICovOyB9OwogCQkwODdCODQ5NjEyNzJDRUM4MDBBMTQ0
MTcgLyogU1ZHQW5pbWF0ZWRBbmdsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDg3Qjg0OTUxMjcyQ0VDNzAwQTE0NDE3IC8qIFNWR0FuaW1hdGVkQW5n
bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjIzLDIwICsyMDYsMTAgQEAKIAkJMDhBNDhBNkUwRTg2Q0Y2RDAwRTIyNUREIC8qIEpTU1ZHRWxl
bWVudEluc3RhbmNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4QTQ4QTZEMEU4NkNGNkQwMEUyMjVERCAvKiBKU1NWR0VsZW1lbnRJbnN0
YW5jZUN1c3RvbS5jcHAgKi87IH07CiAJCTA4QjM1QjEzMTI3QjZBN0MwMDUzMTRERCAvKiBTVkdB
bmltYXRlZE51bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDhCMzVCMTIxMjdCNkE3QzAwNTMxNEREIC8qIFNWR0FuaW1hdGVkTnVtYmVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDhCMzVCMTcx
MjdCNkE4ODAwNTMxNEREIC8qIFNWR0FuaW1hdGVkTnVtYmVyTGlzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhCMzVCMTYxMjdCNkE4ODAwNTMxNERE
IC8qIFNWR0FuaW1hdGVkTnVtYmVyTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTA4QzM0QUY1MTE3OUMwNTcwMDJENzQ1NiAvKiBSZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4QzM0QUYxMTE3OUMwNTYwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmNwcCAqLzsgfTsKLQkJMDhDMzRBRjYxMTc5QzA1NzAwMkQ3NDU2IC8qIFJlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4QzM0QUYyMTE3OUMwNTcwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmggKi87IH07Ci0JCTA4QzM0QUY3MTE3OUMwNTcwMDJENzQ1NiAvKiBSZW5kZXJT
VkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzM0QUYzMTE3OUMwNTcwMDJENzQ1NiAvKiBSZW5kZXJTVkdS
ZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCAqLzsgfTsKLQkJMDhDMzRBRjgxMTc5QzA1NzAwMkQ3
NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzM0QUY0MTE3OUMwNTcwMDJENzQ1NiAv
KiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmggKi87IH07Ci0JCTA4QzM0QUZEMTE3
OUMwNzIwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzM0QUZCMTE3OUMw
NzIwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCAqLzsgfTsK
LQkJMDhDMzRBRkUxMTc5QzA3MjAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3Jh
ZGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4
QzM0QUZDMTE3OUMwNzIwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50
LmggKi87IH07Ci0JCTA4QzQ2QjY5MTIxMkYxNUUwMDExQUY0MCAvKiBTVkdJbWFnZUJ1ZmZlclRv
b2xzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4
QzQ2QjY3MTIxMkYxNUQwMDExQUY0MCAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCAqLzsgfTsK
LQkJMDhDNDZCNkExMjEyRjE1RTAwMTFBRjQwIC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzQ2QjY4MTIxMkYx
NUQwMDExQUY0MCAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmggKi87IH07CiAJCTA4QzRDNTE4MEVG
MTlBNDAwMEU0ODQwRiAvKiBXTUxJbWFnZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDNEM1MTQwRUYxOUE0MDAwRTQ4NDBGIC8qIFdN
TEltYWdlRWxlbWVudC5jcHAgKi87IH07CiAJCTA4QzRDNTE5MEVGMTlBNDAwMEU0ODQwRiAvKiBX
TUxJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4QzRDNTE1MEVGMTlBNDAwMEU0ODQwRiAvKiBXTUxJbWFnZUVsZW1lbnQuaCAqLzsg
fTsKIAkJMDhDNEM1MUEwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdlTG9hZGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzRDNTE2MEVGMTlB
NDAwMEU0ODQwRiAvKiBXTUxJbWFnZUxvYWRlci5jcHAgKi87IH07CiAJCTA4QzRDNTFCMEVGMTlB
NDAwMEU0ODQwRiAvKiBXTUxJbWFnZUxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDNEM1MTcwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdl
TG9hZGVyLmggKi87IH07Ci0JCTA4QzZBN0FCMTE3REZCQUIwMEZFQTFBMiAvKiBSZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDhDNkE3QTkxMTdERkJBQjAwRkVBMUEyIC8qIFJlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvci5jcHAgKi87IH07Ci0JCTA4QzZBN0FDMTE3REZCQUIwMEZFQTFBMiAvKiBSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4QzZBN0FBMTE3REZCQUIwMEZFQTFBMiAvKiBSZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IuaCAqLzsgfTsKIAkJMDhDNzEzNkUxMjg5NTZBMzAwMUIxMDdFIC8qIFNW
R1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzcxMzZEMTI4OTU2QTMwMDFCMTA3RSAvKiBTVkdUcmFu
c2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDhDN0EyQzcxMERDNzQ2MjAwMkQzNjhCIC8qIFNWR05hbWVz
LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NTY1ODFFOTA5RDE1MDhEMDAwRTYxRDcgLyogU1ZHTmFtZXMuaCAqLzsgfTsKIAkJ
MDhDODU5QzAxMjc0NTc1NDAwQTU3MjhEIC8qIFNWR0FuaW1hdGVkUmVjdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDODU5QkYxMjc0NTc1MzAwQTU3
MjhEIC8qIFNWR0FuaW1hdGVkUmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0yNDYsMTAgKzIxOSw2IEBACiAJCTA4Q0Q2MUJDMEVEMzkyOUMw
MDJEREY1MSAvKiBXTUxUYXNrRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwOENENjFCODBFRDM5MjlDMDAyRERGNTEgLyogV01MVGFza0Vs
ZW1lbnQuY3BwICovOyB9OwogCQkwOENENjFCRDBFRDM5MjlDMDAyRERGNTEgLyogV01MVGFza0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4
Q0Q2MUI5MEVEMzkyOUMwMDJEREY1MSAvKiBXTUxUYXNrRWxlbWVudC5oICovOyB9OwogCQkwOEQ0
NkNFMzEyN0FENUZDMDA4OTY5NEIgLyogU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhENDZDRTIxMjdBRDVGQzAw
ODk2OTRCIC8qIFNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwOERBQjlCQTExMDNEOUE1MDAzRTdBQkEgLyog
UmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhEQUI5QjgxMTAzRDlBNTAwM0U3QUJBIC8qIFJl
bmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCAqLzsgfTsKLQkJMDhEQUI5QkIxMTAz
RDlBNTAwM0U3QUJBIC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOERBQjlCOTExMDNEOUE1
MDAzRTdBQkEgLyogUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCAqLzsgfTsKLQkJ
MDhEQUI5QzIxMTAzRDlDMTAwM0U3QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOERBQjlDMDExMDNE
OUMxMDAzRTdBQkEgLyogU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCAqLzsgfTsKLQkJMDhEQUI5
QzMxMTAzRDlDMTAwM0U3QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhEQUI5QzExMTAzRDlDMTAwM0U3
QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5oICovOyB9OwogCQkwOEUxOTI1MzBFREUwQzNB
MDA4N0I3ODAgLyogV01MRXJyb3JIYW5kbGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEUxOTI1MTBFREUwQzM5MDA4N0I3ODAgLyogV01MRXJy
b3JIYW5kbGluZy5jcHAgKi87IH07CiAJCTA4RTE5MjU0MEVERTBDM0EwMDg3Qjc4MCAvKiBXTUxF
cnJvckhhbmRsaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwOEUxOTI1MjBFREUwQzNBMDA4N0I3ODAgLyogV01MRXJyb3JIYW5kbGluZy5oICovOyB9
OwogCQkwOEU0RkU0NjBFMkJENDE0MDBGNENBRTAgLyogSlNTVkdMZW5ndGhDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhFNEZFNDUwRTJC
RDQxNDAwRjRDQUUwIC8qIEpTU1ZHTGVuZ3RoQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTM4Miw4ICsz
NTEsNiBAQAogCQkxOEY4MzFCODBGRDQ4Qzc4MDBEOEM1NkIgLyogV29ya2VyTG9hZGVyUHJveHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4RjgzMUI3
MEZENDhDNzgwMEQ4QzU2QiAvKiBXb3JrZXJMb2FkZXJQcm94eS5oICovOyB9OwogCQkxOTIxMzI3
NDExQzBFNkJCMDA0NTYyMzggLyogU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTkyMTMyNzExMUMwRTZC
QjAwNDU2MjM4IC8qIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCAqLzsgfTsKIAkJMTky
MTMyNzUxMUMwRTZCQjAwNDU2MjM4IC8qIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOTIxMzI3MjExQzBF
NkJCMDA0NTYyMzggLyogU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaCAqLzsgfTsKLQkJMTk0
MjNCNTAxMjM0RTg2QjAwRDFFRTlFIC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE5NDIz
QjRFMTIzNEU4NkIwMEQxRUU5RSAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5j
cHAgKi87IH07Ci0JCTE5NDIzQjUxMTIzNEU4NkIwMEQxRUU5RSAvKiBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTk0MjNCNEYxMjM0RTg2QjAwRDFFRTlFIC8qIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyUHJpbWl0aXZlLmggKi87IH07CiAJCTE5QkZGNjRCMTFDMEYyQUMwMEI4QzA0RCAvKiBET01T
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTlCRkY2NDYxMUMwRjJBQzAwQjhDMDREIC8qIERPTVNWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50LmggKi87IH07CiAJCTE5QkZGNjRDMTFDMEYyQUMwMEI4QzA0RCAv
KiBET01TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE5QkZGNjQ3MTFDMEYyQUMwMEI4QzA0RCAvKiBET01T
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5tbSAqLzsgfTsKIAkJMTlCRkY2NEQxMUMwRjJBQzAw
QjhDMDREIC8qIERPTVNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE5QkZGNjQ4MTFDMEYyQUMw
MEI4QzA0RCAvKiBET01TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudEludGVybmFsLmggKi87IH07
CkBAIC05NzQsNiArOTQxLDY5IEBACiAJCTQxRjFEMjFGMEVGMzVDMkEwMERBODc1MyAvKiBTY3Jp
cHRDYWNoZWRGcmFtZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxRjFEMjFEMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURh
dGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0
MUYxRDIyMDBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjFEMjFFMEVGMzVD
MkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwICovOyB9OwogCQk0MUY1ODRD
NzEwNDY1MkNCMDA5Q0FBNjQgLyogSlNNZXNzYWdlUG9ydEN1c3RvbS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGNTg0QzYxMDQ2NTJDQjAwOUNBQTY0
IC8qIEpTTWVzc2FnZVBvcnRDdXN0b20uaCAqLzsgfTsKKwkJNDNEQkJENDAxMkQ3QzY4NzAwQ0Ex
QTVBIC8qIFJlbmRlclNWR0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQzREJCRDAyMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdCbG9j
ay5jcHAgKi87IH07CisJCTQzREJCRDQxMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdCbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJE
MDMxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR0Jsb2NrLmggKi87IH07CisJCTQzREJCRDQy
MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEMDQxMkQ3QzY4NzAwQ0ExQTVB
IC8qIFJlbmRlclNWR0NvbnRhaW5lci5jcHAgKi87IH07CisJCTQzREJCRDQzMTJEN0M2ODcwMENB
MUE1QSAvKiBSZW5kZXJTVkdDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQzREJCRDA1MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdD
b250YWluZXIuaCAqLzsgfTsKKwkJNDNEQkJENDQxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNW
R0dyYWRpZW50U3RvcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0M0RCQkQwNjEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmNwcCAqLzsgfTsKKwkJNDNEQkJENDUxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR0dyYWRp
ZW50U3RvcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDNEQkJEMDcxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oICovOyB9
OworCQk0M0RCQkQ0NjEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzREJC
RDA4MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwICovOyB9
OworCQk0M0RCQkQ0NzEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0M0RCQkQw
OTEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi87IH07CisJ
CTQzREJCRDQ4MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0M0RCQkQwQTEyRDdDNjg3MDBD
QTFBNUEgLyogUmVuZGVyU1ZHSW1hZ2UuY3BwICovOyB9OworCQk0M0RCQkQ0OTEyRDdDNjg3MDBD
QTFBNUEgLyogUmVuZGVyU1ZHSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQzREJCRDBCMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdJbWFn
ZS5oICovOyB9OworCQk0M0RCQkQ0QTEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHTW9kZWxP
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDNEQkJEMEMxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCAqLzsg
fTsKKwkJNDNEQkJENEIxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0M0RCQkQwRDEy
RDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLzsgfTsKKwkJNDNEQkJE
NEMxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzREJCRDBFMTJEN0M2ODcwMENBMUE1
QSAvKiBSZW5kZXJTVkdSZXNvdXJjZS5jcHAgKi87IH07CisJCTQzREJCRDREMTJEN0M2ODcwMENB
MUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEMEYxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jl
c291cmNlLmggKi87IH07CisJCTQzREJCRDRFMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDNEQkJEMTAxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xp
cHBlci5jcHAgKi87IH07CisJCTQzREJCRDRGMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQzREJCRDExMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuaCAqLzsgfTsKKwkJNDNEQkJENTAxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQzREJCRDEyMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lci5jcHAgKi87IH07CisJCTQzREJCRDUxMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDNEQkJEMTMxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyLmggKi87IH07CisJCTQzREJCRDUyMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0M0RCQkQxNDEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwICovOyB9OworCQk0M0RCQkQ1MzEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzREJCRDE1MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5o
ICovOyB9OworCQk0M0RCQkQ1NDEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXJQcmltaXRpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDNEQkJEMTYxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyUHJpbWl0aXZlLmNwcCAqLzsgfTsKKwkJNDNEQkJENTUxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0M0RCQkQxNzEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCAqLzsgfTsKKwkJNDNEQkJENTYxMkQ3QzY4NzAw
Q0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEMTgxMkQ3QzY4NzAwQ0ExQTVBIC8q
IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwICovOyB9OworCQk0M0RCQkQ1NzEyRDdDNjg3
MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEMTkxMkQ3QzY4NzAwQ0ExQTVBIC8q
IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCAqLzsgfTsKKwkJNDNEQkJENTgxMkQ3QzY4NzAw
Q0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEMUExMkQ3QzY4NzAwQ0Ex
QTVBIC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwICovOyB9OworCQk0M0RC
QkQ1OTEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEMUIx
MkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCAqLzsg
fTsKKwkJNDNEQkJENUExMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlTWFya2Vy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzREJC
RDFDMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAgKi87IH07
CisJCTQzREJCRDVCMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEMUQx
MkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlTWFya2VyLmggKi87IH07CisJCTQz
REJCRDVDMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0M0RCQkQxRTEyRDdD
Njg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwICovOyB9OworCQk0M0RC
QkQ1RDEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzREJCRDFGMTJEN0M2ODcw
MENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oICovOyB9OworCQk0M0RCQkQ1RTEy
RDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzREJCRDIwMTJEN0M2ODcwMENB
MUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwICovOyB9OworCQk0M0RCQkQ1RjEy
RDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0M0RCQkQyMTEyRDdDNjg3MDBDQTFB
NUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggKi87IH07CisJCTQzREJCRDYwMTJEN0M2
ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzREJCRDIyMTJEN0M2ODcw
MENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCAqLzsgfTsKKwkJ
NDNEQkJENjExMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzREJC
RDIzMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Lmgg
Ki87IH07CisJCTQzREJCRDYyMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDNEQkJEMjQxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5jcHAgKi87IH07CisJCTQzREJCRDYzMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQzREJCRDI1MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuaCAqLzsgfTsKKwkJNDNEQkJENjQxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jv
b3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNE
QkJEMjYxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jvb3QuY3BwICovOyB9OworCQk0M0RC
QkQ2NTEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUm9vdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEMjcxMkQ3QzY4NzAwQ0ExQTVBIC8q
IFJlbmRlclNWR1Jvb3QuaCAqLzsgfTsKKwkJNDNEQkJENjYxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJl
bmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzREJCRDI4MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5k
ZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAgKi87IH07CisJCTQzREJCRDY3MTJEN0M2
ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEMjkxMkQ3QzY4NzAw
Q0ExQTVBIC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmggKi87IH07CisJCTQz
REJCRDY4MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzREJC
RDJBMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNw
cCAqLzsgfTsKKwkJNDNEQkJENjkxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1RyYW5zZm9y
bWFibGVDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQzREJCRDJCMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxl
Q29udGFpbmVyLmggKi87IH07CisJCTQzREJCRDZBMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0M0RCQkQyQzEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHVmlld3Bv
cnRDb250YWluZXIuY3BwICovOyB9OworCQk0M0RCQkQ2QjEyRDdDNjg3MDBDQTFBNUEgLyogUmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQzREJCRDJEMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lci5oICovOyB9OworCQk0M0RCQkQ2QzEyRDdDNjg3MDBDQTFBNUEgLyogU1ZH
SW1hZ2VCdWZmZXJUb29scy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0M0RCQkQyRTEyRDdDNjg3MDBDQTFBNUEgLyogU1ZHSW1hZ2VCdWZmZXJUb29s
cy5jcHAgKi87IH07CisJCTQzREJCRDZEMTJEN0M2ODcwMENBMUE1QSAvKiBTVkdJbWFnZUJ1ZmZl
clRvb2xzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
M0RCQkQyRjEyRDdDNjg3MDBDQTFBNUEgLyogU1ZHSW1hZ2VCdWZmZXJUb29scy5oICovOyB9Owor
CQk0M0RCQkQ2RTEyRDdDNjg3MDBDQTFBNUEgLyogU1ZHTWFya2VyRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEMzAxMkQ3QzY4NzAwQ0Ex
QTVBIC8qIFNWR01hcmtlckRhdGEuaCAqLzsgfTsKKwkJNDNEQkJENkYxMkQ3QzY4NzAwQ0ExQTVB
IC8qIFNWR01hcmtlckxheW91dEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEMzExMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR01hcmtlckxh
eW91dEluZm8uY3BwICovOyB9OworCQk0M0RCQkQ3MDEyRDdDNjg3MDBDQTFBNUEgLyogU1ZHTWFy
a2VyTGF5b3V0SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDNEQkJEMzIxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR01hcmtlckxheW91dEluZm8uaCAq
LzsgfTsKKwkJNDNEQkJENzExMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1JlbmRlclN1cHBvcnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEMzMx
MkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwICovOyB9OworCQk0M0RCQkQ3
MjEyRDdDNjg3MDBDQTFBNUEgLyogU1ZHUmVuZGVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEMzQxMkQ3QzY4NzAwQ0ExQTVBIC8q
IFNWR1JlbmRlclN1cHBvcnQuaCAqLzsgfTsKKwkJNDNEQkJENzMxMkQ3QzY4NzAwQ0ExQTVBIC8q
IFNWR1JlbmRlclRyZWVBc1RleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDNEQkJEMzUxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1JlbmRlclRyZWVB
c1RleHQuY3BwICovOyB9OworCQk0M0RCQkQ3NDEyRDdDNjg3MDBDQTFBNUEgLyogU1ZHUmVuZGVy
VHJlZUFzVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDNEQkJEMzYxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1JlbmRlclRyZWVBc1RleHQuaCAqLzsg
fTsKKwkJNDNEQkJENzUxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1Jlc291cmNlcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0M0RCQkQzNzEyRDdDNjg3
MDBDQTFBNUEgLyogU1ZHUmVzb3VyY2VzLmNwcCAqLzsgfTsKKwkJNDNEQkJENzYxMkQ3QzY4NzAw
Q0ExQTVBIC8qIFNWR1Jlc291cmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDNEQkJEMzgxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1Jlc291cmNlcy5o
ICovOyB9OworCQk0M0RCQkQ3NzEyRDdDNjg3MDBDQTFBNUEgLyogU1ZHUmVzb3VyY2VzQ2FjaGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJE
MzkxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1Jlc291cmNlc0NhY2hlLmNwcCAqLzsgfTsKKwkJNDNE
QkJENzgxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1Jlc291cmNlc0NhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0M0RCQkQzQTEyRDdDNjg3MDBDQTFB
NUEgLyogU1ZHUmVzb3VyY2VzQ2FjaGUuaCAqLzsgfTsKKwkJNDNEQkJENzkxMkQ3QzY4NzAwQ0Ex
QTVBIC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzREJCRDNCMTJEN0M2ODcwMENBMUE1QSAvKiBTVkdS
ZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAgKi87IH07CisJCTQzREJCRDdBMTJEN0M2ODcwMENBMUE1
QSAvKiBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEM0MxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1Jlc291
cmNlc0N5Y2xlU29sdmVyLmggKi87IH07CisJCTQzREJCRDdCMTJEN0M2ODcwMENBMUE1QSAvKiBT
VkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDNEQkJEM0QxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1NoYWRvd1RyZWVF
bGVtZW50cy5jcHAgKi87IH07CisJCTQzREJCRDdDMTJEN0M2ODcwMENBMUE1QSAvKiBTVkdTaGFk
b3dUcmVlRWxlbWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQzREJCRDNFMTJEN0M2ODcwMENBMUE1QSAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMu
aCAqLzsgfTsKKwkJNDNEQkJEODAxMkQ3RDQwODAwQ0ExQTVBIC8qIFJlbmRlckZvcmVpZ25PYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNE
QkJEN0UxMkQ3RDQwODAwQ0ExQTVBIC8qIFJlbmRlckZvcmVpZ25PYmplY3QuY3BwICovOyB9Owor
CQk0M0RCQkQ4MTEyRDdENDA4MDBDQTFBNUEgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNEQkJEN0YxMkQ3RDQw
ODAwQ0ExQTVBIC8qIFJlbmRlckZvcmVpZ25PYmplY3QuaCAqLzsgfTsKIAkJNDQxNTI5MkUwRTFB
RThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MTUyOTJDMEUxQUU4QTAwMEM0QTJEMCAv
KiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDQxNTI5MkYwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDQxNTI5MkQwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuY3BwICovOyB9OwogCQk0NDFCMDU1QzBDRDc3QTJEMDA3QzFGMTggLyogRE9NSFRNTEVtYmVk
RWxlbWVudFByaXZhdGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MjlBQUZCMENCODRFODgwMDc2NDdDNSAvKiBET01IVE1M
RW1iZWRFbGVtZW50UHJpdmF0ZS5oICovOyB9OwpAQCAtMTY1Nyw4ICsxNjg3LDYgQEAKIAkJODQx
OUQyQUQxMjBEOTJGQzAwMTQxRjhGIC8qIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDE5RDJBQjEyMEQ5MkZD
MDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaCAqLzsgfTsKIAkJODQxOUQyQjkx
MjBFMEM3NjAwMTQxRjhGIC8qIFNWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MTlEMkI3MTIwRTBDNzYwMDE0MUY4
RiAvKiBTVkdQYXRoU3RyaW5nQnVpbGRlci5jcHAgKi87IH07CiAJCTg0MTlEMkJBMTIwRTBDNzYw
MDE0MUY4RiAvKiBTVkdQYXRoU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQxOUQyQjgxMjBFMEM3NjAwMTQxRjhGIC8qIFNWR1Bh
dGhTdHJpbmdCdWlsZGVyLmggKi87IH07Ci0JCTg0MUZEQzI2MTE3OEM5QkUwMEY4QUM5QiAvKiBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDFGREMyNDExNzhDOUJFMDBGOEFDOUIgLyogUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwICovOyB9OwotCQk4NDFGREMyNzExNzhDOUJFMDBGOEFDOUIgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0MUZEQzI1MTE3OEM5QkUwMEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5oICovOyB9OwogCQk4NDIyNDE4MzEwN0U3N0Y0MDA3NjZBODcgLyogSlNTVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg0MjI0MTgxMTA3RTc3RjQwMDc2NkE4NyAvKiBKU1NWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuY3BwICovOyB9OwogCQk4NDIyNDE4NDEwN0U3N0Y0MDA3NjZBODcgLyogSlNTVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NDIyNDE4MjEwN0U3N0Y0MDA3NjZBODcgLyogSlNTVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmggKi87IH07CiAJCTg0MjI0MThDMTA3RTc4NkYwMDc2NkE4NyAvKiBET01TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NDIyNDE4OTEwN0U3ODZGMDA3NjZBODcgLyogRE9NU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5oICovOyB9OwpAQCAtMTcyMyw4ICsxNzUxLDYgQEAKIAkJODQ4NTIyODYxMTkwMTZBNzAwNkVE
QzdGIC8qIERPTVNWR1ZLZXJuRWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0ODUyMjgyMTE5MDE2QTcwMDZFREM3RiAvKiBET01TVkdWS2Vy
bkVsZW1lbnQubW0gKi87IH07CiAJCTg0ODUyMjhBMTE5MDE3M0MwMDZFREM3RiAvKiBTVkdWS2Vy
bkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODQ4NTIyODcxMTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVudC5jcHAgKi87IH07
CiAJCTg0ODUyMjhCMTE5MDE3M0MwMDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0ODUyMjg4MTE5MDE3M0Mw
MDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaCAqLzsgfTsKLQkJODQ5OUE1MTQxMTVGQjMzMDAw
RjU2NkUzIC8qIFJlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0OTlBNTEyMTE1RkIzMzAwMEY1NjZFMyAvKiBS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAgKi87IH07Ci0JCTg0OTlBNTE1MTE1RkIzMzAwMEY1
NjZFMyAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ5OUE1MTMxMTVGQjMzMDAwRjU2NkUzIC8qIFJlbmRl
clNWR1Jlc291cmNlTWFya2VyLmggKi87IH07CiAJCTg0OUY3Nzc2MEVGRUM2MjAwMDkwODQ5RCAv
KiBTdHJva2VTdHlsZUFwcGxpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0OUY3Nzc1MEVGRUM2MjAwMDkwODQ5RCAvKiBTdHJva2VTdHlsZUFwcGxp
ZXIuaCAqLzsgfTsKIAkJODRBODFGM0QwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjNC
MEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5jcHAgKi87IH07CiAJCTg0QTgxRjNFMEZD
N0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODRBODFGM0MwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFs
cGhhLmggKi87IH07CkBAIC0xNzMyLDggKzE3NTgsNiBAQAogCQk4NEE4MUY0MjBGQzdFMDI3MDA5
NTUzMDAgLyogU291cmNlR3JhcGhpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODRBODFGNDAwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMu
aCAqLzsgfTsKIAkJODRCNkI5NzcxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291
cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
QjZCOTc1MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAgKi87IH07
CiAJCTg0QjZCOTc4MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRCNkI5NzYxMjBG
MTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmggKi87IH07Ci0JCTg0QkRBMTZC
MTEzNThEMkEwMERCRjY0QyAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRCREExNjkxMTM1OEQyQTAw
REJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgKi87IH07Ci0JCTg0QkRBMTZD
MTEzNThEMkEwMERCRjY0QyAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QkRBMTZBMTEzNThEMkEwMERC
RjY0QyAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCAqLzsgfTsKIAkJODRDNUIyRkExMjE2
REM4MTAwODhCNTNBIC8qIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRDNUIyRjgxMjE2REM4MTAw
ODhCNTNBIC8qIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuY3BwICovOyB9OwogCQk4NEM1
QjJGQjEyMTZEQzgxMDA4OEI1M0EgLyogU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRDNUIyRjkxMjE2
REM4MTAwODhCNTNBIC8qIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaCAqLzsgfTsKIAkJ
ODRDNjc4NEMxMjE0ODE0NzAwQTkyOTAyIC8qIFNWR1BhdGhCbGVuZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QzY3ODRBMTIxNDgxNDcwMEE5
MjkwMiAvKiBTVkdQYXRoQmxlbmRlci5jcHAgKi87IH07CkBAIC0xOTg3LDEyICsyMDExLDYgQEAK
IAkJODUzQkY0REIwQUJCNkI1NTAwODY0N0JCIC8qIERPTU5vZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1M0JGNEQ5MEFCQjZCNTUwMDg2NDdCQiAv
KiBET01Ob2RlLmggKi87IH07CiAJCTg1M0JGNERDMEFCQjZCNTUwMDg2NDdCQiAvKiBET01Ob2Rl
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUzQkY0
REEwQUJCNkI1NTAwODY0N0JCIC8qIERPTU5vZGUubW0gKi87IH07CiAJCTg1M0JGNEVDMEFCQjZF
QjkwMDg2NDdCQiAvKiBET01Ob2RlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTNCRjREOTBBQkI2QjU1MDA4NjQ3QkIgLyog
RE9NTm9kZS5oICovOyB9OwotCQk4NTNDQTlENjBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg1M0NBOUNBMEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdDb250YWluZXIuY3BwICov
OyB9OwotCQk4NTNDQTlENzBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTNDQTlDQjBB
RUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggKi87IH07Ci0JCTg1M0NBOUQ4
MEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTNDQTlDQzBBRUVDNUU5MDAyMzcyREMgLyog
UmVuZGVyU1ZHSW1hZ2UuY3BwICovOyB9OwotCQk4NTNDQTlEOTBBRUVDNUU5MDAyMzcyREMgLyog
UmVuZGVyU1ZHSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg1M0NBOUNEMEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdJbWFnZS5oICovOyB9
OwotCQk4NTNDQTlFQzBBRUVDNjNDMDAyMzcyREMgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTNDQTlFQTBB
RUVDNjNDMDAyMzcyREMgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAgKi87IH07Ci0JCTg1M0NB
OUVEMEFFRUM2M0MwMDIzNzJEQyAvKiBSZW5kZXJGb3JlaWduT2JqZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTNDQTlFQjBBRUVDNjNDMDAyMzcy
REMgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5oICovOyB9OwogCQk4NTQwNzRGQzBBRDZDMjJFMDA2
MjBDNTcgLyogRE9NU1ZHTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NTQwNzRGOTBBRDZDMjJFMDA2MjBDNTcgLyogRE9NU1ZHTnVtYmVyLmgg
Ki87IH07CiAJCTg1NDA3NEZEMEFENkMyMkUwMDYyMEM1NyAvKiBET01TVkdQb2ludC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODU0MDc0RkEwQUQ2QzIy
RTAwNjIwQzU3IC8qIERPTVNWR1BvaW50LmggKi87IH07CiAJCTg1NDA3NEZFMEFENkMyMkUwMDYy
MEM1NyAvKiBET01TVkdSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NTQwNzRGQjBBRDZDMjJFMDA2MjBDNTcgLyogRE9NU1ZHUmVjdC5oICovOyB9
OwpAQCAtMzEyMCw4ICszMTM4LDYgQEAKIAkJQTYyMkE4RkYxMjJDNDRBNjAwQTc4NUIzIC8qIEdl
bmVyaWNCaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNjIyQThGOTEyMkM0NEE2MDBBNzg1QjMgLyogR2VuZXJpY0JpbmRpbmcuaCAqLzsgfTsK
IAkJQTcxODc2MEUwQjJBMTIwMTAwQTE2RUNFIC8qIERyYWdBY3Rpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE4NzYwRDBCMkExMjAxMDBBMTZF
Q0UgLyogRHJhZ0FjdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBNzE4Nzg5MDBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xsZXJN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE4
Nzg4RjBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xsZXJNYWMubW0gKi87IH07Ci0JCUE3
MzUyQzE5MEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdCbG9jay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM1MkMxNzBCMUJCODlEMDBBOTg2
RDAgLyogUmVuZGVyU1ZHQmxvY2suY3BwICovOyB9OwotCQlBNzM1MkMxQTBCMUJCODlEMDBBOTg2
RDAgLyogUmVuZGVyU1ZHQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3MzUyQzE4MEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdCbG9jay5o
ICovOyB9OwogCQlBNzVFNDk3NjEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzVF
NDk3NDEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc1RTQ5NzcxMDc1MkFD
QjAwQzlCODk2IC8qIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzVFNDk3NTEwNzUyQUNCMDBDOUI4OTYgLyog
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCAqLzsgfTsKIAkJQTc1RThCODgwRTFERTJENjAwN0Yy
NDgxIC8qIEZFQmxlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTc1RThCODAwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuY3BwICovOyB9OwpA
QCAtMzE2NSwxMCArMzE4MSw2IEBACiAJCUE3REJGOERFMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0
Q2hlY2tpbmdIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3REJGOERDMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCAq
LzsgfTsKIAkJQTdGMzM4QTMxMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGMzM4QTExMUMw
RUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuY3BwICovOyB9OwogCQlBN0YzMzhBNDExQzBF
RkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGMzM4QTIxMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0Vs
ZW1lbnQuaCAqLzsgfTsKLQkJQTgwOUYxNDcwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dy
YWRpZW50U3RvcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTgwOUYxNDUwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oICov
OyB9OwotCQlBODA5RjE0ODBCNzM3OTNCMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MDlG
MTQ2MEI3Mzc5M0EwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwICovOyB9Owot
CQlBODA5RjFBQTBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODA5RjFBODBC
NzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi87IH07Ci0JCUE4
MDlGMUFCMEI3MzdGQjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxQTkwQjcz
N0ZCNjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgKi87IH07CiAJCUE4
MEEzOEZFMEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwQTM4RkQwRTUwQ0M4MjAwQTI1RUJDIC8q
IFBhdHRlcm5DRy5jcHAgKi87IH07CiAJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi87IH07CiAJCUE4MEU2Q0U0MEExOTg5Q0EwMDdG
QjhDNSAvKiBDU1NWYWx1ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTgwRTZDQkEwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlzdC5j
cHAgKi87IH07CkBAIC0zNTUxLDggKzM1NjMsNiBAQAogCQlBODk5NDMyOTBCNDIzMzg4MDBEN0M4
MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCAq
LzsgfTsKIAkJQTg5Q0NDNTIwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5D
b21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4OUNDQzUwMEY0NEU5ODEwMEI1REExMCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5j
cHAgKi87IH07CiAJCUE4OUNDQzUzMEY0NEU5ODEwMEI1REExMCAvKiBSZXBsYWNlTm9kZVdpdGhT
cGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTg5Q0NDNTEwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5k
LmggKi87IH07Ci0JCUE4QTkwOUFDMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zv
cm1hYmxlQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEE5MDlBQTBDQkNENkI1MDAyOUI4MDcgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5oICovOyB9OwotCQlBOEE5MDlBRDBDQkNENkI1MDAyOUI4MDcgLyogUmVuZGVy
U1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE5MDlBQjBDQkNENkI1MDAyOUI4MDcgLyogUmVuZGVyU1ZH
VHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAgKi87IH07CiAJCUE4QkMwNDkyMTIxNEY2OTYwMEI1
RjEyMiAvKiBIVE1MRW50aXR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQThCQzA0OTExMjE0RjY5NjAwQjVGMTIyIC8qIEhUTUxFbnRpdHlU
YWJsZS5jcHAgKi87IH07CiAJCUE4QzIyODBFMTFENEE1OTcwMEQ1QTdEMyAvKiBEb2N1bWVudFBh
cnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OEMyMjgwRDExRDRBNTk3MDBENUE3RDMgLyogRG9jdW1lbnRQYXJzZXIuY3BwICovOyB9OwogCQlB
OEMyMjhBMTExRDU3MjJFMDBENUE3RDMgLyogRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMjI4OUYxMUQ1
NzIyRTAwRDVBN0QzIC8qIERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuaCAqLzsgfTsKQEAgLTM5
NTgsMTAgKzM5NjgsNiBAQAogCQlBOEY0NkI3QzBDQjIwQTlEMDAzQTk2NzAgLyogRE9NU1ZHTGlu
ZWFyR3JhZGllbnRFbGVtZW50LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUM5QTJGQjBBRDdFOTQyMDBGQkZGMUUgLyogRE9N
U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmggKi87IH07CiAJCUE4RjQ2QjdEMENCMjBBOUQwMDNB
OTY3MCAvKiBET01TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCBpbiBDb3B5IEdlbmVyYXRlZCBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1OUQ2Mjc5MEFEODg4
RUUwMDAxMjk5NSAvKiBET01TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCAqLzsgfTsKIAkJQThG
NDZCODEwQ0IyMEE5RDAwM0E5NjcwIC8qIERPTVNWR1N0cmluZ0xpc3QuaCBpbiBDb3B5IEdlbmVy
YXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RDc5QUQy
MEFDQTE3RUIwMEYwMkZDNSAvKiBET01TVkdTdHJpbmdMaXN0LmggKi87IH07Ci0JCUE4RjRGQjk0
MEMxNjlFN0IwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEY0RkI5MzBDMTY5RTdCMDAyQUZFRDUgLyog
U1ZHUmVuZGVyU3VwcG9ydC5oICovOyB9OwotCQlBOEY0RkI5NjBDMTY5RTg1MDAyQUZFRDUgLyog
U1ZHUmVuZGVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEY0RkI5NTBDMTY5RTg1MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5j
cHAgKi87IH07Ci0JCUE4RjVDMEI4MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5kZXJTVkdNb2RlbE9i
amVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThG
NUMwQjYwRjkyODVBQzAwOThFMDZCIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggKi87IH07Ci0J
CUE4RjVDMEI5MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEY1QzBCNzBGOTI4
NUFDMDA5OEUwNkIgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwICovOyB9OwogCQlBOEZBNkU1
RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBOEZB
NkU1RTBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0
dGVybi5jcHAgKi87IH07CiAJCUE5QzZFNEUzMEQ3NDVFMDUwMDY0NDJFOSAvKiBET01NaW1lVHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2
RTRFMTBENzQ1RTA1MDA2NDQyRTkgLyogRE9NTWltZVR5cGUuY3BwICovOyB9OwpAQCAtMzk5Miw4
ICszOTk4LDYgQEAKIAkJQTlEMjQ4MDkwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGVB
cnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlE
MjQ4MDUwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGVBcnJheS5oICovOyB9OwogCQlB
QTIxRUNDQTBBQkYwRkJBMDAyQjgzNEMgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTA5NzhFRDBBQkFBNkUx
MDA4NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAgKi87IH07CiAJCUFBMjFFQ0NEMEFC
RjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTA5NzhFRTBBQkFBNkUxMDA4NzQ0ODAgLyog
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUFBMzFCNUI0MEMxREZEMTAwMEFFNzA4MyAvKiBSZW5kZXJTVkdSb290
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBMzFC
NUIyMEMxREZEMTAwMEFFNzA4MyAvKiBSZW5kZXJTVkdSb290LmNwcCAqLzsgfTsKLQkJQUEzMUI1
QjUwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRlclNWR1Jvb3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBMzFCNUIzMEMxREZEMTAwMEFFNzA4MyAvKiBS
ZW5kZXJTVkdSb290LmggKi87IH07CiAJCUFBNEMzQTc2MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHls
ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUE0QzNBNzQwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5jcHAgKi87IH07CiAJ
CUFBNEMzQTc3MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBNEMzQTc1MEIyQjE2NzkwMDIzMzRB
MiAvKiBTdHlsZUVsZW1lbnQuaCAqLzsgfTsKIAkJQUIwMTRERTMwRTY4OUE0MzAwRTEwNDQ1IC8q
IFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBQjAxNERFMTBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcCAqLzsgfTsKQEAgLTQ0MzksMTQgKzQ0NDMsMTAgQEAKIAkJQjJD
QjkyNjIwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0I5MjVFMEI1QkRBMDIw
MDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2UubW0gKi87IH07CiAJCUIyQ0I5MjYzMEI1
QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkNCOTI1RjBCNUJEQTAyMDA5QkFB
NzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5oICovOyB9OwogCQlCMkNCOTI2NDBCNUJE
QTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0I5MjYwMEI1QkRBMDIwMDlCQUE3
OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tICovOyB9OwotCQlCMkNDRUM0NzBDNkNB
OUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQ0VDNDUwQzZDQTlGMTAwNkE1
NDI0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCAqLzsgfTsKLQkJQjJDQ0VDNDgw
QzZDQTlGMTAwNkE1NDI0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkNDRUM0NjBDNkNBOUYxMDA2
QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCAqLzsgfTsKIAkJQjJFMjdDOUYw
QjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyogRmxv
YXRQb2ludDNELmNwcCAqLzsgfTsKIAkJQjJFMjdDQTAwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0
UG9pbnQzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjJFMjdDOUUwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyRTRFQzk3MEQwMEMyMkIwMDQz
MjY0MyAvKiBTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJFNEVDOTQwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5j
cHAgKi87IH07CiAJCUIyRTRFQzk4MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRTRFQzk1MEQw
MEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCAqLzsgfTsKLQkJQjJFQkRDOUMwQUY3N0Uz
NDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFQkRDOUEwQUY3N0UzNDAwQUU0QTY4IC8qIFNW
R1JlbmRlclRyZWVBc1RleHQuY3BwICovOyB9OwotCQlCMkVCREM5RDBBRjc3RTM0MDBBRTRBNjgg
LyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJFQkRDOUIwQUY3N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVB
c1RleHQuaCAqLzsgfTsKIAkJQjJFRDk3NzEwQjFGNTVDRTAwMjU3RDBGIC8qIEdyYXBoaWNzQ29u
dGV4dENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyRUQ5NzcwMEIxRjU1Q0UwMDI1N0QwRiAvKiBHcmFwaGljc0NvbnRleHRDRy5jcHAgKi87IH07
CiAJCUIyRjM0RkU2MEU4MkY4MTQwMEY2MjdDRCAvKiBETlMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRjM0RkU1MEU4MkY4MTQwMEY2MjdDRCAvKiBE
TlMuaCAqLzsgfTsKIAkJQjJGMzRGRTkwRTgyRjgyNzAwRjYyN0NEIC8qIEROU0NGTmV0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRjM0RkU4MEU4
MkY4MjcwMEY2MjdDRCAvKiBETlNDRk5ldC5jcHAgKi87IH07CkBAIC02MzQ3LDcgKzYzNDcsNiBA
QAogCQkwODA0QkY2QzBFRTA5QzNCMDAwNkMwMDAgLyogV01MRG9FbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTERvRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MDRCRjZEMEVFMDlDM0IwMDA2QzAwMCAvKiBXTUxEb0Vs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRG9FbGVtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MDZFNTc5MTI4OTMwNDUwMDdDRUQzMiAv
KiBTVkdNYXRyaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTWF0cml4
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4MDgyMzcyMTE3OTg3QzEwMDI0MURF
OCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwODBBRUM3RDBFRDg3MDhBMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MSW50cmluc2lj
RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODBBRUM3RTBFRDg3MDhC
MDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV01MSW50cmluc2ljRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDgwQUVDN0YwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxJbnRyaW5zaWNFdmVu
dEhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjM4MSwxMCArNjM4
MCw2IEBACiAJCTA4MjNEMTU4MTI3QUQ2QUMwMDBFQkM5NSAvKiBTVkdBbmltYXRlZEludGVnZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRJbnRlZ2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MjUwOTM4MTI4QkQ0RDgwMEUyRUQ4RSAv
KiBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA4MkRFNDJDMTI5MjYyMTYwMEQ5MjNERiAvKiBTVkdQYXRoU2VnV2l0aENvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFNlZ1dpdGhDb250ZXh0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4MzE5MkE3MTEyQjQzMDUwMDgzQzNC
OSAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJTVkdSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODMx
OTJBODExMkI0MzA1MDA4M0MzQjkgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODMxOTJBOTExMkI0MzA1MDA4M0Mz
QjkgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMDgzODVGRjUxMEYwMTg2MDAwQkZFMDdCIC8qIFNWR01hcmtlckRhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTWFya2VyRGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTQwRjAx
QTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjM5NiwxMCArNjM5MSw2IEBACiAJ
CTA4NENFNUM4MEYyN0RBREMwMEU2MjQwRSAvKiBXTUxPcHRHcm91cEVsZW1lbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MT3B0R3JvdXBFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NENFNUM5MEYyN0RBREMwMEU2MjQwRSAvKiBXTUxPcHRp
b25FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTE9w
dGlvbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODRDRTVDQTBG
MjdEQURDMDBFNjI0MEUgLyogV01MT3B0aW9uRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXTUxPcHRpb25FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTA4NEQwRTM4MTFGNTgxNjEwMDA4MUUxQSAvKiBTVkdSZXNvdXJjZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg0RDBFMzkxMUY1ODE2MTAwMDgxRTFBIC8qIFNWR1Jl
c291cmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdSZXNvdXJjZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg0RDBFM0ExMUY1ODE2MTAwMDgxRTFB
IC8qIFNWR1Jlc291cmNlc0NhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNWR1Jlc291cmNlc0NhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMDg0RDBFM0IxMUY1ODE2MTAwMDgxRTFBIC8qIFNWR1Jlc291cmNlc0NhY2hlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Jlc291cmNlc0NhY2hlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NERCNTlBMTI4MDA4Q0MwMDJBNkQ2NCAvKiBTVkdBbmlt
YXRlZFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRl
ZFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODREQkE5RDBFRDM5RDM1
MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdNTFZhcmlhYmxlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA4NERCQTlFMEVEMzlEMzYwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV01MVmFyaWFibGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NDIyLDMwICs2NDEzLDIyIEBACiAJCTA4NTRCMDExMTI1NUU0RTYwMEI5Q0RE
MCAvKiBTVkdSb290SW5saW5lQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR1Jvb3RJbmxpbmVCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1NEIw
MTIxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0UXVlcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwODU0QjAxMzEyNTVFNEU2MDBCOUNERDAgLyogU1ZHVGV4dFF1ZXJ5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RleHRRdWVyeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwODU2M0JCMjExNzg2MTc3MDAxMkI1NzggLyogUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTA4NTYzQkIzMTE3ODYxNzcwMDEyQjU3OCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4NTYzQkNGMTE3ODY1RjUwMDEy
QjU3OCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA4NTc5NzA4MTI3ODM5NEMwMEE4RUM1RiAvKiBTVkdBbmltYXRlZEJvb2xlYW4uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRCb29sZWFuLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NTkxQUE0MEYwODVDNEUwMDlCQUNCMSAvKiBJ
bnB1dEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXRFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NUExNTkyMTI4OUE4REQwMDI3
MTBFMyAvKiBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVy
dHlUZWFyT2ZmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NUFGREM2MEYyOTc3
MzUwMDYxRjJCMyAvKiBXTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1QUZEQzcwRjI5NzczNTAwNjFGMkIzIC8qIFdNTEZvcm1D
b250cm9sRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg1QjA1QzAx
MUZBRTE2QzAwNEQ2NUY2IC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg1QjA1QzExMUZBRTE2QzAwNEQ2NUY2IC8q
IFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA4NUI5MkI4MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybURhdGFCdWlsZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1QjkyQjkwRUZERTczRDAwRTYxMjNDIC8qIEZv
cm1EYXRhQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtRGF0
YUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2NDFENDUxMjE0MkY3
RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2NDFENDYxMjE0MkY3RDAwOERF
OUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NjVDQ0U0MEVEREY1MUIwMERGOUVDMyAvKiBXTUxOb29w
RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxOb29w
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NjVDQ0U1MEVEREY1
MUIwMERGOUVDMyAvKiBXTUxOb29wRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXTUxOb29wRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
ODZBNDAwNTExRjZENkI3MDAyQ0VDNTMgLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODcwMEJFNjBGMDg2
QzUzMDA5MTk0MTkgLyogSW5wdXRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IElucHV0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA4NzI4MTUxMEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbkVsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODcyODE1MjBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9u
RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25FbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NzI4MTUzMEYyNkI5QjYwMEFGQzU5
NiAvKiBPcHRpb25Hcm91cEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gT3B0aW9uR3JvdXBFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDg3MjgxNTQwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkdyb3VwRWxlbWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25Hcm91cEVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg3MzVGQjYxMEU5MTIzMjAwNkQ2RkFEIC8qIFNW
R01hcmtlckxheW91dEluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU1ZHTWFya2VyTGF5b3V0SW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTA4NzM1RkI3MTBFOTEyMzIwMDZENkZBRCAvKiBTVkdNYXJrZXJMYXlvdXRJbmZvLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR01hcmtlckxheW91dEluZm8uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg3NDRCQTkwRURCN0Q4NjAwNEM5RTYzIC8qIFdNTE9u
RXZlbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdN
TE9uRXZlbnRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg3NDRC
QUQwRURCN0Q5MjAwNEM5RTYzIC8qIFdNTE9uRXZlbnRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdNTE9uRXZlbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA4N0I4NDk1MTI3MkNFQzcwMEExNDQxNyAvKiBTVkdBbmltYXRlZEFuZ2xl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkQW5nbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0OTMsMjAgKzY0NzYsMTAgQEAKIAkJMDhB
NDhBNkQwRTg2Q0Y2RDAwRTIyNUREIC8qIEpTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHRWxlbWVudEluc3RhbmNl
Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhCMzVCMTIxMjdCNkE3
QzAwNTMxNEREIC8qIFNWR0FuaW1hdGVkTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR0FuaW1hdGVkTnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA4QjM1QjE2MTI3QjZBODgwMDUzMTRERCAvKiBTVkdBbmltYXRlZE51bWJlckxpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWROdW1iZXJMaXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4QzM0QUYxMTE3OUMwNTYwMDJENzQ1NiAv
KiBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwOEMzNEFGMjExNzlDMDU3MDAyRDc0NTYgLyogUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4QzM0
QUYzMTE3OUMwNTcwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNl
TGluZWFyR3JhZGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwOEMzNEFG
NDExNzlDMDU3MDAyRDc0NTYgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdy
YWRpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4QzM0QUZCMTE3OUMwNzIw
MDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwOEMzNEFGQzExNzlDMDcyMDAy
RDc0NTYgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4QzQ2QjY3MTIxMkYxNUQwMDExQUY0MCAvKiBT
VkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNWR0ltYWdlQnVmZmVyVG9vbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwOEM0NkI2ODEyMTJGMTVEMDAxMUFGNDAgLyogU1ZHSW1hZ2VCdWZmZXJUb29scy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUJ1ZmZlclRvb2xzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4QzRDNTE0MEVGMTlBNDAwMEU0ODQwRiAvKiBXTUxJ
bWFnZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01M
SW1hZ2VFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhDNEM1MTUw
RUYxOUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXTUxJbWFnZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDhDNEM1MTYwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdlTG9hZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEltYWdlTG9hZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhDNEM1MTcwRUYxOUE0MDAwRTQ4NDBGIC8qIFdN
TEltYWdlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEltYWdl
TG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4QzZBN0E5MTE3REZCQUIw
MEZFQTFBMiAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDhDNkE3QUExMTdERkJBQjAwRkVBMUEyIC8q
IFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDhDNzEzNkQxMjg5NTZBMzAwMUIxMDdFIC8qIFNWR1RyYW5zZm9ybUxpc3RQ
cm9wZXJ0eVRlYXJPZmYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVHJh
bnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwOEM4NTlCRjEyNzQ1NzUzMDBBNTcyOEQgLyogU1ZHQW5pbWF0ZWRSZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkUmVjdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwOEM5MjUxNzBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZpbHRlckVmZmVjdC5j
cHA7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NTE1LDEwICs2NDg4LDYgQEAKIAkJMDhDRDYxQjgwRUQzOTI5QzAwMkRERjUx
IC8qIFdNTFRhc2tFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdNTFRhc2tFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhD
RDYxQjkwRUQzOTI5QzAwMkRERjUxIC8qIFdNTFRhc2tFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFRhc2tFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA4RDQ2Q0UyMTI3QUQ1RkMwMDg5Njk0QiAvKiBTVkdBbmltYXRlZEVudW1lcmF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkRW51bWVy
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDhEQUI5QjgxMTAzRDlBNTAw
M0U3QUJBIC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFp
bmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDhEQUI5QjkxMTAzRDlBNTAw
M0U3QUJBIC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4REFCOUMwMTEwM0Q5QzEwMDNFN0FCQSAv
KiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMDhEQUI5QzExMTAzRDlDMTAwM0U3QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdTaGFkb3dUcmVlRWxlbWVu
dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhFMTkyNTEwRURFMEMzOTAwODdC
NzgwIC8qIFdNTEVycm9ySGFuZGxpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV01MRXJyb3JIYW5kbGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA4RTE5MjUyMEVERTBDM0EwMDg3Qjc4MCAvKiBXTUxFcnJvckhhbmRsaW5nLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEVycm9ySGFuZGxpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhFNEZFNDUwRTJCRDQxNDAwRjRDQUUwIC8qIEpTU1ZHTGVu
Z3RoQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZH
TGVuZ3RoQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY2NjgsOCAr
NjYzNyw2IEBACiAJCTE5MjEzMjcxMTFDMEU2QkIwMDQ1NjIzOCAvKiBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE5MjEzMjcyMTFDMEU2QkIwMDQ1NjIzOCAvKiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxOTIxMzI3MzExQzBFNkJCMDA0
NTYyMzggLyogU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMTk0MjNCNEUxMjM0RTg2QjAwRDFFRTlFIC8qIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyUHJpbWl0aXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMTk0MjNCNEYxMjM0RTg2QjAwRDFFRTlFIC8qIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyUHJpbWl0aXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE5QkZGNjQ2MTFDMEYyQUMwMEI4QzA0RCAvKiBET01TVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxOUJGRjY0NzEx
QzBGMkFDMDBCOEMwNEQgLyogRE9NU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTlCRkY2NDgxMUMwRjJB
QzAwQjhDMDREIC8qIERPTVNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50SW50ZXJuYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzMwMyw2ICs3Mjcw
LDY5IEBACiAJCTQxRjFEMjFEMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURh
dGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0Q2FjaGVkRnJhbWVE
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjFEMjFFMEVGMzVDMkEwMERB
ODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDFGNTg0QzYxMDQ2NTJDQjAwOUNBQTY0IC8qIEpTTWVzc2FnZVBvcnRD
dXN0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZXNzYWdlUG9ydEN1
c3RvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0M0RCQkQwMjEyRDdDNjg3MDBD
QTFBNUEgLyogUmVuZGVyU1ZHQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyU1ZHQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0M0RCQkQwMzEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHQmxvY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHQmxvY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDNEQkJEMDQxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR0NvbnRh
aW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdD
b250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0M0RCQkQwNTEyRDdD
Njg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclNWR0NvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0M0RCQkQwNjEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0dyYWRp
ZW50U3RvcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzREJCRDA3MTJEN0M2
ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQzREJCRDA4MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdIaWRkZW5D
b250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
U1ZHSGlkZGVuQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNE
QkJEMDkxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEMEExMkQ3QzY4NzAwQ0ExQTVBIC8q
IFJlbmRlclNWR0ltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlclNWR0ltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJE
MEIxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR0ltYWdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0ltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQzREJCRDBDMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdNb2RlbE9i
amVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzREJCRDBEMTJEN0M2ODcw
MENBMUE1QSAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJTVkdNb2RlbE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0M0RCQkQwRTEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0M0RCQkQwRjEyRDdDNjg3MDBDQTFB
NUEgLyogUmVuZGVyU1ZHUmVzb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyU1ZHUmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNE
QkJEMTAxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0M0RCQkQxMTEyRDdDNjg3MDBD
QTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0M0RCQkQxMjEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0M0RCQkQxMzEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEMTQxMkQ3QzY4NzAw
Q0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEMTUxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzREJC
RDE2MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzREJC
RDE3MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0M0RCQkQxODEyRDdD
Njg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEMTkxMkQ3QzY4NzAwQ0ExQTVBIC8q
IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0M0RCQkQxQTEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDNEQkJEMUIxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFy
R3JhZGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUmVz
b3VyY2VMaW5lYXJHcmFkaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0M0RC
QkQxQzEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0M0RCQkQxRDEyRDdDNjg3MDBDQTFB
NUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDNEQkJEMUUxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jl
c291cmNlTWFza2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEMUYx
MkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzREJCRDIwMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDNEQkJEMjExMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEMjIxMkQ3QzY4NzAw
Q0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzREJCRDIzMTJEN0M2ODcwMENB
MUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEMjQxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0M0RCQkQyNTEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
M0RCQkQyNjEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUm9vdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSb290LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEMjcxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jv
b3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUm9vdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0M0RCQkQyODEyRDdDNjg3MDBDQTFBNUEgLyog
UmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0M0RCQkQyOTEyRDdDNjg3MDBDQTFBNUEgLyog
UmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEMkExMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQzREJCRDJCMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdU
cmFuc2Zvcm1hYmxlQ29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDNEQkJEMkMxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNW
R1ZpZXdwb3J0Q29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNE
QkJEMkQxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzREJCRDJFMTJEN0M2ODcwMENBMUE1
QSAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNWR0ltYWdlQnVmZmVyVG9vbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0M0RCQkQyRjEyRDdDNjg3MDBDQTFBNUEgLyogU1ZHSW1hZ2VCdWZmZXJUb29scy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUJ1ZmZlclRvb2xzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzREJCRDMwMTJEN0M2ODcwMENBMUE1QSAv
KiBTVkdNYXJrZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR01h
cmtlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEMzExMkQ3QzY4
NzAwQ0ExQTVBIC8qIFNWR01hcmtlckxheW91dEluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU1ZHTWFya2VyTGF5b3V0SW5mby5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQzREJCRDMyMTJEN0M2ODcwMENBMUE1QSAvKiBTVkdNYXJrZXJMYXlv
dXRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR01hcmtlckxheW91
dEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEMzMxMkQ3QzY4NzAw
Q0ExQTVBIC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHUmVuZGVyU3VwcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQzREJCRDM0MTJEN0M2ODcwMENBMUE1QSAvKiBTVkdSZW5kZXJTdXBwb3J0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1JlbmRlclN1cHBvcnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEMzUxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1Jl
bmRlclRyZWVBc1RleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQz
REJCRDM2MTJEN0M2ODcwMENBMUE1QSAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1JlbmRlclRyZWVBc1RleHQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEMzcxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1Jlc291
cmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSZXNvdXJj
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0M0RCQkQzODEyRDdDNjg3MDBD
QTFBNUEgLyogU1ZHUmVzb3VyY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR1Jlc291cmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0M0RCQkQzOTEy
RDdDNjg3MDBDQTFBNUEgLyogU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0M0RCQkQzQTEyRDdDNjg3MDBDQTFBNUEgLyogU1ZHUmVzb3VyY2Vz
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVzb3VyY2VzQ2Fj
aGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEM0IxMkQ3QzY4NzAwQ0Ex
QTVBIC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEM0MxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1Jlc291cmNl
c0N5Y2xlU29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Jlc291
cmNlc0N5Y2xlU29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzREJCRDNE
MTJEN0M2ODcwMENBMUE1QSAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNEQkJEM0UxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNW
R1NoYWRvd1RyZWVFbGVtZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdTaGFkb3dUcmVlRWxlbWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDNE
QkJEN0UxMkQ3RDQwODAwQ0ExQTVBIC8qIFJlbmRlckZvcmVpZ25PYmplY3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyRm9yZWlnbk9iamVjdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzREJCRDdGMTJEN0Q0MDgwMENBMUE1QSAvKiBS
ZW5kZXJGb3JlaWduT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlckZvcmVpZ25PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5
MkMwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyRDBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDQyOUFBRkIwQ0I4NEU4ODAwNzY0N0M1IC8qIERPTUhUTUxFbWJlZEVsZW1lbnRQcml2YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01IVE1MRW1iZWRFbGVtZW50
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzkyOSw4ICs3OTU5LDYg
QEAKIAkJNkVCRjBFNTMxMkE4OTI5ODAwREIxNzA5IC8qIFdlYkdMRXh0ZW5zaW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMRXh0ZW5zaW9uLmg7IHBhdGggPSBjYW52
YXMvV2ViR0xFeHRlbnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCRjBF
NzQxMkE5ODY4ODAwREIxNzA5IC8qIEpTT0VTVGV4dHVyZUZsb2F0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT0VTVGV4dHVyZUZsb2F0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCRjBFNzUxMkE5ODY4ODAwREIxNzA5IC8qIEpTT0VTVGV4
dHVyZUZsb2F0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT0VTVGV4dHVy
ZUZsb2F0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzRjFENUJFMTJENTMzNTYw
MDgzMkJFQyAvKiBKU1dlYktpdExvc2VDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEpTV2ViS2l0TG9zZUNvbnRleHQuY3BwOyBwYXRoID0gSlNXZWJLaXRM
b3NlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzRjFENUJGMTJE
NTMzNTYwMDgzMkJFQyAvKiBKU1dlYktpdExvc2VDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEpTV2ViS2l0TG9zZUNvbnRleHQuaDsgcGF0aCA9IEpTV2ViS2l0TG9z
ZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVFOEE3NzAxMEY4MDNG
MzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjYyNkUwMTBFRjAyMkZFMDBBMDdFMjAgLyogRm9udEZhc3RQYXRoLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRGYXN0UGF0aC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC04MDY1LDggKzgwOTMsNiBAQAogCQk4NDE5RDJBQjEyMEQ5MkZD
MDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODQxOUQyQjcxMjBFMEM3NjAwMTQxRjhGIC8qIFNWR1BhdGhTdHJpbmdC
dWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhT
dHJpbmdCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQxOUQyQjgx
MjBFMEM3NjAwMTQxRjhGIC8qIFNWR1BhdGhTdHJpbmdCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTg0MUZEQzI0MTE3OEM5QkUwMEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0
MUZEQzI1MTE3OEM5QkUwMEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDIyNDE4MTEwN0U3N0Y0MDA3NjZBODcgLyog
SlNTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTg0MjI0MTgyMTA3RTc3RjQwMDc2NkE4NyAvKiBKU1NWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdGRU1vcnBo
b2xvZ3lFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MjI0MTg5MTA3
RTc4NkYwMDc2NkE4NyAvKiBET01TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxMzMsOCArODE1OSw2IEBACiAJCTg0ODUyMjg3MTE5
MDE3M0MwMDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU1ZHVktlcm5FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQ4NTIyODgxMTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdWS2VybkVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ4NTIyODkxMTkwMTczQzAwNkVEQzdGIC8qIFNW
R1ZLZXJuRWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHVktlcm5FbGVtZW50
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ5OUE1MTIxMTVGQjMzMDAwRjU2
NkUzIC8qIFJlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJODQ5OUE1MTMxMTVGQjMzMDAwRjU2NkUzIC8qIFJlbmRlclNWR1Jl
c291cmNlTWFya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNW
R1Jlc291cmNlTWFya2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0OUY3Nzc1
MEVGRUM2MjAwMDkwODQ5RCAvKiBTdHJva2VTdHlsZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3Ryb2tlU3R5bGVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTg0QTgxRjNCMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTb3VyY2VBbHBoYS5jcHA7IHBh
dGggPSBmaWx0ZXJzL1NvdXJjZUFscGhhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODRBODFGM0MwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNvdXJjZUFscGhhLmg7IHBhdGggPSBmaWx0ZXJzL1NvdXJj
ZUFscGhhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTQ1LDggKzgxNjksNiBA
QAogCQk4NEIyQjI0RjA1NkJGMTVGMDBEMkI3NzEgLyogU1NMS2V5R2VuZXJhdG9yTWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
U1NMS2V5R2VuZXJhdG9yTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJODRCNkI5NzUxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1Bh
dGhTZWdMaXN0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR1BhdGhTZWdMaXN0U291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTZWdMaXN0U291cmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0QkRBMTY5MTEzNThEMkEwMERCRjY0QyAvKiBSZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJODRCREExNkExMTM1OEQyQTAwREJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xp
cHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODRDNUIyRjgxMjE2REM4
MTAwODhCNTNBIC8qIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0QzVCMkY5MTIxNkRDODEwMDg4QjUz
QSAvKiBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODRDNjc4NEExMjE0ODE0NzAwQTkyOTAyIC8qIFNWR1BhdGhCbGVu
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhCbGVu
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgzOTUsMTIgKzg0MTcsNiBA
QAogCQk4NTM4RjA4NDBBRDcyQ0I2MDA2QTgxRDEgLyogRE9NUmFuZ2VzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVJhbmdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NTNCRjREOTBBQkI2QjU1MDA4NjQ3QkIgLyogRE9NTm9kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NTNCRjREQTBBQkI2QjU1MDA4NjQ3QkIgLyogRE9NTm9kZS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01Ob2RlLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk4NTNDQTlDQTBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHQ29u
dGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJT
VkdDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NTNDQTlDQjBB
RUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdDb250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJODUzQ0E5Q0MwQUVFQzVFOTAwMjM3MkRDIC8qIFJlbmRlclNWR0ltYWdlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdJbWFnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg1M0NBOUNEMEFFRUM1RTkwMDIzNzJE
QyAvKiBSZW5kZXJTVkdJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyU1ZHSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODUzQ0E5RUEw
QUVFQzYzQzAwMjM3MkRDIC8qIFJlbmRlckZvcmVpZ25PYmplY3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckZvcmVpZ25PYmplY3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk4NTNDQTlFQjBBRUVDNjNDMDAyMzcyREMgLyogUmVuZGVy
Rm9yZWlnbk9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVy
Rm9yZWlnbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTQwNzRGOTBB
RDZDMjJFMDA2MjBDNTcgLyogRE9NU1ZHTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01TVkdOdW1iZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODU0MDc0RkEwQUQ2QzIyRTAwNjIwQzU3IC8qIERPTVNWR1BvaW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdQb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NTQwNzRGQjBBRDZDMjJFMDA2MjBDNTcgLyogRE9NU1ZHUmVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtOTMwNCw2ICs5MzIwLDggQEAKIAkJOTNGMUQ1QjcxMkQ1MzJDNDAwODMy
QkVDIC8qIFdlYktpdExvc2VDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdlYktpdExvc2VDb250ZXh0LmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJLaXRMb3Nl
Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjFENUI4MTJENTMy
QzQwMDgzMkJFQyAvKiBXZWJLaXRMb3NlQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJLaXRMb3NlQ29udGV4dC5oOyBwYXRoID0gY2FudmFzL1dlYktpdExvc2VD
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjFENUI5MTJENTMyQzQw
MDgzMkJFQyAvKiBXZWJLaXRMb3NlQ29udGV4dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0g
V2ViS2l0TG9zZUNvbnRleHQuaWRsOyBwYXRoID0gY2FudmFzL1dlYktpdExvc2VDb250ZXh0Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNGMUQ1QkUxMkQ1MzM1NjAwODMyQkVD
IC8qIEpTV2ViS2l0TG9zZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJLaXRMb3NlQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTkzRjFENUJGMTJENTMzNTYwMDgzMkJFQyAvKiBKU1dlYktpdExvc2VDb250ZXh0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViS2l0TG9zZUNvbnRleHQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGNkYxRUExMjdGNzBCMTAwNTVDQjA2IC8q
IFdlYkdMQ29udGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFdlYkdMQ29udGV4dEV2ZW50LmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTENvbnRleHRFdmVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjZGMUVCMTI3RjcwQjEwMDU1
Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXZWJHTENvbnRleHRFdmVudC5oOyBwYXRoID0gY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjZGMUVDMTI3RjcwQjEwMDU1Q0Iw
NiAvKiBXZWJHTENvbnRleHRFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xD
b250ZXh0RXZlbnQuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk0NzMsOCArOTQ5MSw2IEBACiAJCUE3MTg3NjBE
MEIyQTEyMDEwMEExNkVDRSAvKiBEcmFnQWN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEcmFnQWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzE4Nzg4RjBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnQ29udHJvbGxlck1hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxQTcwQzkxMUFGQjAyMDAwOTg5RDZEIC8qIEhU
TUxNZXRlckVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxNZXRlckVsZW1l
bnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzM1MkMxNzBCMUJCODlEMDBB
OTg2RDAgLyogUmVuZGVyU1ZHQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlclNWR0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQTczNTJDMTgwQjFCQjg5RDAwQTk4NkQwIC8qIFJlbmRlclNWR0Jsb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdCbG9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzVFNDk3NDEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzVFNDk3NTEwNzUy
QUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NUU4QjgwMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUJsZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZFQmxlbmQuY3BwOyBw
YXRoID0gZmlsdGVycy9GRUJsZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTk1MjAsMTAgKzk1MzYsNiBAQAogCQlBN0RCRjhEQzEyNzY5MTlDMDA2QjYwMDggLyogVGV4dENo
ZWNraW5nSGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDaGVj
a2luZ0hlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0YzMzhBMTExQzBF
RkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaGFkb3dFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdGMzM4QTIxMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhZG93RWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBODA5RjE0NTBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3Jh
ZGllbnRTdG9wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0dy
YWRpZW50U3RvcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBODA5RjE0NjBCNzM3
OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4MDlGMUE4MEI3MzdGQjYwMDJFNEQ3RiAvKiBSZW5kZXJT
VkdIaWRkZW5Db250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4
MDlGMUE5MEI3MzdGQjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwQTM4RkQwRTUwQ0M4MjAw
QTI1RUJDIC8qIFBhdHRlcm5DRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQYXR0ZXJuQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBENjcw
NzBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwRTZDQkEwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ1NTVmFsdWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTk3NzIsOCArOTc4NCw2IEBACiAJCUE4OTk0MzI3MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRt
YXBJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaXRtYXBJ
bWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OUNDQzUwMEY0NEU5ODEw
MEI1REExMCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OUNDQzUxMEY0NEU5ODEwMEI1REExMCAvKiBS
ZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlBOEE5MDlBQTBDQkNENkI1MDAyOUI4MDcgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdU
cmFuc2Zvcm1hYmxlQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4
QTkwOUFCMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1RyYW5z
Zm9ybWFibGVDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEJD
MDQ5MTEyMTRGNjk2MDBCNUYxMjIgLyogSFRNTEVudGl0eVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxFbnRpdHlUYWJsZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4QzIyODBEMTFENEE1OTcwMEQ1QTdEMyAvKiBEb2N1bWVudFBh
cnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudFBh
cnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QzIyODlGMTFENTcyMkUw
MEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDU1LDEwICsxMDA2NSw2IEBACiAJCUE4RUE4MDA0MEExOTUx
NkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTdHlsZVNoZWV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4RUE4MDA1
MEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTdHlsZVNoZWV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQThFQTgwMDYwQTE5NTE2RTAwQThFRjVGIC8qIE1lZGlhTGlzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE4RjRGQjkzMEMxNjlFN0IwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1JlbmRlclN1cHBvcnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThGNEZCOTUwQzE2OUU4NTAwMkFGRUQ1IC8qIFNW
R1JlbmRlclN1cHBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U1ZHUmVuZGVyU3VwcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4RjVD
MEI2MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdNb2RlbE9iamVjdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBOEY1QzBCNzBGOTI4NUFDMDA5OEUwNkIgLyogUmVuZGVyU1ZH
TW9kZWxPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEZB
NkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQYXR0ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4RkE2
RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBOUM2RTRFMTBENzQ1RTA1MDA2NDQyRTkgLyogRE9NTWltZVR5cGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTU1pbWVUeXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDk0LDggKzEwMTAwLDYgQEAKIAkJQTlEMjQ4MDUwRDc1N0U3
RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGVBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNET01NaW1lVHlwZUFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUFBMDk3OEVEMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDdXJzb3JJbWFnZVZh
bHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUEwOTc4RUUwQUJBQTZFMTAw
ODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENTU0N1cnNvckltYWdlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQUEzMUI1QjIwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRlclNWR1Jvb3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jvb3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQTMxQjVCMzBDMURGRDEwMDBBRTcwODMgLyogUmVu
ZGVyU1ZHUm9vdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZH
Um9vdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTRDM0E3NDBCMkIxNjc5MDAy
MzM0QTIgLyogU3R5bGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTdHlsZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
QTRDM0E3NTBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUIwMTRERTEwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA2ODYs
MTUgKzEwNjkwLDExIEBACiAJCUIyQ0I5MjVFMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVt
ZW50SW5zdGFuY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RE9NU1ZHRWxlbWVudEluc3RhbmNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MkNCOTI1RjBCNUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkNCOTI2MDBCNUJEQTAyMDA5QkFB
NzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCMkNDRUM0NTBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQjJDQ0VDNDYwQzZDQTlGMTAwNkE1NDI0IC8qIFJlbmRlclNWR1ZpZXdwb3J0
Q29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdW
aWV3cG9ydENvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkUyN0M5
RDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFBvaW50M0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkUyN0M5RTBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdFBvaW50M0QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJFNEVDOTQwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21F
dmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHWm9vbUV2
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJFNEVDOTUwRDAwQzIyQjAw
NDMyNjQzIC8qIFNWR1pvb21FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHWm9vbUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTRFQzk2
MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBTVkdab29tRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkVC
REM5QTBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyRUJEQzlCMEFGNzdFMzQwMEFFNEE2OCAvKiBT
VkdSZW5kZXJUcmVlQXNUZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdSZW5kZXJUcmVlQXNUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRUQ5
NzcwMEIxRjU1Q0UwMDI1N0QwRiAvKiBHcmFwaGljc0NvbnRleHRDRy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0Q0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMkYzNEZFNTBFODJGODE0MDBGNjI3Q0QgLyogRE5TLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEROUy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMkYzNEZFODBFODJGODI3MDBGNjI3Q0QgLyogRE5TQ0ZOZXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE5TQ0ZOZXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIzOTIsNiArMTIzOTIsNjkgQEAKIAkJMDg4QzJGNzQx
MjM5MDA4MDAwM0Q2NUNFIC8qIHN2ZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJNDNEQkJEN0UxMkQ3RDQwODAwQ0ExQTVBIC8qIFJlbmRlckZvcmVpZ25P
YmplY3QuY3BwICovLAorCQkJCTQzREJCRDdGMTJEN0Q0MDgwMENBMUE1QSAvKiBSZW5kZXJGb3Jl
aWduT2JqZWN0LmggKi8sCisJCQkJNDNEQkJEMDIxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNW
R0Jsb2NrLmNwcCAqLywKKwkJCQk0M0RCQkQwMzEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZH
QmxvY2suaCAqLywKKwkJCQk0M0RCQkQwNDEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHQ29u
dGFpbmVyLmNwcCAqLywKKwkJCQk0M0RCQkQwNTEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZH
Q29udGFpbmVyLmggKi8sCisJCQkJNDNEQkJEMDYxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNW
R0dyYWRpZW50U3RvcC5jcHAgKi8sCisJCQkJNDNEQkJEMDcxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJl
bmRlclNWR0dyYWRpZW50U3RvcC5oICovLAorCQkJCTQzREJCRDA4MTJEN0M2ODcwMENBMUE1QSAv
KiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwICovLAorCQkJCTQzREJCRDA5MTJEN0M2ODcw
MENBMUE1QSAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCAqLywKKwkJCQk0M0RCQkQwQTEy
RDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHSW1hZ2UuY3BwICovLAorCQkJCTQzREJCRDBCMTJE
N0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdJbWFnZS5oICovLAorCQkJCTQzREJCRDBDMTJEN0M2
ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgKi8sCisJCQkJNDNEQkJEMEQx
MkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggKi8sCisJCQkJNDNEQkJE
MEUxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlLmNwcCAqLywKKwkJCQk0M0RC
QkQwRjEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2UuaCAqLywKKwkJCQk0M0RC
QkQxMDEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCAqLywK
KwkJCQk0M0RCQkQxMTEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmggKi8sCisJCQkJNDNEQkJEMTIxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyLmNwcCAqLywKKwkJCQk0M0RCQkQxMzEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIuaCAqLywKKwkJCQk0M0RCQkQxNDEyRDdDNjg3MDBDQTFBNUEg
LyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwICovLAorCQkJCTQzREJCRDE1MTJEN0M2ODcw
MENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oICovLAorCQkJCTQzREJCRDE2MTJE
N0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAgKi8s
CisJCQkJNDNEQkJEMTcxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
UHJpbWl0aXZlLmggKi8sCisJCQkJNDNEQkJEMTgxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuY3BwICovLAorCQkJCTQzREJCRDE5MTJEN0M2ODcwMENBMUE1QSAv
KiBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggKi8sCisJCQkJNDNEQkJEMUExMkQ3QzY4NzAw
Q0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwICovLAorCQkJCTQz
REJCRDFCMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50
LmggKi8sCisJCQkJNDNEQkJEMUMxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNl
TWFya2VyLmNwcCAqLywKKwkJCQk0M0RCQkQxRDEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIuaCAqLywKKwkJCQk0M0RCQkQxRTEyRDdDNjg3MDBDQTFBNUEgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwICovLAorCQkJCTQzREJCRDFGMTJEN0M2ODcwMENBMUE1
QSAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oICovLAorCQkJCTQzREJCRDIwMTJEN0M2ODcw
MENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwICovLAorCQkJCTQzREJCRDIx
MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCAqLywKKwkJCQk0
M0RCQkQyMjEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVu
dC5jcHAgKi8sCisJCQkJNDNEQkJEMjMxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291
cmNlUmFkaWFsR3JhZGllbnQuaCAqLywKKwkJCQk0M0RCQkQyNDEyRDdDNjg3MDBDQTFBNUEgLyog
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCAqLywKKwkJCQk0M0RCQkQyNTEyRDdDNjg3
MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggKi8sCisJCQkJNDNEQkJE
MjYxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jvb3QuY3BwICovLAorCQkJCTQzREJCRDI3
MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSb290LmggKi8sCisJCQkJNDNEQkJEMjgxMkQ3
QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCAqLywK
KwkJCQk0M0RCQkQyOTEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RD
b250YWluZXIuaCAqLywKKwkJCQk0M0RCQkQyQTEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZH
VHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAgKi8sCisJCQkJNDNEQkJEMkIxMkQ3QzY4NzAwQ0Ex
QTVBIC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaCAqLywKKwkJCQk0M0RCQkQy
QzEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwICovLAor
CQkJCTQzREJCRDJEMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
ci5oICovLAorCQkJCTQzREJCRDJFMTJEN0M2ODcwMENBMUE1QSAvKiBTVkdJbWFnZUJ1ZmZlclRv
b2xzLmNwcCAqLywKKwkJCQk0M0RCQkQyRjEyRDdDNjg3MDBDQTFBNUEgLyogU1ZHSW1hZ2VCdWZm
ZXJUb29scy5oICovLAorCQkJCTQzREJCRDMwMTJEN0M2ODcwMENBMUE1QSAvKiBTVkdNYXJrZXJE
YXRhLmggKi8sCisJCQkJNDNEQkJEMzExMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR01hcmtlckxheW91
dEluZm8uY3BwICovLAorCQkJCTQzREJCRDMyMTJEN0M2ODcwMENBMUE1QSAvKiBTVkdNYXJrZXJM
YXlvdXRJbmZvLmggKi8sCisJCQkJNDNEQkJEMzMxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1JlbmRl
clN1cHBvcnQuY3BwICovLAorCQkJCTQzREJCRDM0MTJEN0M2ODcwMENBMUE1QSAvKiBTVkdSZW5k
ZXJTdXBwb3J0LmggKi8sCisJCQkJNDNEQkJEMzUxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1JlbmRl
clRyZWVBc1RleHQuY3BwICovLAorCQkJCTQzREJCRDM2MTJEN0M2ODcwMENBMUE1QSAvKiBTVkdS
ZW5kZXJUcmVlQXNUZXh0LmggKi8sCisJCQkJNDNEQkJEMzcxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNW
R1Jlc291cmNlcy5jcHAgKi8sCisJCQkJNDNEQkJEMzgxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1Jl
c291cmNlcy5oICovLAorCQkJCTQzREJCRDM5MTJEN0M2ODcwMENBMUE1QSAvKiBTVkdSZXNvdXJj
ZXNDYWNoZS5jcHAgKi8sCisJCQkJNDNEQkJEM0ExMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1Jlc291
cmNlc0NhY2hlLmggKi8sCisJCQkJNDNEQkJEM0IxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1Jlc291
cmNlc0N5Y2xlU29sdmVyLmNwcCAqLywKKwkJCQk0M0RCQkQzQzEyRDdDNjg3MDBDQTFBNUEgLyog
U1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCAqLywKKwkJCQk0M0RCQkQzRDEyRDdDNjg3MDBDQTFB
NUEgLyogU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCAqLywKKwkJCQk0M0RCQkQzRTEyRDdDNjg3
MDBDQTFBNUEgLyogU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmggKi8sCiAJCQkJMDg1NEIwMDIxMjU1
RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZS5jcHAgKi8sCiAJCQkJMDg1NEIwMDMxMjU1
RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZS5oICovLAogCQkJCTA4NTRCMDA0MTI1NUU0
RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCAqLywKQEAgLTE4NTQ4LDggKzE4
NjExLDYgQEAKIAkJCQkwNjZDNzcyRjBBQjYwM0ZEMDAyMzhDQzQgLyogUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2wuaCAqLywKIAkJCQlCQ0VBNDgyRTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyRmxl
eGlibGVCb3guY3BwICovLAogCQkJCUJDRUE0ODJGMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJG
bGV4aWJsZUJveC5oICovLAotCQkJCTg1M0NBOUVBMEFFRUM2M0MwMDIzNzJEQyAvKiBSZW5kZXJG
b3JlaWduT2JqZWN0LmNwcCAqLywKLQkJCQk4NTNDQTlFQjBBRUVDNjNDMDAyMzcyREMgLyogUmVu
ZGVyRm9yZWlnbk9iamVjdC5oICovLAogCQkJCUE4NzFERUNDMEExNTMwQzcwMEIxMkE2OCAvKiBS
ZW5kZXJGcmFtZS5jcHAgKi8sCiAJCQkJQTg3MURFQ0IwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRl
ckZyYW1lLmggKi8sCiAJCQkJMEZEMzA4MEMxMTdDRjdFNzAwQTc5MUY3IC8qIFJlbmRlckZyYW1l
QmFzZS5jcHAgKi8sCkBAIC0xODYyNiw1MCArMTg2ODcsNiBAQAogCQkJCUFCMjQ3QTZCMEFGRDYz
ODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuaCAqLywKIAkJCQlEMzAyNzU0QjEyQTVGRUFCMDA0
QkQ4MjggLyogUmVuZGVyU3VtbWFyeS5jcHAgKi8sCiAJCQkJRDMwMjc1NEMxMkE1RkVBQjAwNEJE
ODI4IC8qIFJlbmRlclN1bW1hcnkuaCAqLywKLQkJCQlBNzM1MkMxNzBCMUJCODlEMDBBOTg2RDAg
LyogUmVuZGVyU1ZHQmxvY2suY3BwICovLAotCQkJCUE3MzUyQzE4MEIxQkI4OUQwMEE5ODZEMCAv
KiBSZW5kZXJTVkdCbG9jay5oICovLAotCQkJCTg1M0NBOUNBMEFFRUM1RTkwMDIzNzJEQyAvKiBS
ZW5kZXJTVkdDb250YWluZXIuY3BwICovLAotCQkJCTg1M0NBOUNCMEFFRUM1RTkwMDIzNzJEQyAv
KiBSZW5kZXJTVkdDb250YWluZXIuaCAqLywKLQkJCQlBODA5RjE0NjBCNzM3OTNBMDAyRTREN0Yg
LyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCAqLywKLQkJCQlBODA5RjE0NTBCNzM3OTNBMDAy
RTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmggKi8sCi0JCQkJQTgwOUYxQTkwQjczN0ZC
NjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgKi8sCi0JCQkJQTgwOUYx
QTgwQjczN0ZCNjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovLAotCQkJ
CTg1M0NBOUNDMEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgKi8sCi0JCQkJ
ODUzQ0E5Q0QwQUVFQzVFOTAwMjM3MkRDIC8qIFJlbmRlclNWR0ltYWdlLmggKi8sCi0JCQkJQThG
NUMwQjcwRjkyODVBQzAwOThFMDZCIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCAqLywKLQkJ
CQlBOEY1QzBCNjBGOTI4NUFDMDA5OEUwNkIgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLywK
LQkJCQkwODU2M0JDRjExNzg2NUY1MDAxMkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2UuY3BwICov
LAotCQkJCTA4MzE5MkE3MTEyQjQzMDUwMDgzQzNCOSAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oICov
LAotCQkJCTg0QkRBMTY5MTEzNThEMkEwMERCRjY0QyAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuY3BwICovLAotCQkJCTg0QkRBMTZBMTEzNThEMkEwMERCRjY0QyAvKiBSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuaCAqLywKLQkJCQkwODZBNDAwNTExRjZENkI3MDAyQ0VDNTMgLyogUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIuY3BwICovLAotCQkJCTA4MDgyMzcyMTE3OTg3QzEwMDI0MURF
OCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oICovLAotCQkJCTg0MUZEQzI0MTE3OEM5
QkUwMEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgKi8sCi0JCQkJODQxRkRD
MjUxMTc4QzlCRTAwRjhBQzlCIC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggKi8sCi0JCQkJ
MTk0MjNCNEUxMjM0RTg2QjAwRDFFRTlFIC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlLmNwcCAqLywKLQkJCQkxOTQyM0I0RjEyMzRFODZCMDBEMUVFOUUgLyogUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXJQcmltaXRpdmUuaCAqLywKLQkJCQkwOEMzNEFGMTExNzlDMDU2MDAyRDc0NTYg
LyogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgKi8sCi0JCQkJMDhDMzRBRjIxMTc5QzA1
NzAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCAqLywKLQkJCQkwOEMzNEFG
MzExNzlDMDU3MDAyRDc0NTYgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAg
Ki8sCi0JCQkJMDhDMzRBRjQxMTc5QzA1NzAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlTGlu
ZWFyR3JhZGllbnQuaCAqLywKLQkJCQk4NDk5QTUxMjExNUZCMzMwMDBGNTY2RTMgLyogUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIuY3BwICovLAotCQkJCTg0OTlBNTEzMTE1RkIzMzAwMEY1NjZFMyAv
KiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oICovLAotCQkJCTA4MzE5MkE4MTEyQjQzMDUwMDgz
QzNCOSAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgKi8sCi0JCQkJMDgzMTkyQTkxMTJC
NDMwNTAwODNDM0I5IC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmggKi8sCi0JCQkJMDg1NjNC
QjIxMTc4NjE3NzAwMTJCNTc4IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgKi8sCi0J
CQkJMDg1NjNCQjMxMTc4NjE3NzAwMTJCNTc4IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5o
ICovLAotCQkJCTA4QzM0QUZCMTE3OUMwNzIwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZVJh
ZGlhbEdyYWRpZW50LmNwcCAqLywKLQkJCQkwOEMzNEFGQzExNzlDMDcyMDAyRDc0NTYgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oICovLAotCQkJCTA4QzZBN0E5MTE3REZCQUIw
MEZFQTFBMiAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwICovLAotCQkJCTA4QzZB
N0FBMTE3REZCQUIwMEZFQTFBMiAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCAqLywK
LQkJCQlBQTMxQjVCMjBDMURGRDEwMDBBRTcwODMgLyogUmVuZGVyU1ZHUm9vdC5jcHAgKi8sCi0J
CQkJQUEzMUI1QjMwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRlclNWR1Jvb3QuaCAqLywKLQkJCQkw
OERBQjlCODExMDNEOUE1MDAzRTdBQkEgLyogUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWlu
ZXIuY3BwICovLAotCQkJCTA4REFCOUI5MTEwM0Q5QTUwMDNFN0FCQSAvKiBSZW5kZXJTVkdTaGFk
b3dUcmVlUm9vdENvbnRhaW5lci5oICovLAotCQkJCUE4QTkwOUFCMENCQ0Q2QjUwMDI5QjgwNyAv
KiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCAqLywKLQkJCQlBOEE5MDlBQTBD
QkNENkI1MDAyOUI4MDcgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oICovLAot
CQkJCUIyQ0NFQzQ1MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
ci5jcHAgKi8sCi0JCQkJQjJDQ0VDNDYwQzZDQTlGMTAwNkE1NDI0IC8qIFJlbmRlclNWR1ZpZXdw
b3J0Q29udGFpbmVyLmggKi8sCiAJCQkJQThERjRBRTIwOTgwQzQyQzAwNTI5ODFCIC8qIFJlbmRl
clRhYmxlLmNwcCAqLywKIAkJCQlBOERGNEFFMTA5ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFi
bGUuaCAqLywKIAkJCQlBOERGNEFFMDA5ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFibGVDZWxs
LmNwcCAqLywKQEAgLTE4NzEwLDIzICsxODcyNyw2IEBACiAJCQkJNUQ5MjVCNjYwRjY0RDRERDAw
Qjg0N0YwIC8qIFNjcm9sbEJlaGF2aW9yLmggKi8sCiAJCQkJQTdGMzM4QTExMUMwRUZDQTAwQTMy
MEE3IC8qIFNoYWRvd0VsZW1lbnQuY3BwICovLAogCQkJCUE3RjMzOEEyMTFDMEVGQ0EwMEEzMjBB
NyAvKiBTaGFkb3dFbGVtZW50LmggKi8sCi0JCQkJMDhDNDZCNjcxMjEyRjE1RDAwMTFBRjQwIC8q
IFNWR0ltYWdlQnVmZmVyVG9vbHMuY3BwICovLAotCQkJCTA4QzQ2QjY4MTIxMkYxNUQwMDExQUY0
MCAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmggKi8sCi0JCQkJMDgzODVGRjUxMEYwMTg2MDAwQkZF
MDdCIC8qIFNWR01hcmtlckRhdGEuaCAqLywKLQkJCQkwODczNUZCNjEwRTkxMjMyMDA2RDZGQUQg
LyogU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAgKi8sCi0JCQkJMDg3MzVGQjcxMEU5MTIzMjAwNkQ2
RkFEIC8qIFNWR01hcmtlckxheW91dEluZm8uaCAqLywKLQkJCQlBOEY0RkI5NTBDMTY5RTg1MDAy
QUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgKi8sCi0JCQkJQThGNEZCOTMwQzE2OUU3QjAw
MkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuaCAqLywKLQkJCQlCMkVCREM5QTBBRjc3RTM0MDBB
RTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgKi8sCi0JCQkJQjJFQkRDOUIwQUY3N0Uz
NDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuaCAqLywKLQkJCQkwODREMEUzODExRjU4
MTYxMDAwODFFMUEgLyogU1ZHUmVzb3VyY2VzLmNwcCAqLywKLQkJCQkwODREMEUzOTExRjU4MTYx
MDAwODFFMUEgLyogU1ZHUmVzb3VyY2VzLmggKi8sCi0JCQkJMDg0RDBFM0ExMUY1ODE2MTAwMDgx
RTFBIC8qIFNWR1Jlc291cmNlc0NhY2hlLmNwcCAqLywKLQkJCQkwODREMEUzQjExRjU4MTYxMDAw
ODFFMUEgLyogU1ZHUmVzb3VyY2VzQ2FjaGUuaCAqLywKLQkJCQkwODVCMDVDMDExRkFFMTZDMDA0
RDY1RjYgLyogU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwICovLAotCQkJCTA4NUIwNUMxMTFG
QUUxNkMwMDRENjVGNiAvKiBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oICovLAotCQkJCTA4REFC
OUMwMTEwM0Q5QzEwMDNFN0FCQSAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwICovLAotCQkJ
CTA4REFCOUMxMTEwM0Q5QzEwMDNFN0FCQSAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuaCAqLywK
IAkJCQlBOENGRjA0QzBBMTU0RjA5MDAwQTQyMzQgLyogVGFibGVMYXlvdXQuaCAqLywKIAkJCQlB
QjAxNERFMTBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCAq
LywKIAkJCQlBQjAxNERFMjBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmggKi8sCkBAIC0yMTUzNCw3ICsyMTUzNCw2IEBACiAJCQkJQThFQTczQzQwQTE5MDBFMzAw
QThFRjVGIC8qIFJlbmRlckZpZWxkc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNjZDNzczMTBB
QjYwM0ZEMDAyMzhDQzQgLyogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRUE0ODZFMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJGbGV4aWJsZUJveC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJODUzQ0E5RUQwQUVFQzYzQzAwMjM3MkRDIC8qIFJlbmRlckZvcmVp
Z25PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFERUQzMEExNTMwQzcwMEIxMkE2OCAv
KiBSZW5kZXJGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMzA4MEYxMTdDRjdFNzAwQTc5
MUY3IC8qIFJlbmRlckZyYW1lQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MURFRDEwQTE1
MzBDNzAwQjEyQTY4IC8qIFJlbmRlckZyYW1lU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTIxNTg2
LDM0ICsyMTU4NSwxMiBAQAogCQkJCUJDOEM4RkFFMEREQ0QzMUIwMEI1OTJGNCAvKiBSZW5kZXJT
dHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI2NjgwRTgxQ0I3MTAwQjI1OTY1IC8qIFJl
bmRlclN0eWxlQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlEMzAyNzU0RTEyQTVGRUFC
MDA0QkQ4MjggLyogUmVuZGVyU3VtbWFyeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTczNTJDMUEw
QjFCQjg5RDAwQTk4NkQwIC8qIFJlbmRlclNWR0Jsb2NrLmggaW4gSGVhZGVycyAqLywKLQkJCQk4
NTNDQTlENzBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlBODA5RjE0NzBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRT
dG9wLmggaW4gSGVhZGVycyAqLywKLQkJCQlBODA5RjFBQTBCNzM3RkI2MDAyRTREN0YgLyogUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk4NTNDQTlEOTBBRUVD
NUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NTRC
MDE1MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA4NTRCMDE3MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4g
SGVhZGVycyAqLywKLQkJCQlBOEY1QzBCODBGOTI4NUFDMDA5OEUwNkIgLyogUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEREYxQUQ3MTI1N0NEOUEwMDAzQTc1OSAv
KiBSZW5kZXJTVkdQYXRoLmggaW4gSGVhZGVycyAqLywKLQkJCQkwODMxOTJBQTExMkI0MzA1MDA4
M0MzQjkgLyogUmVuZGVyU1ZHUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTg0QkRBMTZD
MTEzNThEMkEwMERCRjY0QyAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTA4MDgyMzczMTE3OTg3QzEwMDI0MURFOCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODQxRkRDMjcxMTc4QzlCRTAwRjhBQzlCIC8q
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkxOTQyM0I1MTEy
MzRFODZCMDBEMUVFOUUgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTA4QzM0QUY2MTE3OUMwNTcwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQkwOEMzNEFGODExNzlDMDU3MDAyRDc0
NTYgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJODQ5OUE1MTUxMTVGQjMzMDAwRjU2NkUzIC8qIFJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkwODMxOTJBQzExMkI0MzA1MDA4M0MzQjkgLyogUmVuZGVyU1ZH
UmVzb3VyY2VNYXNrZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTA4NTYzQkI1MTE3ODYxNzgwMDEy
QjU3OCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAotCQkJCTA4
QzM0QUZFMTE3OUMwNzIwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwOEM2QTdBQzExN0RGQkFCMDBGRUExQTIgLyogUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQlBQTMxQjVCNTBDMURG
RDEwMDBBRTcwODMgLyogUmVuZGVyU1ZHUm9vdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDhEQUI5
QkIxMTAzRDlBNTAwM0U3QUJBIC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwODU0QjAxOTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZH
VGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1NEIwMUIxMjU1RTRFNjAwQjlDREQwIC8qIFJl
bmRlclNWR1RleHRQYXRoLmggaW4gSGVhZGVycyAqLywKLQkJCQlBOEE5MDlBQzBDQkNENkI1MDAy
OUI4MDcgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDg1NEIwMUQxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RTcGFuLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlCMkNDRUM0ODBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3Bv
cnRDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4REY0QUVCMDk4MEM0MkMwMDUyOTgx
QiAvKiBSZW5kZXJUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThERjRBRTkwOTgwQzQyQzAw
NTI5ODFCIC8qIFJlbmRlclRhYmxlQ2VsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThERjRBRjEw
OTgwQzQyQzAwNTI5ODFCIC8qIFJlbmRlclRhYmxlQ29sLmggaW4gSGVhZGVycyAqLywKQEAgLTIx
OTE5LDcgKzIxODk2LDYgQEAKIAkJCQlCMjIyN0EyQTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHR3Jh
ZGllbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTBGQkYyQjBEOUFGMDQ3MDA4RkMy
OTIgLyogU1ZHSEtlcm5FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjU1OTlBNDBEMDBE
OEJBMDBCQjgyNUMgLyogU1ZHSW1hZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTA4QzQ2QjZBMTIx
MkYxNUUwMDExQUY0MCAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMjIyN0EyRDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHSW1hZ2VFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjhDNkEyQTBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHSW1hZ2VMb2FkZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4NTRCMDFGMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVG
bG93Qm94LmggaW4gSGVhZGVycyAqLywKQEAgLTIxOTMyLDkgKzIxOTA4LDcgQEAKIAkJCQkwODEw
NzY0NDEyODI4NTU2MDA3QzYzQkEgLyogU1ZHTGlzdFByb3BlcnR5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwODhBMEUwOTEyNkVGMURCMDA5NzhGN0EgLyogU1ZHTGlzdFByb3BlcnR5VGVhck9mZi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBNDEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0xvY2F0
YWJsZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDgzODVGRjYxMEYwMTg2MDAwQkZFMDdCIC8qIFNW
R01hcmtlckRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTQ0MEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdNYXJrZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQkwODczNUZCOTEwRTkx
MjMyMDA2RDZGQUQgLyogU1ZHTWFya2VyTGF5b3V0SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjIyMjdBNDcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR01hc2tFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwODA2RTU3QTEyODkzMDQ1MDA3Q0VEMzIgLyogU1ZHTWF0cml4LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjIyN0E0QjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTWV0YWRhdGFFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTIxOTg3LDE1ICsyMTk2MSw5IEBACiAJCQkJQjIyMjdBQTAw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR1JlbmRlcmluZ0ludGVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMyMjc0NzkwRTgzNjZFMjAwRTdGOTc1IC8qIFNWR1JlbmRlclN0eWxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzIyNzQ3QjBFODM2NkUyMDBFN0Y5NzUgLyogU1ZHUmVuZGVyU3R5bGVEZWZz
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBOEY0RkI5NDBDMTY5RTdCMDAyQUZFRDUgLyogU1ZHUmVu
ZGVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjJFQkRDOUQwQUY3N0UzNDAwQUU0QTY4
IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuaCBpbiBIZWFkZXJzICovLAotCQkJCTA4NEQwRTNEMTFG
NTgxNjEwMDA4MUUxQSAvKiBTVkdSZXNvdXJjZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTA4NEQw
RTNGMTFGNTgxNjEwMDA4MUUxQSAvKiBTVkdSZXNvdXJjZXNDYWNoZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMDg1QjA1QzMxMUZBRTE2QzAwNEQ2NUY2IC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODU0QjAyMzEyNTVFNEU2MDBCOUNERDAgLyogU1ZHUm9v
dElubGluZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBQTMwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR1NjcmlwdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QUE2MEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdTZXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQkwOERBQjlD
MzExMDNEOUMxMDAzRTdBQkEgLyogU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFNEFGRDAxMDBEQUYzMzU1MDBGNUY1NUMgLyogU1ZHU01JTEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA4ODBGNzBFMTI4MkI0NkQwMDk0ODUwNSAvKiBTVkdTdGF0aWNMaXN0
UHJvcGVydHlUZWFyT2ZmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODEzQTRFQTEyODQxMzI2MDA5
OTI1MTEgLyogU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmLmggaW4gSGVhZGVycyAqLywKQEAgLTIy
MjkyLDYgKzIyMjYwLDM4IEBACiAJCQkJNDkzRTVFMDkxMkQ2NDIwNTAwMDIwMDgxIC8qIFBsYXRm
b3JtQ0FMYXllckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMUQ1QkIxMkQ1MzJDNDAw
ODMyQkVDIC8qIFdlYktpdExvc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxRDVD
MTEyRDUzMzU2MDA4MzJCRUMgLyogSlNXZWJLaXRMb3NlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDNEQkJENDExMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR0Jsb2NrLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0M0RCQkQ0MzEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHQ29udGFp
bmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0M0RCQkQ0NTEyRDdDNjg3MDBDQTFBNUEgLyogUmVu
ZGVyU1ZHR3JhZGllbnRTdG9wLmggaW4gSGVhZGVycyAqLywKKwkJCQk0M0RCQkQ0NzEyRDdDNjg3
MDBDQTFBNUEgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk0M0RCQkQ0OTEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHSW1hZ2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTQzREJCRDRCMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdNb2RlbE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDNEQkJENEQxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRl
clNWR1Jlc291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0M0RCQkQ0RjEyRDdDNjg3MDBDQTFB
NUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0M0RC
QkQ1MTEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTQzREJCRDUzMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDNEQkJENTUxMkQ3QzY4NzAwQ0ExQTVB
IC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk0M0RCQkQ1NzEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNDNEQkJENTkxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNW
R1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzREJCRDVCMTJE
N0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDNEQkJENUQxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2Vy
LmggaW4gSGVhZGVycyAqLywKKwkJCQk0M0RCQkQ1RjEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKKwkJCQk0M0RCQkQ2MTEyRDdDNjg3
MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNDNEQkJENjMxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDNEQkJENjUxMkQ3QzY4NzAwQ0ExQTVBIC8q
IFJlbmRlclNWR1Jvb3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzREJCRDY3MTJEN0M2ODcwMENB
MUE1QSAvKiBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDNEQkJENjkxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVD
b250YWluZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzREJCRDZCMTJEN0M2ODcwMENBMUE1QSAv
KiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDNEQkJE
NkQxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTQzREJCRDZFMTJEN0M2ODcwMENBMUE1QSAvKiBTVkdNYXJrZXJEYXRhLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0M0RCQkQ3MDEyRDdDNjg3MDBDQTFBNUEgLyogU1ZHTWFya2VyTGF5b3V0
SW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDNEQkJENzIxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNW
R1JlbmRlclN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzREJCRDc0MTJEN0M2ODcwMENB
MUE1QSAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk0M0RCQkQ3
NjEyRDdDNjg3MDBDQTFBNUEgLyogU1ZHUmVzb3VyY2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQk0
M0RCQkQ3ODEyRDdDNjg3MDBDQTFBNUEgLyogU1ZHUmVzb3VyY2VzQ2FjaGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTQzREJCRDdBMTJEN0M2ODcwMENBMUE1QSAvKiBTVkdSZXNvdXJjZXNDeWNsZVNv
bHZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDNEQkJEN0MxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNW
R1NoYWRvd1RyZWVFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDNEQkJEODExMkQ3RDQw
ODAwQ0ExQTVBIC8qIFJlbmRlckZvcmVpZ25PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjQz
MjMsNyArMjQzMjMsNiBAQAogCQkJCUE4RUE3M0MzMEExOTAwRTMwMEE4RUY1RiAvKiBSZW5kZXJG
aWVsZHNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjZDNzczMDBBQjYwM0ZEMDAyMzhDQzQg
LyogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ4
NkQwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckZsZXhpYmxlQm94LmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTg1M0NBOUVDMEFFRUM2M0MwMDIzNzJEQyAvKiBSZW5kZXJGb3JlaWduT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFERUQ0MEExNTMwQzcwMEIxMkE2OCAvKiBSZW5kZXJG
cmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzMDgwRTExN0NGN0U3MDBBNzkxRjcgLyog
UmVuZGVyRnJhbWVCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFERUQyMEExNTMwQzcw
MEIxMkE2OCAvKiBSZW5kZXJGcmFtZVNldC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI0MzcyLDM0
ICsyNDM3MSwxMiBAQAogCQkJCUFCMjQ3QTZDMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlk
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4QzhGQUQwRERDRDMxQjAwQjU5MkY0IC8qIFJl
bmRlclN0eWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQzMDI3NTREMTJBNUZFQUIwMDRCRDgy
OCAvKiBSZW5kZXJTdW1tYXJ5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE3MzUyQzE5MEIxQkI4
OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdCbG9jay5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk4NTND
QTlENjBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUE4MDlGMTQ4MEI3Mzc5M0IwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0
b3AuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTgwOUYxQUIwQjczN0ZCNjAwMkU0RDdGIC8qIFJl
bmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk4NTNDQTlEODBB
RUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MDg1NEIwMTQxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwODU0QjAxNjEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lVGV4
dC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBOEY1QzBCOTBGOTI4NUFDMDA5OEUwNkIgLyogUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQURERjFBRDYxMjU3Q0Q5
QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDg1NjNC
RDAxMTc4NjVGNTAwMTJCNTc4IC8qIFJlbmRlclNWR1Jlc291cmNlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTg0QkRBMTZCMTEzNThEMkEwMERCRjY0QyAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDg2QTQwMDYxMUY2RDZCNzAwMkNFQzUzIC8qIFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg0MUZEQzI2
MTE3OEM5QkUwMEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkxOTQyM0I1MDEyMzRFODZCMDBEMUVFOUUgLyogUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXJQcmltaXRpdmUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDhDMzRBRjUxMTc5QzA1NzAw
MkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJMDhDMzRBRjcxMTc5QzA1NzAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3Jh
ZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJODQ5OUE1MTQxMTVGQjMzMDAwRjU2NkUzIC8q
IFJlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTA4MzE5MkFC
MTEyQjQzMDUwMDgzQzNCOSAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkwODU2M0JCNDExNzg2MTc4MDAxMkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTA4QzM0QUZEMTE3OUMwNzIwMDJENzQ1NiAv
KiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTA4QzZBN0FCMTE3REZCQUIwMEZFQTFBMiAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQUEzMUI1QjQwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRl
clNWR1Jvb3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDhEQUI5QkExMTAzRDlBNTAwM0U3QUJB
IC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTA4NTRCMDE4MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTA4NTRCMDFBMTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0UGF0
aC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBOEE5MDlBRDBDQkNENkI1MDAyOUI4MDcgLyogUmVu
ZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODU0
QjAxQzEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVFNwYW4uY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQjJDQ0VDNDcwQzZDQTlGMTAwNkE1NDI0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFp
bmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4REY0QUVDMDk4MEM0MkMwMDUyOTgxQiAvKiBS
ZW5kZXJUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOERGNEFFQTA5ODBDNDJDMDA1Mjk4
MUIgLyogUmVuZGVyVGFibGVDZWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4REY0QUU4MDk4
MEM0MkMwMDUyOTgxQiAvKiBSZW5kZXJUYWJsZUNvbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI0
NjY4LDcgKzI0NjQ1LDYgQEAKIAkJCQlCMjIyN0EyOTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHR3Jh
ZGllbnRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1MEZCRjJBMEQ5QUYwNDcwMDhG
QzI5MiAvKiBTVkdIS2VybkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI1NTk5QTMw
RDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ltYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTA4QzQ2
QjY5MTIxMkYxNUUwMDExQUY0MCAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyMjI3QTJDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdJbWFnZUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjI4QzZBMjkwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR0ltYWdl
TG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4NTRCMDFFMTI1NUU0RTYwMEI5Q0REMCAv
KiBTVkdJbmxpbmVGbG93Qm94LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjQ2ODAsNyArMjQ2NTYs
NiBAQAogCQkJCUIyMjI3QTNCMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdMaW5lRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0E0MDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTG9jYXRh
YmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTQzMEQwMEJGMjIwMDcxQjc4MiAvKiBT
VkdNYXJrZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTA4NzM1RkI4MTBFOTEyMzIw
MDZENkZBRCAvKiBTVkdNYXJrZXJMYXlvdXRJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
MjI3QTQ2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNYXNrRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMjIyN0E0QTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTWV0YWRhdGFFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyQTFGMkIwMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdNaXNz
aW5nR2x5cGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjQ3MTMsMTUgKzI0Njg4LDkg
QEAKIAkJCQlCMjIyN0E5RDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUmVjdEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMyMjc0NzgwRTgzNjZFMjAwRTdGOTc1IC8qIFNWR1JlbmRlclN0
eWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMjI3NDdBMEU4MzY2RTIwMEU3Rjk3NSAvKiBT
VkdSZW5kZXJTdHlsZURlZnMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQThGNEZCOTYwQzE2OUU4
NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjJF
QkRDOUMwQUY3N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMDg0RDBFM0MxMUY1ODE2MTAwMDgxRTFBIC8qIFNWR1Jlc291cmNlcy5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwODREMEUzRTExRjU4MTYxMDAwODFFMUEgLyogU1ZHUmVzb3Vy
Y2VzQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDg1QjA1QzIxMUZBRTE2QzAwNEQ2NUY2
IC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4NTRC
MDIyMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdSb290SW5saW5lQm94LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyMjI3QUEyMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTY3JpcHRFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyMjI3QUE1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTZXRFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTA4REFCOUMyMTEwM0Q5QzEwMDNFN0FCQSAvKiBT
VkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRBRkQwMEYwREFG
MzM1NTAwRjVGNTVDIC8qIFNWR1NNSUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
MjI3QUE4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTdG9wRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMjIyN0FBQjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU3RyaW5nTGlzdC5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTI0OTc2LDYgKzI0OTQ1LDM3IEBACiAJCQkJN0VFNjg0NzUxMkQyNkU3
MDAwRTc5NDE1IC8qIFJlc291cmNlTG9hZGVyQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTNGMUQ1QkExMkQ1MzJDNDAwODMyQkVDIC8qIFdlYktpdExvc2VDb250ZXh0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRjFENUMwMTJENTMzNTYwMDgzMkJFQyAvKiBKU1dlYktpdExvc2VDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzREJCRDQwMTJEN0M2ODcwMENBMUE1QSAvKiBS
ZW5kZXJTVkdCbG9jay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0M0RCQkQ0MjEyRDdDNjg3MDBD
QTFBNUEgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzREJC
RDQ0MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNDNEQkJENDYxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR0hpZGRlbkNv
bnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0M0RCQkQ0ODEyRDdDNjg3MDBDQTFBNUEg
LyogUmVuZGVyU1ZHSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDNEQkJENEExMkQ3QzY4
NzAwQ0ExQTVBIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTQzREJCRDRDMTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk0M0RCQkQ0RTEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzREJCRDUwMTJEN0M2ODcwMENBMUE1
QSAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
M0RCQkQ1MjEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNDNEQkJENTQxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzREJCRDU2MTJE
N0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTQzREJCRDU4MTJEN0M2ODcwMENBMUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZUxp
bmVhckdyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzREJCRDVBMTJEN0M2ODcwMENB
MUE1QSAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
M0RCQkQ1QzEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNDNEQkJENUUxMkQ3QzY4NzAwQ0ExQTVBIC8qIFJlbmRlclNWR1Jl
c291cmNlUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0M0RCQkQ2MDEyRDdDNjg3MDBD
QTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0M0RCQkQ2MjEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzREJCRDY0MTJEN0M2ODcwMENBMUE1QSAv
KiBSZW5kZXJTVkdSb290LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzREJCRDY2MTJEN0M2ODcw
MENBMUE1QSAvKiBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0M0RCQkQ2ODEyRDdDNjg3MDBDQTFBNUEgLyogUmVuZGVyU1ZHVHJhbnNmb3Jt
YWJsZUNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0M0RCQkQ2QTEyRDdDNjg3MDBD
QTFBNUEgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNDNEQkJENkMxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNDNEQkJENkYxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR01hcmtlckxh
eW91dEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDNEQkJENzExMkQ3QzY4NzAwQ0ExQTVB
IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDNEQkJENzMxMkQ3
QzY4NzAwQ0ExQTVBIC8qIFNWR1JlbmRlclRyZWVBc1RleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNDNEQkJENzUxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1Jlc291cmNlcy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0M0RCQkQ3NzEyRDdDNjg3MDBDQTFBNUEgLyogU1ZHUmVzb3VyY2VzQ2FjaGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDNEQkJENzkxMkQ3QzY4NzAwQ0ExQTVBIC8qIFNWR1Jl
c291cmNlc0N5Y2xlU29sdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzREJCRDdCMTJEN0M2
ODcwMENBMUE1QSAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNDNEQkJEODAxMkQ3RDQwODAwQ0ExQTVBIC8qIFJlbmRlckZvcmVpZ25PYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0
LmNwcAkocmV2aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWdu
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSwgSW5jLgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShTVkdfRk9SRUlHTl9PQkpFQ1QpCi0jaW5jbHVkZSAi
UmVuZGVyRm9yZWlnbk9iamVjdC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0j
aW5jbHVkZSAiU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJT
dXBwb3J0LmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlRyYW5zZm9y
bVN0YXRlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVuZGVyRm9yZWlnbk9iamVjdDo6
UmVuZGVyRm9yZWlnbk9iamVjdChTVkdGb3JlaWduT2JqZWN0RWxlbWVudCogbm9kZSkgCi0gICAg
OiBSZW5kZXJTVkdCbG9jayhub2RlKQotICAgICwgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSh0cnVl
KQotewotfQotCi1SZW5kZXJGb3JlaWduT2JqZWN0Ojp+UmVuZGVyRm9yZWlnbk9iamVjdCgpCi17
Ci19Ci0KLXZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGludCwgaW50KQotewotICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8o
cGFpbnRJbmZvKTsKLSAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgY2hp
bGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obG9jYWxUcmFuc2Zvcm0oKSk7Ci0KLSAgICBpZiAo
U1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlzKSkKLSAgICAgICAgY2hpbGRQ
YWludEluZm8uY29udGV4dC0+Y2xpcChtX3ZpZXdwb3J0KTsKLQotICAgIGZsb2F0IG9wYWNpdHkg
PSBzdHlsZSgpLT5vcGFjaXR5KCk7Ci0gICAgaWYgKG9wYWNpdHkgPCAxLjBmKQotICAgICAgICBj
aGlsZFBhaW50SW5mby5jb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwot
Ci0gICAgUmVuZGVyQmxvY2s6OnBhaW50KGNoaWxkUGFpbnRJbmZvLCAwLCAwKTsKLQotICAgIGlm
IChvcGFjaXR5IDwgMS4wZikKLSAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKLQotICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUo
KTsKLX0KLQotSW50UmVjdCBSZW5kZXJGb3JlaWduT2JqZWN0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0
Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikKLXsKLSAg
ICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQo
dGhpcywgcmVwYWludENvbnRhaW5lcik7Ci19Ci0KLXZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6
Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLCBJbnRSZWN0JiByZXBhaW50UmVjdCwgYm9vbCBmaXhlZCkKLXsKLSAgICBTVkdSZW5kZXJT
dXBwb3J0Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWludENvbnRhaW5lciwgcmVw
YWludFJlY3QsIGZpeGVkKTsKLX0KLQotY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZW5kZXJGb3Jl
aWduT2JqZWN0Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICBtX2xvY2Fs
VG9QYXJlbnRUcmFuc2Zvcm0gPSBsb2NhbFRyYW5zZm9ybSgpOwotICAgIG1fbG9jYWxUb1BhcmVu
dFRyYW5zZm9ybS50cmFuc2xhdGUobV92aWV3cG9ydC54KCksIG1fdmlld3BvcnQueSgpKTsKLSAg
ICByZXR1cm4gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOwotfQotCi12b2lkIFJlbmRlckZvcmVp
Z25PYmplY3Q6OmNvbXB1dGVMb2dpY2FsV2lkdGgoKQotewotICAgIC8vIEZJWE1FOiBJbnZlc3Rp
Z2F0ZSBpbiBzaXplIHJvdW5kaW5nIGlzc3VlcwotICAgIHNldFdpZHRoKHN0YXRpY19jYXN0PGlu
dD4ocm91bmRmKG1fdmlld3BvcnQud2lkdGgoKSkpKTsKLX0KLQotdm9pZCBSZW5kZXJGb3JlaWdu
T2JqZWN0Ojpjb21wdXRlTG9naWNhbEhlaWdodCgpCi17Ci0gICAgLy8gRklYTUU6IEludmVzdGln
YXRlIGluIHNpemUgcm91bmRpbmcgaXNzdWVzCi0gICAgc2V0SGVpZ2h0KHN0YXRpY19jYXN0PGlu
dD4ocm91bmRmKG1fdmlld3BvcnQuaGVpZ2h0KCkpKSk7Ci19Ci0KLXZvaWQgUmVuZGVyRm9yZWln
bk9iamVjdDo6bGF5b3V0KCkKLXsKLSAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNT
RVJUKCF2aWV3KCktPmxheW91dFN0YXRlRW5hYmxlZCgpKTsgLy8gUmVuZGVyU1ZHUm9vdCBkaXNh
YmxlcyBsYXlvdXRTdGF0ZSBmb3IgdGhlIFNWRyByZW5kZXJpbmcgdHJlZS4KLQotICAgIExheW91
dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgp
KTsKLSAgICBTVkdGb3JlaWduT2JqZWN0RWxlbWVudCogZm9yZWlnbiA9IHN0YXRpY19jYXN0PFNW
R0ZvcmVpZ25PYmplY3RFbGVtZW50Kj4obm9kZSgpKTsKLQotICAgIGJvb2wgdXBkYXRlQ2FjaGVk
Qm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOwotICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBk
YXRlKSB7Ci0gICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSBmb3JlaWduLT5hbmltYXRlZExvY2Fs
VHJhbnNmb3JtKCk7Ci0gICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKLSAg
ICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Ci0gICAgfQotCi0g
ICAgRmxvYXRSZWN0IG9sZFZpZXdwb3J0ID0gbV92aWV3cG9ydDsKLQotICAgIC8vIENhY2hlIHZp
ZXdwb3J0IGJvdW5kYXJpZXMKLSAgICBGbG9hdFBvaW50IHZpZXdwb3J0TG9jYXRpb24oZm9yZWln
bi0+eCgpLnZhbHVlKGZvcmVpZ24pLCBmb3JlaWduLT55KCkudmFsdWUoZm9yZWlnbikpOwotICAg
IG1fdmlld3BvcnQgPSBGbG9hdFJlY3Qodmlld3BvcnRMb2NhdGlvbiwgRmxvYXRTaXplKGZvcmVp
Z24tPndpZHRoKCkudmFsdWUoZm9yZWlnbiksIGZvcmVpZ24tPmhlaWdodCgpLnZhbHVlKGZvcmVp
Z24pKSk7Ci0gICAgaWYgKCF1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQotICAgICAg
ICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gb2xkVmlld3BvcnQgIT0gbV92aWV3
cG9ydDsKLQotICAgIC8vIFNldCBib3ggb3JpZ2luIHRvIHRoZSBmb3JlaWduT2JqZWN0IHgveSB0
cmFuc2xhdGlvbiwgc28gcG9zaXRpb25lZCBvYmplY3RzIGluIFhIVE1MIGNvbnRlbnQgZ2V0IGNv
cnJlY3QKLSAgICAvLyBwb3NpdGlvbnMuIEEgcmVndWxhciBSZW5kZXJCb3hNb2RlbE9iamVjdCB3
b3VsZCBwdWxsIHRoaXMgaW5mb3JtYXRpb24gZnJvbSBSZW5kZXJTdHlsZSAtIGluIFNWRyB0aG9z
ZQotICAgIC8vIHByb3BlcnRpZXMgYXJlIGlnbm9yZWQgZm9yIG5vbiA8c3ZnPiBlbGVtZW50cywg
c28gd2UgbWltaWMgd2hhdCBoYXBwZW5zIHdoZW4gc3BlY2lmeWluZyB0aGVtIHRocm91Z2ggQ1NT
LgotCi0gICAgLy8gRklYTUU6IEludmVzdGlnYXRlIGluIGxvY2F0aW9uIHJvdW5kaW5nIGlzc3Vl
cyAtIG9ubHkgYWZmZWN0cyBSZW5kZXJGb3JlaWduT2JqZWN0ICYgUmVuZGVyU1ZHVGV4dAotICAg
IHNldExvY2F0aW9uKHJvdW5kZWRJbnRQb2ludCh2aWV3cG9ydExvY2F0aW9uKSk7Ci0KLSAgICBi
b29sIGxheW91dENoYW5nZWQgPSBtX2V2ZXJIYWRMYXlvdXQgJiYgc2VsZk5lZWRzTGF5b3V0KCk7
Ci0gICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwotICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7
Ci0KLSAgICAvLyBJZiBvdXIgYm91bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4KLSAg
ICBpZiAodXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cykKLSAgICAgICAgUmVuZGVyU1ZH
QmxvY2s6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwotCi0gICAgLy8gSW52YWxpZGF0ZSBh
bGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KLSAgICBp
ZiAobGF5b3V0Q2hhbmdlZCkKLSAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91
dENoYW5nZWQodGhpcyk7Ci0KLSAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7Ci19
Ci0KLWJvb2wgUmVuZGVyRm9yZWlnbk9iamVjdDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCi17Ci0gICAg
RmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9p
bnQocG9pbnRJblBhcmVudCk7Ci0KLSAgICAvLyBFYXJseSBleGl0IGlmIGxvY2FsIHBvaW50IGlz
IG5vdCBjb250YWluZWQgaW4gY2xpcHBlZCB2aWV3cG9ydCBhcmVhCi0gICAgaWYgKFNWR1JlbmRl
clN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4odGhpcykgJiYgIW1fdmlld3BvcnQuY29udGFpbnMo
bG9jYWxQb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEludFBvaW50IHJvdW5k
ZWRMb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpOwotICAgIHJldHVybiBS
ZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCByb3VuZGVkTG9jYWxQb2lu
dC54KCksIHJvdW5kZWRMb2NhbFBvaW50LnkoKSwgMCwgMCwgaGl0VGVzdEFjdGlvbik7Ci19Ci0K
LWJvb2wgUmVuZGVyRm9yZWlnbk9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKQot
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9p
ZCBSZW5kZXJGb3JlaWduT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMs
IFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKLXsKLSAgICAvLyBXaGVuIGNy
YXdsaW5nIHVwIHRoZSBoaWVyYWNoeSBzdGFydGluZyBmcm9tIGZvcmVpZ25PYmplY3QgY2hpbGQg
Y29udGVudCwgdXNlVHJhbnNmb3JtcyBtYXkgbm90IGJlIHNldCB0byB0cnVlLgotICAgIGlmICgh
dXNlVHJhbnNmb3JtcykKLSAgICAgICAgdXNlVHJhbnNmb3JtcyA9IHRydWU7Ci0gICAgU1ZHUmVu
ZGVyU3VwcG9ydDo6bWFwTG9jYWxUb0NvbnRhaW5lcih0aGlzLCByZXBhaW50Q29udGFpbmVyLCBm
aXhlZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOwotfQotCi19Ci0KLSNlbmRpZgpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaAkocmV2aXNpb24gNzUy
NzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lm
bmRlZiBSZW5kZXJGb3JlaWduT2JqZWN0X2gKLSNkZWZpbmUgUmVuZGVyRm9yZWlnbk9iamVjdF9o
Ci0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQotI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRl
ICJSZW5kZXJTVkdCbG9jay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNWR0Zv
cmVpZ25PYmplY3RFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJGb3JlaWduT2JqZWN0IDogcHVibGlj
IFJlbmRlclNWR0Jsb2NrIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBSZW5kZXJGb3JlaWduT2Jq
ZWN0KFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyRm9yZWln
bk9iamVjdCgpOwotCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qg
eyByZXR1cm4gIlJlbmRlckZvcmVpZ25PYmplY3QiOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKLQotICAgIHZpcnR1YWwg
SW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lcik7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVw
YWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJv
b2wgZml4ZWQgPSBmYWxzZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotCi0gICAg
dmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3Zp
ZXdwb3J0OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25z
dCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0
aW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFj
dGlvbik7Ci0gICAgdmlydHVhbCBib29sIGlzU1ZHRm9yZWlnbk9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkICwgYm9vbCB1c2VU
cmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0OwotICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVw
ZGF0ZSA9IHRydWU7IH0KLQotIHByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVMb2dp
Y2FsV2lkdGgoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKLQot
ICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0KLSAgICBib29sIG1fbmVlZHNUcmFu
c2Zvcm1VcGRhdGUgOiAxOwotICAgIEZsb2F0UmVjdCBtX3ZpZXdwb3J0OwotICAgIEFmZmluZVRy
YW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOwotICAgIG11dGFibGUgQWZmaW5lVHJhbnNmb3JtIG1f
bG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDc1MjcyKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotLy8gVGhpcyBhbGwtaW4tb25lIGNwcCBmaWxlIGN1dHMgZG93biBvbiB0
ZW1wbGF0ZSBibG9hdCB0byBhbGxvdyB1cyB0byBidWlsZCBvdXIgV2luZG93cyByZWxlYXNlIGJ1
aWxkLgotCi0jaW5jbHVkZSAiUmVuZGVyU1ZHQmxvY2suY3BwIgotI2luY2x1ZGUgIlJlbmRlclNW
R0NvbnRhaW5lci5jcHAiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCIKLSNp
bmNsdWRlICJSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwIgotI2luY2x1ZGUgIlJlbmRlclNW
R0ltYWdlLmNwcCIKLSNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAiCi0jaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2UuY3BwIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xp
cHBlci5jcHAiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIgotI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCIKLSNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHAiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5j
cHAiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwIgotI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm4uY3BwIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3Bw
IgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAiCi0jaW5jbHVkZSAi
UmVuZGVyU1ZHUm9vdC5jcHAiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250
YWluZXIuY3BwIgotI2luY2x1ZGUgIlJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3Bw
IgotI2luY2x1ZGUgIlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCIKLSNpbmNsdWRlICJT
VkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCIKLSNpbmNsdWRlICJTVkdNYXJrZXJMYXlvdXRJbmZvLmNw
cCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmNwcCIKLSNpbmNsdWRlICJTVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXMuY3BwIgotI2luY2x1ZGUgIlNW
R1Jlc291cmNlc0NhY2hlLmNwcCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5j
cHAiCi0jaW5jbHVkZSAiU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCIKLQotLy8gRklYTUU6IEFz
IHNvb24gYXMgYWxsIFNWRyByZW5kZXJlcnMgbGl2ZSBpbiByZW5kZXJpbmcvc3ZnLCB0aGlzIGZp
bGUgc2hvdWxkIGJlIG1vdmVkIHRoZXJlIGFzIHdlbGwsIHJlbW92aW5nIHRoZSBuZWVkIGZvciB0
aGUgc3ZnLyBpbmNsdWRlcyBiZWxvdy4KLSNpbmNsdWRlICJzdmcvUmVuZGVyU1ZHSW5saW5lLmNw
cCIKLSNpbmNsdWRlICJzdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAiCi0jaW5jbHVkZSAic3Zn
L1JlbmRlclNWR1RTcGFuLmNwcCIKLSNpbmNsdWRlICJzdmcvUmVuZGVyU1ZHVGV4dC5jcHAiCi0j
aW5jbHVkZSAic3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHSW5s
aW5lRmxvd0JveC5jcHAiCi0jaW5jbHVkZSAic3ZnL1NWR0lubGluZVRleHRCb3guY3BwIgotI2lu
Y2x1ZGUgInN2Zy9TVkdSb290SW5saW5lQm94LmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHVGV4dENo
dW5rLmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHVGV4dENodW5rQnVpbGRlci5jcHAiCi0jaW5jbHVk
ZSAic3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHVGV4dExheW91
dEVuZ2luZS5jcHAiCi0jaW5jbHVkZSAic3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5j
cHAiCi0jaW5jbHVkZSAic3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCIKLSNpbmNs
dWRlICJzdmcvU1ZHVGV4dE1ldHJpY3MuY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdUZXh0UXVlcnku
Y3BwIgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmNwcAkocmV2aXNpb24gNzUy
NzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHQmxvY2suaCIKLQotI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclNWR0Jsb2NrOjpSZW5kZXJTVkdCbG9jayhTVkdFbGVt
ZW50KiBub2RlKSAKLSAgICA6IFJlbmRlckJsb2NrKG5vZGUpCi17Ci19Ci0KLXZvaWQgUmVuZGVy
U1ZHQmxvY2s6OnNldFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKSAKLXsKLSAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IHVzZVN0eWxlID0gc3R5bGU7Ci0KLSAgICAvLyBTVkcgdGV4
dCBsYXlvdXQgY29kZSBleHBlY3RzIHVzIHRvIGJlIGEgYmxvY2stbGV2ZWwgc3R5bGUgZWxlbWVu
dC4gICAKLSAgICBpZiAodXNlU3R5bGUtPmlzRGlzcGxheUlubGluZVR5cGUoKSkgewotICAgICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwot
ICAgICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20odXNlU3R5bGUuZ2V0KCkpOwotICAgICAgICBu
ZXdTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0gICAgICAgIHVzZVN0eWxlID0gbmV3U3R5bGUu
cmVsZWFzZSgpOwotICAgIH0KLQotICAgIFJlbmRlckJsb2NrOjpzZXRTdHlsZSh1c2VTdHlsZS5y
ZWxlYXNlKCkpOwotfQotCi12b2lkIFJlbmRlclNWR0Jsb2NrOjp1cGRhdGVCb3hNb2RlbEluZm9G
cm9tU3R5bGUoKQotewotICAgIFJlbmRlckJsb2NrOjp1cGRhdGVCb3hNb2RlbEluZm9Gcm9tU3R5
bGUoKTsKLQotICAgIC8vIFJlbmRlclNWR2xvY2ssIHVzZWQgYnkgUmVuZGVyKFNWR1RleHR8Rm9y
ZWlnbk9iamVjdCksIGlzIG5vdCBhbGxvd2VkIHRvIGNhbGwgc2V0SGFzT3ZlcmZsb3dDbGlwKHRy
dWUpLgotICAgIC8vIFJlbmRlckJsb2NrIGFzc3VtZXMgYSBsYXllciB0byBiZSBwcmVzZW50IHdo
ZW4gdGhlIG92ZXJmbG93IGNsaXAgZnVuY3Rpb25hbGl0eSBpcyByZXF1ZXN0ZWQuIEJvdGgKLSAg
ICAvLyBSZW5kZXIoU1ZHVGV4dHxGb3JlaWduT2JqZWN0KSByZXR1cm4gJ2ZhbHNlJyBvbiAncmVx
dWlyZXNMYXllcicuIEZpbmUgZm9yIFJlbmRlclNWR1RleHQuCi0gICAgLy8KLSAgICAvLyBJZiB3
ZSB3YW50IHRvIHN1cHBvcnQgb3ZlcmZsb3cgcnVsZXMgZm9yIDxmb3JlaWduT2JqZWN0PiB3ZSBj
YW4gY2hvb3NlIGJldHdlZW4gdHdvIHNvbHV0aW9uczoKLSAgICAvLyBhKSBtYWtlIFJlbmRlckZv
cmVpZ25PYmplY3QgcmVxdWlyZSBsYXllcnMgYW5kIFNWRyBsYXllciBhd2FyZQotICAgIC8vIGIp
IHJlYWN0b3Igb3ZlcmZsb3cgbG9naWMgb3V0IG9mIFJlbmRlckxheWVyIChhcyBzdWdnZXN0ZWQg
YnkgZGh5YXR0KSwgd2hpY2ggaXMgYSBsYXJnZSB0YXNrCi0gICAgLy8KLSAgICAvLyBVbnRpbCB0
aGlzIGlzIHJlc29sdmVkLCBkaXNhYmxlIG92ZXJmbG93IHN1cHBvcnQuIE9wZXJhL0ZGIGRvbid0
IHN1cHBvcnQgaXQgYXMgd2VsbCBhdCB0aGUgbW9tZW50IChGZWIgMjAxMCkuCi0gICAgLy8KLSAg
ICAvLyBOb3RlOiBUaGlzIGRvZXMgTk9UIGFmZmVjdCBvdmVyZmxvdyBoYW5kbGluZyBvbiBvdXRl
ci9pbm5lciA8c3ZnPiBlbGVtZW50cyAtIHRoaXMgaXMgaGFuZGxlZAotICAgIC8vIG1hbnVhbGx5
IGJ5IFJlbmRlclNWR1Jvb3QgLSB3aGljaCBvd25zIHRoZSBkb2N1bWVudHMgZW5jbG9zaW5nIHJv
b3QgbGF5ZXIgYW5kIHRodXMgd29ya3MgZmluZS4KLSAgICBzZXRIYXNPdmVyZmxvd0NsaXAoZmFs
c2UpOwotfQotCi12b2lkIFJlbmRlclNWR0Jsb2NrOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYsIGludCwgaW50KQotewotICAgIC8vIFRoaXMgY29kZSBwYXRoIHNob3VsZCBuZXZlciBi
ZSB0YWtlbiBmb3IgU1ZHLCBhcyB3ZSdyZSBhc3N1bWluZyB1c2VUcmFuc2Zvcm1zPXRydWUgZXZl
cnl3aGVyZSwgYWJzb2x1dGVRdWFkcyBzaG91bGQgYmUgdXNlZC4KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdCbG9jazo6ZGVzdHJveSgpCi17Ci0gICAgU1ZH
UmVzb3VyY2VzQ2FjaGU6OmNsaWVudERlc3Ryb3llZCh0aGlzKTsKLSAgICBSZW5kZXJCbG9jazo6
ZGVzdHJveSgpOwotfQotCi12b2lkIFJlbmRlclNWR0Jsb2NrOjpzdHlsZVdpbGxDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKLXsKLSAgICBp
ZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQpCi0gICAgICAgIHNldE5lZWRzQm91bmRh
cmllc1VwZGF0ZSgpOwotICAgIFJlbmRlckJsb2NrOjpzdHlsZVdpbGxDaGFuZ2UoZGlmZiwgbmV3
U3R5bGUpOwotfQotCi12b2lkIFJlbmRlclNWR0Jsb2NrOjpzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIFJlbmRl
ckJsb2NrOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7Ci0gICAgU1ZHUmVzb3VyY2Vz
Q2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCh0aGlzLCBkaWZmLCBzdHlsZSgpKTsKLX0KLQotdm9p
ZCBSZW5kZXJTVkdCbG9jazo6dXBkYXRlRnJvbUVsZW1lbnQoKQotewotICAgIFJlbmRlckJsb2Nr
Ojp1cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRVcGRh
dGVkRnJvbUVsZW1lbnQodGhpcywgc3R5bGUoKSk7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmgJKHJldmlzaW9uIDc1MjcyKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZu
ZGVmIFJlbmRlclNWR0Jsb2NrX2gKLSNkZWZpbmUgUmVuZGVyU1ZHQmxvY2tfaAotCi0jaWYgRU5B
QkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1
cHBvcnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTVkdFbGVtZW50OwotCi1j
bGFzcyBSZW5kZXJTVkdCbG9jayA6IHB1YmxpYyBSZW5kZXJCbG9jayB7Ci1wdWJsaWM6Ci0gICAg
ZXhwbGljaXQgUmVuZGVyU1ZHQmxvY2soU1ZHRWxlbWVudCopOwotCi1wcml2YXRlOgotICAgIHZp
cnR1YWwgdm9pZCBzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPik7Ci0gICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgpOwotCi0gICAgdmlydHVhbCB2b2lk
IGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOwotCi0gICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotfTsK
LQotfQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Nv
bnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29u
dGFpbmVyLmNwcAkocmV2aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4NCArMCwwIEBACi0vKgotICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDgg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDcgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAgICAgICAgICAgICAgICAgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJM
RShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCi0KLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgotI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2lu
Y2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKLSNp
bmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVu
ZGVyU1ZHQ29udGFpbmVyOjpSZW5kZXJTVkdDb250YWluZXIoU1ZHU3R5bGVkRWxlbWVudCogbm9k
ZSkKLSAgICA6IFJlbmRlclNWR01vZGVsT2JqZWN0KG5vZGUpCi0gICAgLCBtX25lZWRzQm91bmRh
cmllc1VwZGF0ZSh0cnVlKQotewotfQotCi1SZW5kZXJTVkdDb250YWluZXI6On5SZW5kZXJTVkdD
b250YWluZXIoKQotewotfQotCi12b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0KCkKLXsK
LSAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0KLSAgICAvLyBSZW5kZXJTVkdSb290IGRpc2Fi
bGVzIGxheW91dFN0YXRlIGZvciB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlLgotICAgIEFTU0VSVCgh
dmlldygpLT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSk7Ci0KLSAgICAvLyBBbGxvdyBSZW5kZXJTVkdW
aWV3cG9ydENvbnRhaW5lciB0byB1cGRhdGUgaXRzIHZpZXdwb3J0LgotICAgIGNhbGNWaWV3cG9y
dCgpOwotCi0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBh
aW50RHVyaW5nTGF5b3V0KCkgfHwgc2VsZldpbGxQYWludCgpKTsKLQotICAgIC8vIEFsbG93IFJl
bmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIgdG8gdXBkYXRlIGl0cyB0cmFuc2Zvcm0uCi0g
ICAgYm9vbCB1cGRhdGVkVHJhbnNmb3JtID0gY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKTsKLQot
ICAgIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKHRoaXMsIHNlbGZOZWVkc0xheW91
dCgpKTsKLQotICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBp
ZiBvdXIgbGF5b3V0IGNoYW5nZWQuCi0gICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVl
ZHNMYXlvdXQoKSkKLSAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5n
ZWQodGhpcyk7Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5
IGdyYWJiZWQgdGhlIG9sZCBib3VuZHMsCi0gICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cgc28g
cmVwYWludEFmdGVyTGF5b3V0KCkgdXNlcyB0aGUgbmV3IGJvdW5kcy4KLSAgICBpZiAobV9uZWVk
c0JvdW5kYXJpZXNVcGRhdGUgfHwgdXBkYXRlZFRyYW5zZm9ybSkgewotICAgICAgICB1cGRhdGVD
YWNoZWRCb3VuZGFyaWVzKCk7Ci0gICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFs
c2U7Ci0gICAgCi0gICAgICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBw
YXJlbnRzLgotICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVz
VXBkYXRlKCk7Ci0gICAgfQotCi0gICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwot
ICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdDb250YWluZXI6
OnNlbGZXaWxsUGFpbnQoKQotewotI2lmIEVOQUJMRShGSUxURVJTKQotICAgIFNWR1Jlc291cmNl
cyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRl
ck9iamVjdCh0aGlzKTsKLSAgICByZXR1cm4gcmVzb3VyY2VzICYmIHJlc291cmNlcy0+ZmlsdGVy
KCk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi12b2lkIFJlbmRlclNW
R0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQotewotICAg
IGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBTcGVjOiBncm91cHMgdy9vIGNoaWxkcmVuIHN0aWxsIG1heSByZW5kZXIg
ZmlsdGVyIGNvbnRlbnQuCi0gICAgaWYgKCFmaXJzdENoaWxkKCkgJiYgIXNlbGZXaWxsUGFpbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gcmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKLSAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBh
aW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChyZXBhaW50UmVjdCwgbG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpLCBwYWludEluZm8pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWludEluZm8g
Y2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKLSAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5z
YXZlKCk7Ci0KLSAgICAvLyBMZXQgdGhlIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyIHN1YmNs
YXNzIGNsaXAgaWYgbmVjZXNzYXJ5Ci0gICAgYXBwbHlWaWV3cG9ydENsaXAoY2hpbGRQYWludElu
Zm8pOwotCi0gICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpKTsKLQotICAgIGJvb2wgY29udGludWVSZW5kZXJpbmcgPSB0cnVlOwotICAgIGlm
IChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKLSAgICAgICAg
Y29udGludWVSZW5kZXJpbmcgPSBTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdD
b250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKTsKLQotICAgIGlmIChjb250aW51ZVJlbmRlcmlu
ZykgewotICAgICAgICBjaGlsZFBhaW50SW5mby51cGRhdGVQYWludGluZ1Jvb3RGb3JDaGlsZHJl
bih0aGlzKTsKLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIGNoaWxk
LT5wYWludChjaGlsZFBhaW50SW5mbywgMCwgMCk7Ci0gICAgfQotCi0gICAgaWYgKHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKLSAgICAgICAgU1ZHUmVuZGVyU3VwcG9y
dDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbywgcGFpbnRJbmZv
LmNvbnRleHQpOwotCi0gICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotCi0g
ICAgLy8gRklYTUU6IFRoaXMgcmVhbGx5IHNob3VsZCBiZSBkcmF3biBmcm9tIGxvY2FsIGNvb3Jk
aW5hdGVzLCBidXQgY3VycmVudGx5IHdlIGhhY2sgaXQKLSAgICAvLyB0byBhdm9pZCBvdXIgY2xp
cCBraWxsaW5nIG91ciBvdXRsaW5lIHJlY3QuICBUaHVzIHdlIHRyYW5zbGF0ZSBvdXIKLSAgICAv
LyBvdXRsaW5lIHJlY3QgaW50byBwYXJlbnQgY29vcmRzIGJlZm9yZSBkcmF3aW5nLgotICAgIC8v
IEZJWE1FOiBUaGlzIG1lYW5zIG91ciBmb2N1cyByaW5nIHdvbid0IHNoYXJlIG91ciByb3RhdGlv
biBsaWtlIGl0IHNob3VsZC4KLSAgICAvLyBXZSBzaG91bGQgaW5zdGVhZCBkaXNhYmxlIG91ciBj
bGlwIGR1cmluZyBQYWludFBoYXNlT3V0bGluZQotICAgIGlmICgocGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2VPdXRsaW5lIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91
dGxpbmUpICYmIHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIHN0eWxlKCktPnZpc2liaWxpdHko
KSA9PSBWSVNJQkxFKSB7Ci0gICAgICAgIEludFJlY3QgcGFpbnRSZWN0SW5QYXJlbnQgPSBlbmNs
b3NpbmdJbnRSZWN0KGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlcGFpbnRSZWN0
KSk7Ci0gICAgICAgIHBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4dCwgcGFpbnRSZWN0SW5Q
YXJlbnQueCgpLCBwYWludFJlY3RJblBhcmVudC55KCksIHBhaW50UmVjdEluUGFyZW50LndpZHRo
KCksIHBhaW50UmVjdEluUGFyZW50LmhlaWdodCgpKTsKLSAgICB9Ci19Ci0KLS8vIGFkZEZvY3Vz
UmluZ1JlY3RzIGlzIGNhbGxlZCBmcm9tIHBhaW50T3V0bGluZSBhbmQgbmVlZHMgdG8gYmUgaW4g
dGhlIHNhbWUgY29vcmRpbmF0ZXMgYXMgdGhlIHBhaW50T3VsaW5lIGNhbGwKLXZvaWQgUmVuZGVy
U1ZHQ29udGFpbmVyOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBp
bnQsIGludCkKLXsKLSAgICBJbnRSZWN0IHBhaW50UmVjdEluUGFyZW50ID0gZW5jbG9zaW5nSW50
UmVjdChsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkubWFwUmVjdChyZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpKSk7Ci0gICAgaWYgKCFwYWludFJlY3RJblBhcmVudC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJlY3RzLmFwcGVuZChwYWludFJlY3RJblBhcmVudCk7Ci19Ci0KLXZvaWQgUmVuZGVy
U1ZHQ29udGFpbmVyOjp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCkKLXsKLSAgICBtX29iamVjdEJv
dW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IEZsb2F0
UmVjdCgpOwotICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0KLSAgICBT
VkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyh0aGlzLCBtX29i
amVjdEJvdW5kaW5nQm94LCBtX3N0cm9rZUJvdW5kaW5nQm94LCBtX3JlcGFpbnRCb3VuZGluZ0Jv
eCk7Ci0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3Vy
Y2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKLX0KLQotYm9vbCBSZW5kZXJTVkdDb250
YWluZXI6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0
VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQotewotICAgIC8vIEdpdmUgUmVuZGVyU1ZHVmlld3Bv
cnRDb250YWluZXIgYSBjaGFuY2UgdG8gYXBwbHkgaXRzIHZpZXdwb3J0IGNsaXAKLSAgICBpZiAo
IXBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAocG9pbnRJblBhcmVudCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVG9QYXJlbnRUcmFu
c2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7Ci0KLSAgICBpZiAoIVNW
R1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAKLSAgICBmb3IgKFJlbmRlck9i
amVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3Vz
U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+bm9kZUF0RmxvYXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIGxvY2FsUG9pbnQsIGhpdFRlc3RBY3Rpb24pKSB7Ci0gICAgICAgICAgICB1cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gU3BlYzog
T25seSBncmFwaGljYWwgZWxlbWVudHMgY2FuIGJlIHRhcmdldGVkIGJ5IHRoZSBtb3VzZSwgcGVy
aW9kLgotICAgIC8vIDE2LjQ6ICJJZiB0aGVyZSBhcmUgbm8gZ3JhcGhpY3MgZWxlbWVudHMgd2hv
c2UgcmVsZXZhbnQgZ3JhcGhpY3MgY29udGVudCBpcyB1bmRlciB0aGUgcG9pbnRlciAoaS5lLiwg
dGhlcmUgaXMgbm8gdGFyZ2V0IGVsZW1lbnQpLCB0aGUgZXZlbnQgaXMgbm90IGRpc3BhdGNoZWQu
IgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCShyZXZpc2lvbiA3NTI3MikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEwMSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAgICBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAgIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVm
IFJlbmRlclNWR0NvbnRhaW5lcl9oCi0jZGVmaW5lIFJlbmRlclNWR0NvbnRhaW5lcl9oCi0KLSNp
ZiBFTkFCTEUoU1ZHKQotCi0jaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTVkdFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdD
b250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgewotcHVibGljOgotICAgIGV4
cGxpY2l0IFJlbmRlclNWR0NvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50Kik7Ci0gICAgdmlydHVh
bCB+UmVuZGVyU1ZHQ29udGFpbmVyKCk7Ci0KLSAgICBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExp
c3QqIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KLSAgICBSZW5kZXJP
YmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KLQotICAg
IHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNC
b3VuZGFyaWVzVXBkYXRlID0gdHJ1ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBSZW5k
ZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsgcmV0dXJuIGNoaWxkcmVuKCk7
IH0KLSAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQotCi0gICAgdmlydHVhbCBib29sIGlz
U1ZHQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdDb250YWluZXIiOyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9j
dXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOwotCi0gICAgdmly
dHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVj
dEJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9h
dFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3Jl
cGFpbnRCb3VuZGluZ0JveDsgfQotCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7Ci0KLSAgICAvLyBBbGxvdyBSZW5kZXJTVkdU
cmFuc2Zvcm1hYmxlQ29udGFpbmVyIHRvIGhvb2sgaW4gYXQgdGhlIHJpZ2h0IHRpbWUgaW4gbGF5
b3V0KCkKLSAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKSB7IHJldHVy
biBmYWxzZTsgfQotCi0gICAgLy8gQWxsb3cgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgdG8g
aG9vayBpbiBhdCB0aGUgcmlnaHQgdGltZXMgaW4gbGF5b3V0KCksIHBhaW50KCkgYW5kIG5vZGVB
dEZsb2F0UG9pbnQoKQotICAgIHZpcnR1YWwgdm9pZCBjYWxjVmlld3BvcnQoKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlWaWV3cG9ydENsaXAoUGFpbnRJbmZvJikgeyB9Ci0gICAgdmlydHVh
bCBib29sIHBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29uc3QgRmxvYXRQb2ludCYgLypwb2lu
dEluUGFyZW50Ki8pIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIGJvb2wgc2VsZldpbGxQYWludCgp
OwotICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwotCi1wcml2YXRlOgotICAgIFJl
bmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwotICAgIEZsb2F0UmVjdCBtX29iamVjdEJv
dW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94OwotICAgIEZsb2F0
UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKLSAgICBib29sIG1fbmVlZHNCb3VuZGFyaWVzVXBk
YXRlIDogMTsKLX07Ci0gIAotaW5saW5lIFJlbmRlclNWR0NvbnRhaW5lciogdG9SZW5kZXJTVkdD
b250YWluZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgLy8gTm90ZTogaXNTVkdDb250
YWluZXIgaXMgYWxzbyB0cnVlIGZvciBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciwgd2hpY2gg
aXMgbm90IGRlcml2ZWQgZnJvbSB0aGlzLgotICAgIEFTU0VSVCghb2JqZWN0IHx8IChvYmplY3Qt
PmlzU1ZHQ29udGFpbmVyKCkgJiYgc3RyY21wKG9iamVjdC0+cmVuZGVyTmFtZSgpLCAiUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIiKSkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJT
VkdDb250YWluZXIqPihvYmplY3QpOwotfQotCi1pbmxpbmUgY29uc3QgUmVuZGVyU1ZHQ29udGFp
bmVyKiB0b1JlbmRlclNWR0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsK
LSAgICAvLyBOb3RlOiBpc1NWR0NvbnRhaW5lciBpcyBhbHNvIHRydWUgZm9yIFJlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyLCB3aGljaCBpcyBub3QgZGVyaXZlZCBmcm9tIHRoaXMuCi0gICAgQVNT
RVJUKCFvYmplY3QgfHwgKG9iamVjdC0+aXNTVkdDb250YWluZXIoKSAmJiBzdHJjbXAob2JqZWN0
LT5yZW5kZXJOYW1lKCksICJSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciIpKSk7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR0NvbnRhaW5lcio+KG9iamVjdCk7Ci19Ci0K
LS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KLXZv
aWQgdG9SZW5kZXJTVkdDb250YWluZXIoY29uc3QgUmVuZGVyU1ZHQ29udGFpbmVyKik7Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0jZW5kaWYgLy8g
UmVuZGVyU1ZHQ29udGFpbmVyX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0dy
YWRpZW50U3RvcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
R3JhZGllbnRTdG9wLmNwcAkocmV2aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgzICswLDAgQEAK
LS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCi0gKgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR0dy
YWRpZW50U3RvcC5oIgotCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIK
LSNpbmNsdWRlICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgot
I2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCi0jaW5jbHVkZSAiU1ZHU3RvcEVsZW1lbnQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVz
OwotCi1SZW5kZXJTVkdHcmFkaWVudFN0b3A6OlJlbmRlclNWR0dyYWRpZW50U3RvcChTVkdTdG9w
RWxlbWVudCogZWxlbWVudCkKLSAgICA6IFJlbmRlck9iamVjdChlbGVtZW50KQotewotfQotCi1S
ZW5kZXJTVkdHcmFkaWVudFN0b3A6On5SZW5kZXJTVkdHcmFkaWVudFN0b3AoKQotewotfQotCi12
b2lkIFJlbmRlclNWR0dyYWRpZW50U3RvcDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICBSZW5kZXJPYmplY3Q6
OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLSAgICBpZiAoZGlmZiA9PSBTdHlsZURp
ZmZlcmVuY2VFcXVhbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gPHN0b3A+IGVsZW1lbnRz
IHNob3VsZCBvbmx5IGJlIGFsbG93ZWQgdG8gbWFrZSByZW5kZXJlcnMgdW5kZXIgZ3JhZGllbnQg
ZWxlbWVudHMKLSAgICAvLyBidXQgSSBjYW4gaW1hZ2luZSBhIGZldyBjYXNlcyB3ZSBtaWdodCBu
b3QgYmUgY2F0Y2hpbmcsIHNvIGxldCdzIG5vdCBjcmFzaCBpZiBvdXIgcGFyZW50IGlzbid0IGEg
Z3JhZGllbnQuCi0gICAgU1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudCA9IGdyYWRpZW50RWxl
bWVudCgpOwotICAgIGlmICghZ3JhZGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBncmFkaWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRl
cmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocmVuZGVyZXItPmlzU1ZHUmVzb3Vy
Y2VDb250YWluZXIoKSk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGNvbnRhaW5l
ciA9IHJlbmRlcmVyLT50b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCk7Ci0gICAgY29udGFp
bmVyLT5yZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHR3Jh
ZGllbnRTdG9wOjpsYXlvdXQoKQotewotICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKLX0KLQot
U1ZHR3JhZGllbnRFbGVtZW50KiBSZW5kZXJTVkdHcmFkaWVudFN0b3A6OmdyYWRpZW50RWxlbWVu
dCgpIGNvbnN0Ci17Ci0gICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IG5vZGUoKS0+cGFy
ZW50Tm9kZSgpOwotICAgIGlmIChwYXJlbnROb2RlLT5oYXNUYWdOYW1lKGxpbmVhckdyYWRpZW50
VGFnKSB8fCBwYXJlbnROb2RlLT5oYXNUYWdOYW1lKHJhZGlhbEdyYWRpZW50VGFnKSkKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0dyYWRpZW50RWxlbWVudCo+KHBhcmVudE5vZGUpOwot
ICAgIHJldHVybiAwOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgJKHJldmlzaW9uIDc1MjcyKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8K
LQotI2lmbmRlZiBSZW5kZXJTVkdHcmFkaWVudFN0b3BfaAotI2RlZmluZSBSZW5kZXJTVkdHcmFk
aWVudFN0b3BfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotY2xhc3MgU1ZHR3JhZGllbnRFbGVtZW50Owot
Y2xhc3MgU1ZHU3RvcEVsZW1lbnQ7Ci0KLS8vIFRoaXMgY2xhc3MgZXhpc3RzIG1vc3RseSBzbyB3
ZSBjYW4gaGVhciBhYm91dCBncmFkaWVudCBzdG9wIHN0eWxlIGNoYW5nZXMKLWNsYXNzIFJlbmRl
clNWR0dyYWRpZW50U3RvcCA6IHB1YmxpYyBSZW5kZXJPYmplY3QgewotcHVibGljOgotICAgIFJl
bmRlclNWR0dyYWRpZW50U3RvcChTVkdTdG9wRWxlbWVudCopOwotICAgIHZpcnR1YWwgflJlbmRl
clNWR0dyYWRpZW50U3RvcCgpOwotCi0gICAgdmlydHVhbCBib29sIGlzU1ZHR3JhZGllbnRTdG9w
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdHcmFkaWVudFN0b3AiOyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0KLSAgICAvLyBUaGlzIG92ZXJyaWRlcyBhcmUgbmVlZGVk
IHRvIHByZXZlbnQgQVNTRVJUcyBvbiA8c3ZnPjxzdG9wIC8+PC9zdmc+Ci0gICAgLy8gUmVuZGVy
T2JqZWN0J3MgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgQVNTRVJUX05PVF9SRUFDSEVEKCkKLSAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MDAKLSAgICB2
aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9k
ZWxPYmplY3QqKSB7IHJldHVybiBJbnRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBv
YmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9Ci0gICAgdmly
dHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBGbG9hdFJl
Y3QoKTsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KLQotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSk7Ci0KLXByaXZhdGU6Ci0gICAgU1ZHR3JhZGllbnRFbGVtZW50KiBncmFk
aWVudEVsZW1lbnQoKSBjb25zdDsKLX07Ci0KLWlubGluZSBjb25zdCBSZW5kZXJTVkdHcmFkaWVu
dFN0b3AqIHRvUmVuZGVyU1ZHR3JhZGllbnRTdG9wKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0
KQotewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdHcmFkaWVudFN0b3AoKSk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCo+KG9i
amVjdCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0jZW5kaWYgLy8gUmVuZGVy
U1ZHR3JhZGllbnRTdG9wX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRl
bkNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyLmNwcAkocmV2aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICsw
LDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCi0g
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRl
clNWR0hpZGRlbkNvbnRhaW5lci5oIgotCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgotI2lu
Y2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZW5k
ZXJTVkdIaWRkZW5Db250YWluZXI6OlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcihTVkdTdHlsZWRF
bGVtZW50KiBlbGVtZW50KQotICAgIDogUmVuZGVyU1ZHQ29udGFpbmVyKGVsZW1lbnQpCi17Ci19
Ci0KLXZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpsYXlvdXQoKQotewotICAgIEFTU0VS
VChuZWVkc0xheW91dCgpKTsKLSAgICBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbih0
aGlzLCBzZWxmTmVlZHNMYXlvdXQoKSk7IAotICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsgICAg
Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpwYWludChQYWludEluZm8mLCBp
bnQsIGludCkKLXsKLSAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgcGFpbnQuCi19Ci0KLXZv
aWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1
YWQ+JikKLXsKLSAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgdGFrZSB1cCBzcGFjZSBvciBw
YWludAotfQotCi1ib29sIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6bm9kZUF0RmxvYXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50
JiwgSGl0VGVzdEFjdGlvbikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KLQotI2VuZGlm
IC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5D
b250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRk
ZW5Db250YWluZXIuaAkocmV2aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdIaWRkZW5Db250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1OCArMCwwIEBACi0v
KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgotICoKLSAqIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRl
ZiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXJfaAotI2RlZmluZSBSZW5kZXJTVkdIaWRkZW5Db250
YWluZXJfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotICAgIGNsYXNzIFNWR1N0eWxlZEVsZW1l
bnQ7Ci0gICAgCi0gICAgLy8gVGhpcyBjbGFzcyBpcyBmb3IgY29udGFpbmVycyB3aGljaCBhcmUg
bmV2ZXIgZHJhd24sIGJ1dCBkbyBuZWVkIHRvIHN1cHBvcnQgc3R5bGUKLSAgICAvLyA8ZGVmcz4s
IDxsaW5lYXJHcmFkaWVudD4sIDxyYWRpYWxHcmFkaWVudD4gYXJlIGFsbCBnb29kIGV4YW1wbGVz
Ci0gICAgY2xhc3MgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyIDogcHVibGljIFJlbmRlclNWR0Nv
bnRhaW5lciB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBSZW5kZXJTVkdIaWRkZW5D
b250YWluZXIoU1ZHU3R5bGVkRWxlbWVudCopOwotCi0gICAgICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdIaWRkZW5Db250YWluZXIi
OyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1NWR0hpZGRlbkNvbnRhaW5lcigp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5
ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOwotICAgICAgICAKLSAgICAg
ICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJv
eE1vZGVsT2JqZWN0KikgeyByZXR1cm4gSW50UmVjdCgpOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7Ci0KLSAgICAgICAgdmlydHVhbCBi
b29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7Ci0gICAg
fTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0jZW5kaWYgLy8gUmVuZGVyU1ZHSGlkZGVu
Q29udGFpbmVyX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAJKHJldmlz
aW9uIDc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDE5NSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNiBB
bGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgotICAgIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgotICAgIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDgsIDIwMDkgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDks
IEdvb2dsZSwgSW5jLgotICAgIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBh
cm9nYUBwYXJvZ2EuY29tPgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShT
VkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHSW1hZ2UuaCIKLQotI2luY2x1ZGUgIkF0dHIuaCIKLSNp
bmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMu
aCIKLSNpbmNsdWRlICJSZW5kZXJJbWFnZVJlc291cmNlLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCi0jaW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRp
by5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJj
ZXMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZW5kZXJTVkdJbWFnZTo6UmVuZGVyU1ZH
SW1hZ2UoU1ZHSW1hZ2VFbGVtZW50KiBpbXBsKQotICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qo
aW1wbCkKLSAgICAsIG1fdXBkYXRlQ2FjaGVkUmVwYWludFJlY3QodHJ1ZSkKLSAgICAsIG1fbmVl
ZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkKLSAgICAsIG1faW1hZ2VSZXNvdXJjZShSZW5kZXJJbWFn
ZVJlc291cmNlOjpjcmVhdGUoKSkKLXsKLSAgICBtX2ltYWdlUmVzb3VyY2UtPmluaXRpYWxpemUo
dGhpcyk7Ci19Ci0KLVJlbmRlclNWR0ltYWdlOjp+UmVuZGVyU1ZHSW1hZ2UoKQotewotICAgIG1f
aW1hZ2VSZXNvdXJjZS0+c2h1dGRvd24oKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdJbWFnZTo6bGF5
b3V0KCkKLXsKLSAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0KLSAgICBMYXlvdXRSZXBhaW50
ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBzZWxm
TmVlZHNMYXlvdXQoKSk7Ci0gICAgU1ZHSW1hZ2VFbGVtZW50KiBpbWFnZSA9IHN0YXRpY19jYXN0
PFNWR0ltYWdlRWxlbWVudCo+KG5vZGUoKSk7Ci0KLSAgICBib29sIHRyYW5zZm9ybU9yQm91bmRh
cmllc1VwZGF0ZSA9IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgfHwgbV91cGRhdGVDYWNoZWRSZXBh
aW50UmVjdDsKLSAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgewotICAgICAgICBtX2xv
Y2FsVHJhbnNmb3JtID0gaW1hZ2UtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKLSAgICAgICAg
bV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtX3VwZGF0
ZUNhY2hlZFJlcGFpbnRSZWN0KSB7Ci0gICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9v
YmplY3RCb3VuZGluZ0JveDsKLSAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVw
YWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKLSAgICAg
ICAgbV91cGRhdGVDYWNoZWRSZXBhaW50UmVjdCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIElu
dmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5n
ZWQuCi0gICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkKLSAgICAg
ICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7Ci0KLSAgICAv
LyBJZiBvdXIgYm91bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4KLSAgICBpZiAodHJh
bnNmb3JtT3JCb3VuZGFyaWVzVXBkYXRlKQotICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7Ci0KLSAgICByZXBhaW50ZXIucmVwYWludEFmdGVy
TGF5b3V0KCk7Ci0gICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwotfQotCi12b2lkIFJlbmRlclNW
R0ltYWdlOjp1cGRhdGVGcm9tRWxlbWVudCgpCi17Ci0gICAgU1ZHSW1hZ2VFbGVtZW50KiBpbWFn
ZSA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudCo+KG5vZGUoKSk7Ci0KLSAgICBGbG9hdFJl
Y3Qgb2xkQm91bmRhcmllcyA9IG1fb2JqZWN0Qm91bmRpbmdCb3g7Ci0gICAgbV9vYmplY3RCb3Vu
ZGluZ0JveCA9IEZsb2F0UmVjdChpbWFnZS0+eCgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPnkoKS52
YWx1ZShpbWFnZSksIGltYWdlLT53aWR0aCgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPmhlaWdodCgp
LnZhbHVlKGltYWdlKSk7Ci0gICAgaWYgKG1fb2JqZWN0Qm91bmRpbmdCb3ggIT0gb2xkQm91bmRh
cmllcykgewotICAgICAgICBtX3VwZGF0ZUNhY2hlZFJlcGFpbnRSZWN0ID0gdHJ1ZTsKLSAgICAg
ICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7Ci0gICAgfQotICAgIFJlbmRlclNWR01vZGVsT2JqZWN0
Ojp1cGRhdGVGcm9tRWxlbWVudCgpOwotfQotCi12b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQpCi17Ci0gICAgaWYgKHBhaW50SW5mby5jb250
ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERF
TiB8fCAhbV9pbWFnZVJlc291cmNlLT5oYXNJbWFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
OwotICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRS
ZWN0KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKLSAgICBi
b29sIGRyYXdzT3V0bGluZSA9IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIChjaGlsZFBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlU2VsZk91dGxpbmUpOwotICAgIGlmIChkcmF3c091dGxpbmUgfHwgY2hpbGRQ
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKLSAgICAgICAgY2hpbGRQ
YWludEluZm8uY29udGV4dC0+c2F2ZSgpOwotICAgICAgICBjaGlsZFBhaW50SW5mby5hcHBseVRy
YW5zZm9ybShtX2xvY2FsVHJhbnNmb3JtKTsKLQotICAgICAgICBpZiAoY2hpbGRQYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKLSAgICAgICAgICAgIFBhaW50SW5mbyBz
YXZlZEluZm8oY2hpbGRQYWludEluZm8pOwotCi0gICAgICAgICAgICBpZiAoU1ZHUmVuZGVyU3Vw
cG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbykpIHsK
LSAgICAgICAgICAgICAgICBJbWFnZSogaW1hZ2UgPSBtX2ltYWdlUmVzb3VyY2UtPmltYWdlKCk7
Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gbV9vYmplY3RCb3VuZGluZ0Jv
eDsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdCgwLCAwLCBpbWFnZS0+d2lkdGgo
KSwgaW1hZ2UtPmhlaWdodCgpKTsKLQotICAgICAgICAgICAgICAgIFNWR0ltYWdlRWxlbWVudCog
aW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKLSAg
ICAgICAgICAgICAgICBpZiAoaW1hZ2VFbGVtZW50LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCkuYWxp
Z24oKSAhPSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19O
T05FKQotICAgICAgICAgICAgICAgICAgICBpbWFnZUVsZW1lbnQtPnByZXNlcnZlQXNwZWN0UmF0
aW8oKS50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNSZWN0KTsKLQotICAgICAgICAgICAgICAg
IGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3QpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBT
VkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJ
bmZvLCBzYXZlZEluZm8uY29udGV4dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZHJhd3NP
dXRsaW5lKQotICAgICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQs
IHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdCb3gueCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihib3Vu
ZGluZ0JveC55KCkpLAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdC
b3gud2lkdGgoKSksIHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdCb3guaGVpZ2h0KCkpKTsKLSAg
ICAgICAgCi0gICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICB9
Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHSW1hZ2U6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQotewotICAgIC8v
IFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10ZXN0
IHRoZW4uCi0gICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQ
b2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19JTUFHRV9ISVRURVNUSU5HLCByZXF1ZXN0LCBzdHls
ZSgpLT5wb2ludGVyRXZlbnRzKCkpOwotICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxlKCktPnZp
c2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKLSAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5y
ZXF1aXJlVmlzaWJsZSkgewotICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRv
UGFyZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwotICAg
ICAgICAgICAgCi0gICAgICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5n
QXJlYSh0aGlzLCBsb2NhbFBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBpZiAoaGl0UnVsZXMuY2FuSGl0RmlsbCkgewotICAgICAgICAgICAgaWYgKG1fb2JqZWN0
Qm91bmRpbmdCb3guY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAgICAgICB1cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJTVkdJbWFnZTo6aW1hZ2VD
aGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCopCi17Ci0gICAgLy8gVGhlIGlt
YWdlIHJlc291cmNlIGRlZmF1bHRzIHRvIG51bGxJbWFnZSB1bnRpbCB0aGUgcmVzb3VyY2UgYXJy
aXZlcy4KLSAgICAvLyBUaGlzIGVtcHR5IGltYWdlIG1heSBiZSBjYWNoZWQgYnkgU1ZHIHJlc291
cmNlcyB3aGljaCBtdXN0IGJlIGludmFsaWRhdGVkLgotICAgIGlmIChTVkdSZXNvdXJjZXMqIHJl
c291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmpl
Y3QodGhpcykpCi0gICAgICAgIHJlc291cmNlcy0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKHRoaXMp
OwotCi0gICAgLy8gRXZlbnR1YWxseSBub3RpZnkgcGFyZW50IHJlc291cmNlcywgdGhhdCB3ZSd2
ZSBjaGFuZ2VkLgotICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50
UmVzb3VyY2VJbnZhbGlkYXRpb24odGhpcywgZmFsc2UpOwotCi0gICAgcmVwYWludCgpOwotfQot
Ci12b2lkIFJlbmRlclNWR0ltYWdlOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4m
IHJlY3RzLCBpbnQsIGludCkKLXsKLSAgICAvLyB0aGlzIGlzIGNhbGxlZCBmcm9tIHBhaW50KCkg
YWZ0ZXIgdGhlIGxvY2FsVHJhbnNmb3JtIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZAotICAgIElu
dFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkpOwotICAgIGlmICghY29udGVudFJlY3QuaXNFbXB0eSgpKQotICAgICAgICBy
ZWN0cy5hcHBlbmQoY29udGVudFJlY3QpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5o
CShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MDYgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAgIENvcHlyaWdo
dCAoQykgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICAgIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUsIEluYy4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIg
PHBhcm9nYUBwYXJvZ2EuY29tPgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgUmVuZGVyU1ZHSW1hZ2VfaAotI2RlZmlu
ZSBSZW5kZXJTVkdJbWFnZV9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR01v
ZGVsT2JqZWN0LmgiCi0jaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgotI2luY2x1
ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBS
ZW5kZXJJbWFnZVJlc291cmNlOwotY2xhc3MgU1ZHSW1hZ2VFbGVtZW50OwotCi1jbGFzcyBSZW5k
ZXJTVkdJbWFnZSA6IHB1YmxpYyBSZW5kZXJTVkdNb2RlbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAg
UmVuZGVyU1ZHSW1hZ2UoU1ZHSW1hZ2VFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZH
SW1hZ2UoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsg
bV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
RnJvbUVsZW1lbnQoKTsKLQotICAgIFJlbmRlckltYWdlUmVzb3VyY2UqIGltYWdlUmVzb3VyY2Uo
KSB7IHJldHVybiBtX2ltYWdlUmVzb3VyY2UuZ2V0KCk7IH0KLSAgICBjb25zdCBSZW5kZXJJbWFn
ZVJlc291cmNlKiBpbWFnZVJlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZVJlc291cmNl
LmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1l
KCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR0ltYWdlIjsgfQotICAgIHZpcnR1YWwgYm9vbCBp
c1NWR0ltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X2xvY2FsVHJhbnNmb3JtOyB9Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGlu
Z0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFs
IEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91
bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBp
bnQgdHkpOwotCi0gICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIs
IGNvbnN0IEludFJlY3QqID0gMCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAg
dmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBI
aXRUZXN0QWN0aW9uKTsKLQotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQotCi0gICAgYm9vbCBtX3Vw
ZGF0ZUNhY2hlZFJlcGFpbnRSZWN0IDogMTsKLSAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRh
dGUgOiAxOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOwotICAgIEZsb2F0
UmVjdCBtX29iamVjdEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGlu
Z0JveDsKLSAgICBPd25QdHI8UmVuZGVySW1hZ2VSZXNvdXJjZT4gbV9pbWFnZVJlc291cmNlOwot
fTsKLQotaW5saW5lIFJlbmRlclNWR0ltYWdlKiB0b1JlbmRlclNWR0ltYWdlKFJlbmRlck9iamVj
dCogb2JqZWN0KQotewotICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdJbWFnZSgp
KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHSW1hZ2UqPihvYmplY3QpOwotfQot
Ci1pbmxpbmUgY29uc3QgUmVuZGVyU1ZHSW1hZ2UqIHRvUmVuZGVyU1ZHSW1hZ2UoY29uc3QgUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NW
R0ltYWdlKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdJbWFnZSo+
KG9iamVjdCk7Ci19Ci0KLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNl
c3NhcnkgY2FzdC4KLXZvaWQgdG9SZW5kZXJTVkdJbWFnZShjb25zdCBSZW5kZXJTVkdJbWFnZSop
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQotI2Vu
ZGlmIC8vIFJlbmRlclNWR0ltYWdlX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuaCIKLQotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCi0j
aW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJl
bmRlclNWR01vZGVsT2JqZWN0OjpSZW5kZXJTVkdNb2RlbE9iamVjdChTVkdTdHlsZWRFbGVtZW50
KiBub2RlKQotICAgIDogUmVuZGVyT2JqZWN0KG5vZGUpCi17Ci19Ci0KLUludFJlY3QgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKQotewotICAgIHJldHVybiBTVkdSZW5kZXJTdXBw
b3J0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCh0aGlzLCByZXBhaW50Q29udGFpbmVy
KTsKLX0KLQotdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiByZXBhaW50
UmVjdCwgYm9vbCBmaXhlZCkKLXsKLSAgICBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlUmVjdEZv
clJlcGFpbnQodGhpcywgcmVwYWludENvbnRhaW5lciwgcmVwYWludFJlY3QsIGZpeGVkKTsKLX0K
LQotdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCAsIGJvb2wgdXNlVHJh
bnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAotewotICAgIFNW
R1JlbmRlclN1cHBvcnQ6Om1hcExvY2FsVG9Db250YWluZXIodGhpcywgcmVwYWludENvbnRhaW5l
ciwgZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsKLX0KLQotLy8gQ29waWVk
IGZyb20gUmVuZGVyQm94LCB0aGlzIG1ldGhvZCBsaWtlbHkgcmVxdWlyZXMgZnVydGhlciByZWZh
Y3RvcmluZyB0byB3b3JrIGVhc2lseSBmb3IgYm90aCBTVkcgYW5kIENTUyBCb3ggTW9kZWwgY29u
dGVudC4KLS8vIEZJWE1FOiBUaGlzIG1heSBhbHNvIG5lZWQgdG8gbW92ZSBpbnRvIFNWR1JlbmRl
clN1cHBvcnQgYXMgdGhlIFJlbmRlckJveCB2ZXJzaW9uIGRlcGVuZHMKLS8vIG9uIGJvcmRlckJv
dW5kaW5nQm94KCkgd2hpY2ggU1ZHIFJlbmRlckJveCBzdWJjbGFzZXMgKGxpa2UgU1ZHUmVuZGVy
QmxvY2spIGRvIG5vdCBpbXBsZW1lbnQuCi1JbnRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0Ojpv
dXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciwgSW50UG9pbnQqKSBjb25zdAotewotICAgIEludFJlY3QgYm94ID0gZW5jbG9zaW5nSW50
UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBhZGp1c3RSZWN0Rm9y
T3V0bGluZUFuZFNoYWRvdyhib3gpOwotCi0gICAgRmxvYXRRdWFkIGNvbnRhaW5lclJlbGF0aXZl
UXVhZCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChib3gpLCByZXBhaW50Q29udGFp
bmVyKTsKLSAgICByZXR1cm4gY29udGFpbmVyUmVsYXRpdmVRdWFkLmVuY2xvc2luZ0JvdW5kaW5n
Qm94KCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUmVjdHMoVmVj
dG9yPEludFJlY3Q+JiwgaW50LCBpbnQpCi17Ci0gICAgLy8gVGhpcyBjb2RlIHBhdGggc2hvdWxk
IG5ldmVyIGJlIHRha2VuIGZvciBTVkcsIGFzIHdlJ3JlIGFzc3VtaW5nIHVzZVRyYW5zZm9ybXM9
dHJ1ZSBldmVyeXdoZXJlLCBhYnNvbHV0ZVF1YWRzIHNob3VsZCBiZSB1c2VkLgotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0
ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKLXsKLSAgICBxdWFkcy5hcHBlbmQobG9j
YWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3VuZGluZ0JveCgpKSk7Ci19Ci0KLXZvaWQgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OmRlc3Ryb3koKQotewotICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGll
bnREZXN0cm95ZWQodGhpcyk7Ci0gICAgUmVuZGVyT2JqZWN0OjpkZXN0cm95KCk7Ci19Ci0KLXZv
aWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2Ug
ZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQotewotICAgIGlmIChkaWZmID09IFN0
eWxlRGlmZmVyZW5jZUxheW91dCkKLSAgICAgICAgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7
Ci0gICAgUmVuZGVyT2JqZWN0OjpzdHlsZVdpbGxDaGFuZ2UoZGlmZiwgbmV3U3R5bGUpOwotfQot
Ci12b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIFJlbmRlck9iamVj
dDo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwotICAgIFNWR1Jlc291cmNlc0NhY2hl
OjpjbGllbnRTdHlsZUNoYW5nZWQodGhpcywgZGlmZiwgc3R5bGUoKSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21FbGVtZW50KCkKLXsKLSAgICBSZW5kZXJPYmpl
Y3Q6OnVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFVw
ZGF0ZWRGcm9tRWxlbWVudCh0aGlzLCBzdHlsZSgpKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgaW50LCBpbnQsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKQotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR01vZGVsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHTW9kZWxPYmplY3QuaAkocmV2aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBSZW5kZXJTVkdNb2RlbE9iamVjdF9oCi0jZGVmaW5lIFJlbmRlclNWR01vZGVsT2Jq
ZWN0X2gKLQotI2lmIEVOQUJMRShTVkcpCi0KLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNp
bmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8g
TW9zdCByZW5kZXJlcnMgaW4gdGhlIFNWRyByZW5kZXJpbmcgdHJlZSB3aWxsIGluaGVyaXQgZnJv
bSB0aGlzIGNsYXNzCi0vLyBidXQgbm90IGFsbC4gKGUuZy4gUmVuZGVyU1ZHRm9yZWlnbk9iamVj
dCwgUmVuZGVyU1ZHQmxvY2spIHRodXMgbWV0aG9kcwotLy8gcmVxdWlyZWQgYnkgU1ZHIHJlbmRl
cnMgbmVlZCB0byBiZSBkZWNsYXJlZCBvbiBSZW5kZXJPYmplY3QsIGJ1dCBzaGFyZWQKLS8vIGxv
Z2ljIGNhbiBnbyBpbiB0aGlzIGNsYXNzIG9yIGluIFNWR1JlbmRlclN1cHBvcnQuCi0KLWNsYXNz
IFNWR1N0eWxlZEVsZW1lbnQ7Ci0KLWNsYXNzIFJlbmRlclNWR01vZGVsT2JqZWN0IDogcHVibGlj
IFJlbmRlck9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QoU1ZHU3R5bGVkRWxlbWVudCopOwotCi0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNl
KTsKLSAgICB2aXJ0dWFsIEludFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFBvaW50KikgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0
eSk7Ci0gICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbWFwTG9j
YWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9v
bCB1c2VUcmFuc2Zvcm1zLCBib29sIGZpeGVkLCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5k
ZXJTdHlsZSogbmV3U3R5bGUpOwotICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG5ldmVyIGJlIGNhbGxlZCwgU1ZHIHVzZXMgYSBkaWZmZXJlbnQgbm9kZUF0UG9pbnQg
bWV0aG9kCi0gICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeEluQ29udGFpbmVyLCBpbnQgeUluQ29udGFp
bmVyLCBpbnQgZHhQYXJlbnRUb0NvbnRhaW5lciwgaW50IGR5UGFyZW50VG9Db250YWluZXIsIEhp
dFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbik7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
U1ZHKQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3Bw
CShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDA4IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZS5oIgotCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKLSNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKLSNpbmNsdWRlICJTVkdSZXNv
dXJjZXMuaCIKLSNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1zdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlKiByZXF1ZXN0UGFpbnRpbmdS
ZXNvdXJjZShSZW5kZXJTVkdSZXNvdXJjZU1vZGUgbW9kZSwgUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgQ29sb3ImIGZhbGxiYWNrQ29sb3IpCi17Ci0gICAg
QVNTRVJUKG9iamVjdCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAgIC8vIElmIHdlIGhhdmUg
bm8gc3R5bGUgYXQgYWxsLCBpZ25vcmUgaXQuCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2
Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7Ci0gICAgaWYgKCFzdmdTdHlsZSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIG5vIGZpbGwvc3Ryb2tlLCByZXR1cm4gMC4K
LSAgICBpZiAobW9kZSA9PSBBcHBseVRvRmlsbE1vZGUpIHsKLSAgICAgICAgaWYgKCFzdmdTdHls
ZS0+aGFzRmlsbCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKCFzdmdTdHlsZS0+aGFzU3Ryb2tlKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBTVkdQYWludCogcGFpbnQgPSBtb2RlID09IEFwcGx5VG9GaWxsTW9kZSA/IHN2
Z1N0eWxlLT5maWxsUGFpbnQoKSA6IHN2Z1N0eWxlLT5zdHJva2VQYWludCgpOwotICAgIEFTU0VS
VChwYWludCk7Ci0KLSAgICBTVkdQYWludDo6U1ZHUGFpbnRUeXBlIHBhaW50VHlwZSA9IHBhaW50
LT5wYWludFR5cGUoKTsKLSAgICBpZiAocGFpbnRUeXBlID09IFNWR1BhaW50OjpTVkdfUEFJTlRU
WVBFX05PTkUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ29sb3IgY29sb3I7Ci0gICAgaWYg
KHBhaW50VHlwZSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9SR0JDT0xPUgotICAgICAgICB8
fCBwYWludFR5cGUgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfUkdCQ09MT1JfSUNDQ09MT1IK
LSAgICAgICAgfHwgcGFpbnRUeXBlID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1VSSV9SR0JD
T0xPUgotICAgICAgICB8fCBwYWludFR5cGUgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfVVJJ
X1JHQkNPTE9SX0lDQ0NPTE9SKQotICAgICAgICBjb2xvciA9IHBhaW50LT5jb2xvcigpOwotICAg
IGVsc2UgaWYgKHBhaW50VHlwZSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09M
T1IgfHwgcGFpbnRUeXBlID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1VSSV9DVVJSRU5UQ09M
T1IpCi0gICAgICAgIGNvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKTsKLQotICAgIGlmIChzdHlsZS0+aW5zaWRlTGluaygpID09IEluc2lkZVZpc2l0
ZWRMaW5rKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiB2aXNpdGVkU3R5bGUgPSBzdHlsZS0+Z2V0
Q2FjaGVkUHNldWRvU3R5bGUoVklTSVRFRF9MSU5LKTsKLSAgICAgICAgQVNTRVJUKHZpc2l0ZWRT
dHlsZSk7Ci0KLSAgICAgICAgaWYgKFNWR1BhaW50KiB2aXNpdGVkUGFpbnQgPSBtb2RlID09IEFw
cGx5VG9GaWxsTW9kZSA/IHZpc2l0ZWRTdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbFBhaW50KCkgOiB2
aXNpdGVkU3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZVBhaW50KCkpIHsKLSAgICAgICAgICAgIC8v
IEZvciBTVkdfUEFJTlRUWVBFX0NVUlJFTlRDT0xPUiwgJ2NvbG9yJyBhbHJlYWR5IGNvbnRhaW5z
IHRoZSAndmlzaXRlZENvbG9yJy4KLSAgICAgICAgICAgIGlmICh2aXNpdGVkUGFpbnQtPnBhaW50
VHlwZSgpIDwgU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfVVJJX05PTkUgJiYgdmlzaXRlZFBhaW50
LT5wYWludFR5cGUoKSAhPSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IpIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBDb2xvciYgdmlzaXRlZENvbG9yID0gdmlzaXRlZFBhaW50
LT5jb2xvcigpOwotICAgICAgICAgICAgICAgIGlmICh2aXNpdGVkQ29sb3IuaXNWYWxpZCgpKQot
ICAgICAgICAgICAgICAgICAgICBjb2xvciA9IENvbG9yKHZpc2l0ZWRDb2xvci5yZWQoKSwgdmlz
aXRlZENvbG9yLmdyZWVuKCksIHZpc2l0ZWRDb2xvci5ibHVlKCksIGNvbG9yLmFscGhhKCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHByaW1hcnkg
cmVzb3VyY2UgaXMganVzdCBhIGNvbG9yLCByZXR1cm4gaW1tZWRpYXRlbHkuCi0gICAgUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBjb2xvclJlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6
OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwotICAgIGlmIChwYWludFR5cGUgPCBTVkdQ
YWludDo6U1ZHX1BBSU5UVFlQRV9VUklfTk9ORSkgewotICAgICAgICAvLyBJZiBhbiBpbnZhbGlk
IGZpbGwgY29sb3IgaXMgc3BlY2lmaWVkLCBmYWxsYmFjayB0byBmaWxsL3N0cm9rZT0ibm9uZSIu
Ci0gICAgICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAgICAgY29sb3JSZXNvdXJjZS0+c2V0Q29sb3IoY29sb3IpOwotICAgICAgICByZXR1cm4g
Y29sb3JSZXNvdXJjZTsKLSAgICB9Ci0KLSAgICAvLyBJZiBubyByZXNvdXJjZXMgYXJlIGFzc29j
aWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcmVuZGVyZXIsIHJldHVybiB0aGUgY29sb3IgcmVzb3VyY2Uu
Ci0gICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVk
UmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KG9iamVjdCk7Ci0gICAgaWYgKCFyZXNvdXJjZXMpIHsK
LSAgICAgICAgLy8gSWYgYSBwYWludCBzZXJ2ZXIgaXMgc3BlY2lmaWVkLCBhbmQgbm8gb3IgYW4g
aW52YWxpZCBmYWxsYmFjayBjb2xvciBpcyBnaXZlbiwgZGVmYXVsdCB0byBmaWxsL3N0cm9rZT0i
YmxhY2siLgotICAgICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGNvbG9y
ID0gQ29sb3I6OmJsYWNrOwotCi0gICAgICAgIGNvbG9yUmVzb3VyY2UtPnNldENvbG9yKGNvbG9y
KTsKLSAgICAgICAgcmV0dXJuIGNvbG9yUmVzb3VyY2U7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhl
IHJlcXVlc3RlZCByZXNvdXJjZSBpcyBub3QgYXZhaWxhYmxlLCByZXR1cm4gdGhlIGNvbG9yIHJl
c291cmNlLgotICAgIFJlbmRlclNWR1Jlc291cmNlKiB1cmlSZXNvdXJjZSA9IG1vZGUgPT0gQXBw
bHlUb0ZpbGxNb2RlID8gcmVzb3VyY2VzLT5maWxsKCkgOiByZXNvdXJjZXMtPnN0cm9rZSgpOwot
ICAgIGlmICghdXJpUmVzb3VyY2UpIHsKLSAgICAgICAgLy8gSWYgYSBwYWludCBzZXJ2ZXIgaXMg
c3BlY2lmaWVkLCBhbmQgbm8gb3IgYW4gaW52YWxpZCBmYWxsYmFjayBjb2xvciBpcyBnaXZlbiwg
ZGVmYXVsdCB0byBmaWxsL3N0cm9rZT0iYmxhY2siLgotICAgICAgICBpZiAoIWNvbG9yLmlzVmFs
aWQoKSkKLSAgICAgICAgICAgIGNvbG9yID0gQ29sb3I6OmJsYWNrOwotCi0gICAgICAgIGNvbG9y
UmVzb3VyY2UtPnNldENvbG9yKGNvbG9yKTsKLSAgICAgICAgcmV0dXJuIGNvbG9yUmVzb3VyY2U7
Ci0gICAgfQotCi0gICAgLy8gVGhlIHBhaW50IHNlcnZlciByZXNvdXJjZSBleGlzdHMsIHRob3Vn
aCBpdCBtYXkgYmUgaW52YWxpZCAocGF0dGVybiB3aXRoIHdpZHRoL2hlaWdodD0wKS4gUGFzcyB0
aGUgZmFsbGJhY2sgY29sb3IgdG8gb3VyIGNhbGxlcgotICAgIC8vIHNvIGl0IGNhbiB1c2UgdGhl
IHNvbGlkIGNvbG9yIHBhaW50aW5nIHJlc291cmNlLCBpZiBhcHBseVJlc291cmNlKCkgb24gdGhl
IFVSSSByZXNvdXJjZSBmYWlsZWQuCi0gICAgZmFsbGJhY2tDb2xvciA9IGNvbG9yOwotICAgIHJl
dHVybiB1cmlSZXNvdXJjZTsKLX0KLQotUmVuZGVyU1ZHUmVzb3VyY2UqIFJlbmRlclNWR1Jlc291
cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBDb2xvciYgZmFsbGJhY2tDb2xvcikKLXsKLSAgICByZXR1cm4gcmVx
dWVzdFBhaW50aW5nUmVzb3VyY2UoQXBwbHlUb0ZpbGxNb2RlLCBvYmplY3QsIHN0eWxlLCBmYWxs
YmFja0NvbG9yKTsKLX0KLQotUmVuZGVyU1ZHUmVzb3VyY2UqIFJlbmRlclNWR1Jlc291cmNlOjpz
dHJva2VQYWludGluZ1Jlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUsIENvbG9yJiBmYWxsYmFja0NvbG9yKQotewotICAgIHJldHVybiByZXF1ZXN0
UGFpbnRpbmdSZXNvdXJjZShBcHBseVRvU3Ryb2tlTW9kZSwgb2JqZWN0LCBzdHlsZSwgZmFsbGJh
Y2tDb2xvcik7Ci19Ci0KLVJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogUmVuZGVyU1ZHUmVz
b3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpCi17Ci0gICAgc3RhdGljIFJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvciogc19zaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UgPSAw
OwotICAgIGlmICghc19zaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UpCi0gICAgICAgIHNfc2hh
cmVkU29saWRQYWludGluZ1Jlc291cmNlID0gbmV3IFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
cjsKLSAgICByZXR1cm4gc19zaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2U7Ci19Ci0KLXZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRh
dGlvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgYm9vbCBuZWVkc0xheW91dCkKLXsKLSAgICBBU1NF
UlQob2JqZWN0KTsKLSAgICBpZiAobmVlZHNMYXlvdXQpCi0gICAgICAgIG9iamVjdC0+c2V0TmVl
ZHNMYXlvdXQodHJ1ZSk7Ci0KLSAgICAvLyBJbnZhbGlkYXRlIHJlc291cmNlcyBpbiBhbmNlc3Rv
ciBjaGFpbiwgaWYgbmVlZGVkLgotICAgIFJlbmRlck9iamVjdCogY3VycmVudCA9IG9iamVjdC0+
cGFyZW50KCk7Ci0gICAgd2hpbGUgKGN1cnJlbnQpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlz
U1ZHUmVzb3VyY2VDb250YWluZXIoKSkgewotICAgICAgICAgICAgY3VycmVudC0+dG9SZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcigpLT5yZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5w
YXJlbnQoKTsKLSAgICB9Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlLmgJKHJldmlzaW9uIDc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlX2gKLSNkZWZp
bmUgUmVuZGVyU1ZHUmVzb3VyY2VfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5k
ZXJTdHlsZUNvbnN0YW50cy5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHsKLSAg
ICBNYXNrZXJSZXNvdXJjZVR5cGUsCi0gICAgTWFya2VyUmVzb3VyY2VUeXBlLAotICAgIFBhdHRl
cm5SZXNvdXJjZVR5cGUsCi0gICAgTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGUsCi0gICAgUmFk
aWFsR3JhZGllbnRSZXNvdXJjZVR5cGUsCi0gICAgU29saWRDb2xvclJlc291cmNlVHlwZSwKLSAg
ICBGaWx0ZXJSZXNvdXJjZVR5cGUsCi0gICAgQ2xpcHBlclJlc291cmNlVHlwZQotfTsKLQotZW51
bSBSZW5kZXJTVkdSZXNvdXJjZU1vZGUgewotICAgIEFwcGx5VG9EZWZhdWx0TW9kZSA9IDEgPDwg
MCwgLy8gdXNlZCBmb3IgYWxsIHJlc291cmNlcyBleGNlcHQgZ3JhZGllbnQvcGF0dGVybgotICAg
IEFwcGx5VG9GaWxsTW9kZSAgICA9IDEgPDwgMSwKLSAgICBBcHBseVRvU3Ryb2tlTW9kZSAgPSAx
IDw8IDIsCi0gICAgQXBwbHlUb1RleHRNb2RlICAgID0gMSA8PCAzIC8vIHVzZWQgaW4gY29tYmlu
YXRpb24gd2l0aCBBcHBseVRve0ZpbGx8U3Ryb2tlfU1vZGUKLX07Ci0KLWNsYXNzIENvbG9yOwot
Y2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgUGF0aDsKLWNs
YXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclN0eWxlOwotY2xhc3MgUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yOwotCi1jbGFzcyBSZW5kZXJTVkdSZXNvdXJjZSB7Ci1wdWJsaWM6Ci0g
ICAgUmVuZGVyU1ZHUmVzb3VyY2UoKSB7IH0KLSAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSZXNvdXJj
ZSgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9v
bCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9u
ID0gdHJ1ZSkgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2Jq
ZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVz
b3VyY2VNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCop
IHsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2Jq
ZWN0KikgPSAwOwotCi0gICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VU
eXBlKCkgY29uc3QgPSAwOwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgUmVuZGVyZXI+Ci0gICAgUmVu
ZGVyZXIqIGNhc3QoKQotICAgIHsKLSAgICAgICAgaWYgKFJlbmRlcmVyOjpzX3Jlc291cmNlVHlw
ZSA9PSByZXNvdXJjZVR5cGUoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJlcio+KHRoaXMpOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIEhlbHBl
ciB1dGlsaXRpZXMgdXNlZCBpbiB0aGUgcmVuZGVyIHRyZWUgdG8gYWNjZXNzIHJlc291cmNlcyB1
c2VkIGZvciBwYWludGluZyBzaGFwZXMvdGV4dCAoZ3JhZGllbnRzICYgcGF0dGVybnMgJiBzb2xp
ZCBjb2xvcnMgb25seSkKLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGlu
Z1Jlc291cmNlKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiwgQ29sb3ImIGZhbGxi
YWNrQ29sb3IpOwotICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdS
ZXNvdXJjZShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSosIENvbG9yJiBmYWxsYmFj
a0NvbG9yKTsKLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBzaGFyZWRT
b2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKLQotICAgIHN0YXRpYyB2b2lkIG1hcmtGb3JMYXlvdXRB
bmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihSZW5kZXJPYmplY3QqLCBib29sIG5lZWRzTGF5
b3V0ID0gdHJ1ZSk7Ci19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAJKHJldmlzaW9uIDc1Mjcy
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwzNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
LSAqICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5o
IgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3Qu
aCIKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
LSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1
ZGUgIlNWR0NsaXBQYXRoRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNs
dWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNs
dWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCi0jaW5j
bHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCi0jaW5jbHVkZSAiU1ZHVXNl
RWxlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVJlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6
OnNfcmVzb3VyY2VUeXBlID0gQ2xpcHBlclJlc291cmNlVHlwZTsKLQotUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIoU1ZHQ2xpcFBhdGhFbGVtZW50KiBu
b2RlKQotICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKLSAgICAsIG1faW52
YWxpZGF0aW9uQmxvY2tlZChmYWxzZSkKLXsKLX0KLQotUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
Ojp+UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKCkKLXsKLSAgICBpZiAobV9jbGlwcGVyLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVsZXRlQWxsVmFsdWVzKG1fY2xpcHBlcik7
Ci0gICAgbV9jbGlwcGVyLmNsZWFyKCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyOjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbikK
LXsKLSAgICBpZiAobV9pbnZhbGlkYXRpb25CbG9ja2VkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2NsaXBCb3VuZGFyaWVzID0gRmxvYXRSZWN0KCk7Ci0gICAgaWYgKCFtX2NsaXBwZXIuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2NsaXBwZXIpOwotICAgICAgICBt
X2NsaXBwZXIuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBtYXJrQWxsQ2xpZW50c0ZvckludmFsaWRh
dGlvbihtYXJrRm9ySW52YWxpZGF0aW9uID8gTGF5b3V0QW5kQm91bmRhcmllc0ludmFsaWRhdGlv
biA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCogY2xpZW50LCBib29s
IG1hcmtGb3JJbnZhbGlkYXRpb24pCi17Ci0gICAgQVNTRVJUKGNsaWVudCk7Ci0gICAgaWYgKG1f
aW52YWxpZGF0aW9uQmxvY2tlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY2xpcHBl
ci5jb250YWlucyhjbGllbnQpKQotICAgICAgICBkZWxldGUgbV9jbGlwcGVyLnRha2UoY2xpZW50
KTsKLQotICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxp
ZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24p
OwotfQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0
LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpCi17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0g
ICAgQVNTRVJUKGNvbnRleHQpOwotI2lmbmRlZiBOREVCVUcKLSAgICBBU1NFUlQocmVzb3VyY2VN
b2RlID09IEFwcGx5VG9EZWZhdWx0TW9kZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZXNv
dXJjZU1vZGUpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gYXBwbHlDbGlwcGluZ1RvQ29udGV4dChv
YmplY3QsIG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKSwgb2JqZWN0LT5yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpLCBjb250ZXh0KTsKLX0KLQotYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXI6OnBhdGhPbmx5Q2xpcHBpbmcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94KQotewotICAgIC8vIElmIHRoZSBjdXJyZW50
IGNsaXAtcGF0aCBnZXRzIGNsaXBwZWQgaXRzZWxmLCB3ZSBoYXZlIHRvIGZhbGxiYWNrIHRvIG1h
c2tpbmcuCi0gICAgaWYgKCFzdHlsZSgpLT5zdmdTdHlsZSgpLT5jbGlwcGVyUmVzb3VyY2UoKS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBXaW5kUnVsZSBjbGlwUnVsZSA9
IFJVTEVfTk9OWkVSTzsKLSAgICBQYXRoIGNsaXBQYXRoID0gUGF0aCgpOwotCi0gICAgLy8gSWYg
Y2xpcC1wYXRoIG9ubHkgY29udGFpbnMgb25lIHZpc2libGUgc2hhcGUgb3IgcGF0aCwgd2UgY2Fu
IHVzZSBwYXRoLWJhc2VkIGNsaXBwaW5nLiBJbnZpc2libGUKLSAgICAvLyBzaGFwZXMgZG9uJ3Qg
YWZmZWN0IHRoZSBjbGlwcGluZyBhbmQgY2FuIGJlIGlnbm9yZWQuIElmIGNsaXAtcGF0aCBjb250
YWlucyBtb3JlIHRoYW4gb25lCi0gICAgLy8gdmlzaWJsZSBzaGFwZSwgdGhlIGFkZGl0aXZlIGNs
aXBwaW5nIG1heSBub3Qgd29yaywgY2F1c2VkIGJ5IHRoZSBjbGlwUnVsZS4gRXZlbk9kZAotICAg
IC8vIGFzIHdlbGwgYXMgTm9uWmVybyBjYW4gY2F1c2Ugc2VsZi1jbGlwcGluZyBvZiB0aGUgZWxl
bWVudHMuCi0gICAgLy8gU2VlIGFsc28gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL3BhaW50aW5n
Lmh0bWwjRmlsbFJ1bGVQcm9wZXJ0eQotICAgIGZvciAoTm9kZSogY2hpbGROb2RlID0gbm9kZSgp
LT5maXJzdENoaWxkKCk7IGNoaWxkTm9kZTsgY2hpbGROb2RlID0gY2hpbGROb2RlLT5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJl
bmRlcmVyKCk7Ci0gICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgLy8gT25seSBzaGFwZXMgb3IgcGF0aHMgYXJlIHN1cHBvcnRlZCBmb3IgZGlyZWN0
IGNsaXBwaW5nLiBXZSBuZWVkIHRvIGZhbGxiYWNrIHRvIG1hc2tpbmcgZm9yIHRleHRzLgotICAg
ICAgICBpZiAocmVuZGVyZXItPmlzU1ZHVGV4dCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihjaGlsZE5vZGUpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCog
c3R5bGVkID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihjaGls
ZE5vZGUpOwotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsK
LSAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+ZGlzcGxheSgpID09IE5PTkUgfHwgc3R5bGUt
PnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQotICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKLSAg
ICAgICAgLy8gQ3VycmVudCBzaGFwZSBpbiBjbGlwLXBhdGggZ2V0cyBjbGlwcGVkIHRvby4gRmFs
bGJhY2sgdG8gbWFza2luZy4KLSAgICAgICAgaWYgKCFzdmdTdHlsZS0+Y2xpcHBlclJlc291cmNl
KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBGYWxs
YmFjayB0byBtYXNraW5nLCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGNsaXBwaW5nIHBhdGgu
Ci0gICAgICAgIGlmIChjbGlwUGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHN0eWxlZC0+
dG9DbGlwUGF0aChjbGlwUGF0aCk7Ci0gICAgICAgICAgICBjbGlwUnVsZSA9IHN2Z1N0eWxlLT5j
bGlwUnVsZSgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgLy8gT25seSBvbmUgdmlzaWJsZSBzaGFwZS9wYXRoIHdhcyBmb3VuZC4gRGlyZWN0
bHkgY29udGludWUgY2xpcHBpbmcgYW5kIHRyYW5zZm9ybSB0aGUgY29udGVudCB0byB1c2Vyc3Bh
Y2UgaWYgbmVjZXNzYXJ5LgotICAgIGlmIChzdGF0aWNfY2FzdDxTVkdDbGlwUGF0aEVsZW1lbnQq
Pihub2RlKCkpLT5jbGlwUGF0aFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YKSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07
Ci0gICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgpLCBvYmpl
Y3RCb3VuZGluZ0JveC55KCkpOwotICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKG9i
amVjdEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpKTsKLSAg
ICAgICAgY2xpcFBhdGgudHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgfQotICAgIC8vIFRoZSBT
Vkcgc3BlY2lmaWNhdGlvbiB3YW50cyB1cyB0byBjbGlwIGV2ZXJ5dGhpbmcsIGlmIGNsaXAtcGF0
aCBkb2Vzbid0IGhhdmUgYSBjaGlsZC4KLSAgICBpZiAoY2xpcFBhdGguaXNFbXB0eSgpKQotICAg
ICAgICBjbGlwUGF0aC5hZGRSZWN0KEZsb2F0UmVjdCgpKTsKLSAgICBjb250ZXh0LT5jbGlwUGF0
aChjbGlwUGF0aCwgY2xpcFJ1bGUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbmRl
clNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJPYmplY3Qq
IG9iamVjdCwgY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVj
dCYgcmVwYWludFJlY3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBpZiAoIW1f
Y2xpcHBlci5jb250YWlucyhvYmplY3QpKQotICAgICAgICBtX2NsaXBwZXIuc2V0KG9iamVjdCwg
bmV3IENsaXBwZXJEYXRhKTsKLQotICAgIGJvb2wgc2hvdWxkQ3JlYXRlQ2xpcERhdGEgPSBmYWxz
ZTsKLSAgICBDbGlwcGVyRGF0YSogY2xpcHBlckRhdGEgPSBtX2NsaXBwZXIuZ2V0KG9iamVjdCk7
Ci0gICAgaWYgKCFjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZSkgewotICAgICAgICBpZiAocGF0
aE9ubHlDbGlwcGluZyhjb250ZXh0LCBvYmplY3RCb3VuZGluZ0JveCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgc2hvdWxkQ3JlYXRlQ2xpcERhdGEgPSB0cnVlOwotICAgIH0K
LQotICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBTVkdJbWFnZUJ1
ZmZlclRvb2xzOjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0
ZVN5c3RlbShvYmplY3QsIGFic29sdXRlVHJhbnNmb3JtKTsKLQotICAgIEZsb2F0UmVjdCBhYnNv
bHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHJlcGFpbnRSZWN0KTsK
LSAgICBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVy
VG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcihvYmplY3QsIGFic29s
dXRlVGFyZ2V0UmVjdCk7Ci0KLSAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcERhdGEgJiYgIWNsYW1w
ZWRBYnNvbHV0ZVRhcmdldFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmICghU1ZHSW1hZ2VC
dWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVUYXJnZXRSZWN0LCBjbGFtcGVk
QWJzb2x1dGVUYXJnZXRSZWN0LCBjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZSwgQ29sb3JTcGFj
ZURldmljZVJHQikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KiBtYXNrQ29udGV4dCA9IGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlLT5jb250
ZXh0KCk7Ci0gICAgICAgIEFTU0VSVChtYXNrQ29udGV4dCk7Ci0KLSAgICAgICAgLy8gVGhlIHNh
dmUvcmVzdG9yZSBwYWlyIGlzIG5lZWRlZCBmb3IgY2xpcFRvSW1hZ2VCdWZmZXIgLSBpdCBkb2Vz
bid0IHdvcmsgd2l0aG91dCBpdCBvbiBub24tQ2cgcGxhdGZvcm1zLgotICAgICAgICBtYXNrQ29u
dGV4dC0+c2F2ZSgpOwotICAgICAgICBtYXNrQ29udGV4dC0+dHJhbnNsYXRlKC1jbGFtcGVkQWJz
b2x1dGVUYXJnZXRSZWN0LngoKSwgLWNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QueSgpKTsKLSAg
ICAgICAgbWFza0NvbnRleHQtPmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0KLSAgICAg
ICAgLy8gY2xpcFBhdGggY2FuIGFsc28gYmUgY2xpcHBlZCBieSBhbm90aGVyIGNsaXBQYXRoLgot
ICAgICAgICBpZiAoU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6
Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHRoaXMpKSB7Ci0gICAgICAgICAgICBpZiAo
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gcmVzb3VyY2VzLT5jbGlwcGVyKCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIWNsaXBwZXItPmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQo
dGhpcywgb2JqZWN0Qm91bmRpbmdCb3gsIHJlcGFpbnRSZWN0LCBtYXNrQ29udGV4dCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbWFza0NvbnRleHQtPnJlc3RvcmUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGRyYXdDb250ZW50SW50b01hc2tJbWFnZShjbGlwcGVyRGF0YSwg
b2JqZWN0Qm91bmRpbmdCb3gpOwotICAgICAgICBtYXNrQ29udGV4dC0+cmVzdG9yZSgpOwotICAg
IH0KLQotICAgIGlmICghY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsaXBUb0ltYWdlQnVmZmVyKGNv
bnRleHQsIGFic29sdXRlVHJhbnNmb3JtLCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBjbGlw
cGVyRGF0YS0+Y2xpcE1hc2tJbWFnZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UoQ2xpcHBlckRh
dGEqIGNsaXBwZXJEYXRhLCBjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94KQotewot
ICAgIEFTU0VSVChjbGlwcGVyRGF0YSk7Ci0gICAgQVNTRVJUKGNsaXBwZXJEYXRhLT5jbGlwTWFz
a0ltYWdlKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0NvbnRleHQgPSBjbGlwcGVyRGF0
YS0+Y2xpcE1hc2tJbWFnZS0+Y29udGV4dCgpOwotICAgIEFTU0VSVChtYXNrQ29udGV4dCk7Ci0K
LSAgICBBZmZpbmVUcmFuc2Zvcm0gbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKLSAgICBTVkdD
bGlwUGF0aEVsZW1lbnQqIGNsaXBQYXRoID0gc3RhdGljX2Nhc3Q8U1ZHQ2xpcFBhdGhFbGVtZW50
Kj4obm9kZSgpKTsKLSAgICBpZiAoY2xpcFBhdGgtPmNsaXBQYXRoVW5pdHMoKSA9PSBTVkdVbml0
VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAgICAgbWFza0Nv
bnRlbnRUcmFuc2Zvcm1hdGlvbi50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgpLCBvYmpl
Y3RCb3VuZGluZ0JveC55KCkpOwotICAgICAgICBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uLnNj
YWxlTm9uVW5pZm9ybShvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpLCBvYmplY3RCb3VuZGluZ0Jv
eC5oZWlnaHQoKSk7Ci0gICAgICAgIG1hc2tDb250ZXh0LT5jb25jYXRDVE0obWFza0NvbnRlbnRU
cmFuc2Zvcm1hdGlvbik7Ci0gICAgfQotCi0gICAgLy8gRHJhdyBhbGwgY2xpcFBhdGggY2hpbGRy
ZW4gaW50byBhIGdsb2JhbCBtYXNrLgotICAgIGZvciAoTm9kZSogY2hpbGROb2RlID0gbm9kZSgp
LT5maXJzdENoaWxkKCk7IGNoaWxkTm9kZTsgY2hpbGROb2RlID0gY2hpbGROb2RlLT5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJl
bmRlcmVyKCk7Ci0gICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVy
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOwotICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5kaXNwbGF5KCkg
PT0gTk9ORSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBXaW5kUnVsZSBuZXdDbGlwUnVsZSA9IHN0eWxlLT5zdmdTdHls
ZSgpLT5jbGlwUnVsZSgpOwotICAgICAgICBib29sIGlzVXNlRWxlbWVudCA9IHJlbmRlcmVyLT5p
c1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCk7Ci0gICAgICAgIGlmIChpc1VzZUVsZW1lbnQp
IHsKLSAgICAgICAgICAgIFNWR1VzZUVsZW1lbnQqIHVzZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdVc2VFbGVtZW50Kj4oY2hpbGROb2RlKTsKLSAgICAgICAgICAgIHJlbmRlcmVyID0gdXNlRWxl
bWVudC0+cmVuZGVyZXJDbGlwQ2hpbGQoKTsKLSAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXVzZUVsZW1lbnQtPmhh
c0F0dHJpYnV0ZShTVkdOYW1lczo6Y2xpcF9ydWxlQXR0cikpCi0gICAgICAgICAgICAgICAgbmV3
Q2xpcFJ1bGUgPSByZW5kZXJlci0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2xpcFJ1bGUoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIE9ubHkgc2hhcGVzLCBwYXRocyBhbmQgdGV4dHMgYXJlIGFs
bG93ZWQgZm9yIGNsaXBwaW5nLgotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgoKSAm
JiAhcmVuZGVyZXItPmlzU1ZHVGV4dCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgLy8gU2F2ZSB0aGUgb2xkIFJlbmRlclN0eWxlIG9mIHRoZSBjdXJyZW50IG9iamVjdCBmb3Ig
cmVzdG9yaW5nIGFmdGVyIGRyYXdpbmcKLSAgICAgICAgLy8gaXQgdG8gdGhlIE1hc2tJbWFnZS4g
VGhlIG5ldyBpbnRlcm1lZGlhdGUgUmVuZGVyU3R5bGUgbmVlZHMgdG8gaW5oZXJpdCBmcm9tCi0g
ICAgICAgIC8vIHRoZSBvbGQgb25lLgotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9sZFJl
bmRlclN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gbmV3UmVuZGVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUob2xkUmVuZGVyU3R5bGUuZ2V0
KCkpOwotICAgICAgICBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBuZXdSZW5kZXJTdHlsZS5n
ZXQoKS0+YWNjZXNzU1ZHU3R5bGUoKTsKLSAgICAgICAgc3ZnU3R5bGUtPnNldEZpbGxQYWludChT
VkdQYWludDo6ZGVmYXVsdEZpbGwoKSk7Ci0gICAgICAgIHN2Z1N0eWxlLT5zZXRTdHJva2VQYWlu
dChTVkdQYWludDo6ZGVmYXVsdFN0cm9rZSgpKTsKLSAgICAgICAgc3ZnU3R5bGUtPnNldEZpbGxS
dWxlKG5ld0NsaXBSdWxlKTsKLSAgICAgICAgbmV3UmVuZGVyU3R5bGUuZ2V0KCktPnNldE9wYWNp
dHkoMS4wZik7Ci0gICAgICAgIHN2Z1N0eWxlLT5zZXRGaWxsT3BhY2l0eSgxLjBmKTsKLSAgICAg
ICAgc3ZnU3R5bGUtPnNldFN0cm9rZU9wYWNpdHkoMS4wZik7Ci0gICAgICAgIHN2Z1N0eWxlLT5z
ZXRGaWx0ZXJSZXNvdXJjZShTdHJpbmcoKSk7Ci0gICAgICAgIHN2Z1N0eWxlLT5zZXRNYXNrZXJS
ZXNvdXJjZShTdHJpbmcoKSk7Ci0KLSAgICAgICAgLy8gVGhlIHNldFN0eWxlKCkgY2FsbCByZXN1
bHRzIGluIGEgc3R5bGVEaWRDaGFuZ2UoKSBjYWxsLCB3aGljaCBpbiB0dXJuIGludmFsaWRhdGlv
bnMgdGhlIHJlc291cmNlcy4KLSAgICAgICAgLy8gQXMgd2UncmUgbXV0YXRpbmcgdGhlIHJlc291
cmNlIG9uIHB1cnBvc2UsIGJsb2NrIHVwZGF0ZXMgdW50aWwgd2UndmUgcmVzZXR0ZWQgdGhlIHN0
eWxlIGFnYWluLgotICAgICAgICBtX2ludmFsaWRhdGlvbkJsb2NrZWQgPSB0cnVlOwotICAgICAg
ICByZW5kZXJlci0+c2V0U3R5bGUobmV3UmVuZGVyU3R5bGUucmVsZWFzZSgpKTsKLQotICAgICAg
ICAvLyBJbiB0aGUgY2FzZSBvZiBhIDx1c2U+IGVsZW1lbnQsIHdlIG9idGFpbmVkIGl0cyByZW5k
ZXJlcmUgYWJvdmUsIHRvIHJldHJpZXZlIGl0cyBjbGlwUnVsZS4KLSAgICAgICAgLy8gV2UgaGF2
ZSB0byBwYXNzIHRoZSA8dXNlPiByZW5kZXJlciBpdHNlbGYgdG8gcmVuZGVyU3VidHJlZVRvSW1h
Z2VCdWZmZXIoKSB0byBhcHBseSBpdCdzIHgveS90cmFuc2Zvcm0vZXRjLiB2YWx1ZXMgd2hlbiBy
ZW5kZXJpbmcuCi0gICAgICAgIC8vIFNvIGlmIGlzVXNlRWxlbWVudCBpcyB0cnVlLCByZWZldGNo
IHRoZSBjaGlsZE5vZGUtPnJlbmRlcmVyKCksIGFzIHJlbmRlcmVyIGdvdCBvdmVycmlkZW4gYWJv
dmUuCi0gICAgICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVm
ZmVyKGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlLmdldCgpLCBpc1VzZUVsZW1lbnQgPyBjaGls
ZE5vZGUtPnJlbmRlcmVyKCkgOiByZW5kZXJlciwgbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbik7
Ci0KLSAgICAgICAgcmVuZGVyZXItPnNldFN0eWxlKG9sZFJlbmRlclN0eWxlLnJlbGVhc2UoKSk7
Ci0gICAgICAgIG1faW52YWxpZGF0aW9uQmxvY2tlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRl
Q2xpcENvbnRlbnRSZXBhaW50UmVjdCgpCi17Ci0gICAgLy8gVGhpcyBpcyBhIHJvdWdoIGhldXJp
c3RpYyB0byBhcHByYWlzZSB0aGUgY2xpcCBzaXplIGFuZCBkb2Vzbid0IGNvbnNpZGVyIGNsaXAg
b24gY2xpcC4KLSAgICBmb3IgKE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUoKS0+Zmlyc3RDaGlsZCgp
OyBjaGlsZE5vZGU7IGNoaWxkTm9kZSA9IGNoaWxkTm9kZS0+bmV4dFNpYmxpbmcoKSkgewotICAg
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2RlLT5yZW5kZXJlcigpOwotICAg
ICAgICBpZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0Vs
ZW1lbnQqPihjaGlsZE5vZGUpLT5pc1N0eWxlZCgpIHx8ICFyZW5kZXJlcikKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgoKSAmJiAhcmVuZGVy
ZXItPmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5l
cigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IHJlbmRlcmVyLT5zdHlsZSgpOwotICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5kaXNwbGF5
KCkgPT0gTk9ORSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCi0gICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIG1fY2xpcEJvdW5kYXJpZXMudW5pdGUocmVuZGVyZXItPmxv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpKSk7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlQ2xp
cHBlcjo6aGl0VGVzdENsaXBDb250ZW50KGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdC
b3gsIGNvbnN0IEZsb2F0UG9pbnQmIG5vZGVBdFBvaW50KQotewotICAgIEZsb2F0UG9pbnQgcG9p
bnQgPSBub2RlQXRQb2ludDsKLSAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlw
cGluZ0FyZWEodGhpcywgcG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
c3RhdGljX2Nhc3Q8U1ZHQ2xpcFBhdGhFbGVtZW50Kj4obm9kZSgpKS0+Y2xpcFBhdGhVbml0cygp
ID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwotICAgICAgICB0cmFuc2Zvcm0udHJhbnNs
YXRlKG9iamVjdEJvdW5kaW5nQm94LngoKSwgb2JqZWN0Qm91bmRpbmdCb3gueSgpKTsKLSAgICAg
ICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpLCBv
YmplY3RCb3VuZGluZ0JveC5oZWlnaHQoKSk7Ci0gICAgICAgIHBvaW50ID0gdHJhbnNmb3JtLmlu
dmVyc2UoKS5tYXBQb2ludChwb2ludCk7Ci0gICAgfQotCi0gICAgZm9yIChOb2RlKiBjaGlsZE5v
ZGUgPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGROb2RlOyBjaGlsZE5vZGUgPSBjaGlsZE5v
ZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNo
aWxkTm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVu
dCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8
fCAhcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFyZW5kZXJl
ci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlz
U1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBJbnRQb2ludCBoaXRQb2ludDsKLSAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQoaGl0
UG9pbnQpOwotICAgICAgICBpZiAocmVuZGVyZXItPm5vZGVBdEZsb2F0UG9pbnQoSGl0VGVzdFJl
cXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlNWR0NsaXBDb250ZW50KSwgcmVzdWx0LCBwb2ludCwgSGl0
VGVzdEZvcmVncm91bmQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1GbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpy
ZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIC8vIFJlc291
cmNlIHdhcyBub3QgbGF5b3V0ZWQgeWV0LiBHaXZlIGJhY2sgdGhlIGJvdW5kaW5nQm94IG9mIHRo
ZSBvYmplY3QuCi0gICAgaWYgKHNlbGZOZWVkc0xheW91dCgpKQotICAgICAgICByZXR1cm4gb2Jq
ZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwotICAgIAotICAgIGlmIChtX2NsaXBCb3VuZGFyaWVz
LmlzRW1wdHkoKSkKLSAgICAgICAgY2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVjdCgpOwot
Ci0gICAgaWYgKHN0YXRpY19jYXN0PFNWR0NsaXBQYXRoRWxlbWVudCo+KG5vZGUoKSktPmNsaXBQ
YXRoVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmpl
Y3RCb3VuZGluZ0JveCgpOwotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwotICAg
ICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG9iamVjdEJvdW5kaW5nQm94LngoKSwgb2JqZWN0Qm91
bmRpbmdCb3gueSgpKTsKLSAgICAgICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShvYmplY3RC
b3VuZGluZ0JveC53aWR0aCgpLCBvYmplY3RCb3VuZGluZ0JveC5oZWlnaHQoKSk7Ci0gICAgICAg
IHJldHVybiB0cmFuc2Zvcm0ubWFwUmVjdChtX2NsaXBCb3VuZGFyaWVzKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbV9jbGlwQm91bmRhcmllczsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNW
RykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5o
CShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKgotICovCi0KLSNpZm5kZWYgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyX2gKLSNkZWZpbmUg
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAiU1ZHQ2xpcFBh
dGhFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCi0KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdHJ1Y3QgQ2xpcHBlckRhdGEgOiBGYXN0QWxsb2NCYXNlIHsKLSAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IGNsaXBNYXNrSW1hZ2U7Ci19OwotCi1jbGFzcyBSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXIgOiBwdWJsaWMgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIgewotcHVibGljOgotICAg
IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcihTVkdDbGlwUGF0aEVsZW1lbnQqKTsKLSAgICB2aXJ0
dWFsIH5SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIoKTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIi
OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1h
cmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50
RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUp
OwotCi0gICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVy
U3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsK
LSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCop
OwotCi0gICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29u
c3QgeyByZXR1cm4gQ2xpcHBlclJlc291cmNlVHlwZTsgfQotICAgIAotICAgIGJvb2wgaGl0VGVz
dENsaXBDb250ZW50KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKLQotICAg
IFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgY2xpcFBhdGhVbml0cygpIGNvbnN0IHsgcmV0dXJu
IHRvVW5pdFR5cGUoc3RhdGljX2Nhc3Q8U1ZHQ2xpcFBhdGhFbGVtZW50Kj4obm9kZSgpKS0+Y2xp
cFBhdGhVbml0cygpKTsgfQotCi0gICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlVHlwZSBzX3Jl
c291cmNlVHlwZTsKLXByaXZhdGU6Ci0gICAgLy8gY2xpcFBhdGggY2FuIGJlIGNsaXBwZWQgdG9v
LCBidXQgZG9uJ3QgaGF2ZSBhIGJvdW5kaW5nQm94IG9yIHJlcGFpbnRSZWN0LiBTbyB3ZSBjYW4n
dCBjYWxsCi0gICAgLy8gYXBwbHlSZXNvdXJjZSBkaXJlY3RseSBhbmQgdXNlIHRoZSByZWN0cyBm
cm9tIHRoZSBvYmplY3QsIHNpbmNlIHRoZXkgYXJlIGVtcHR5IGZvciBSZW5kZXJTVkdSZXNvdXJj
ZXMKLSAgICBib29sIGFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgYm9v
bCBwYXRoT25seUNsaXBwaW5nKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpOwot
ICAgIGJvb2wgZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKENsaXBwZXJEYXRhKiwgY29uc3QgRmxv
YXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCk7Ci0gICAgdm9pZCBjYWxjdWxhdGVDbGlwQ29udGVu
dFJlcGFpbnRSZWN0KCk7Ci0KLSAgICBib29sIG1faW52YWxpZGF0aW9uQmxvY2tlZDsKLSAgICBG
bG9hdFJlY3QgbV9jbGlwQm91bmRhcmllczsKLSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIENs
aXBwZXJEYXRhKj4gbV9jbGlwcGVyOwotfTsKLQotfQotCi0jZW5kaWYKLSNlbmRpZgpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAko
cmV2aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTkzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCi0KLSNpbmNsdWRlICJSZW5kZXJTVkdT
aGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBTVkdE
b2N1bWVudEV4dGVuc2lvbnMqIHN2Z0V4dGVuc2lvbnNGcm9tTm9kZShOb2RlKiBub2RlKQotewot
ICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAgcmV0
dXJuIG5vZGUtPmRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKTsKLX0KLQotUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXI6OlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKFNWR1N0eWxl
ZEVsZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIobm9kZSkKLSAg
ICAsIG1faWQobm9kZS0+aGFzSUQoKSA/IG5vZGUtPmdldElkQXR0cmlidXRlKCkgOiBudWxsQXRv
bSkKLSAgICAsIG1fcmVnaXN0ZXJlZChmYWxzZSkKLXsKLX0KLQotUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXI6On5SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcigpCi17Ci0gICAgaWYgKG1fcmVn
aXN0ZXJlZCkKLSAgICAgICAgc3ZnRXh0ZW5zaW9uc0Zyb21Ob2RlKG5vZGUoKSktPnJlbW92ZVJl
c291cmNlKG1faWQpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpsYXlv
dXQoKQotewotICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBpZiBvdXIgbGF5b3V0IGNo
YW5nZWQuCi0gICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkKLSAg
ICAgICAgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOwotCi0gICAgUmVuZGVyU1ZHSGlkZGVu
Q29udGFpbmVyOjpsYXlvdXQoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
cjo6ZGVzdHJveSgpCi17Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlc291cmNlRGVzdHJveWVk
KHRoaXMpOwotICAgIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6ZGVzdHJveSgpOwotfQotCi12
b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIFJlbmRlclNW
R0hpZGRlbkNvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwotCi0gICAg
aWYgKCFtX3JlZ2lzdGVyZWQpIHsKLSAgICAgICAgbV9yZWdpc3RlcmVkID0gdHJ1ZTsKLSAgICAg
ICAgcmVnaXN0ZXJSZXNvdXJjZSgpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lcjo6aWRDaGFuZ2VkKCkKLXsKLSAgICAvLyBJbnZhbGlkYXRlIGFsbCBvdXIgY3Vy
cmVudCBjbGllbnRzLgotICAgIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoKTsKLQotICAgIC8v
IFJlbW92ZSBvbGQgaWQsIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBwcmVzZW50IGluIGNhY2hl
LgotICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IHN2Z0V4dGVuc2lvbnNG
cm9tTm9kZShub2RlKCkpOwotICAgIGV4dGVuc2lvbnMtPnJlbW92ZVJlc291cmNlKG1faWQpOwot
ICAgIG1faWQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKS0+Z2V0SWRBdHRyaWJ1dGUo
KTsKLQotICAgIHJlZ2lzdGVyUmVzb3VyY2UoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lcjo6bWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24oSW52YWxpZGF0aW9uTW9k
ZSBtb2RlKQotewotICAgIGlmIChtX2NsaWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBib29sIG5lZWRzTGF5b3V0ID0gbW9kZSA9PSBMYXlvdXRBbmRCb3VuZGFyaWVzSW52
YWxpZGF0aW9uOwotICAgIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IG1vZGUgIT0gUGFyZW50
T25seUludmFsaWRhdGlvbjsKLQotICAgIEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj46Oml0ZXJhdG9y
IGVuZCA9IG1fY2xpZW50cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj46
Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBSZW5kZXJPYmplY3QqIGNsaWVudCA9ICppdDsKLSAgICAgICAgaWYgKGNsaWVudC0+aXNT
VkdSZXNvdXJjZUNvbnRhaW5lcigpKSB7Ci0gICAgICAgICAgICBjbGllbnQtPnRvUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIoKS0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShtYXJrRm9ySW52
YWxpZGF0aW9uKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1hcmtGb3JJbnZhbGlkYXRpb24pCi0gICAgICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxp
ZGF0aW9uKGNsaWVudCwgbW9kZSk7Ci0KLSAgICAgICAgaWYgKG5lZWRzTGF5b3V0KQotICAgICAg
ICAgICAgY2xpZW50LT5zZXROZWVkc0xheW91dCh0cnVlKTsKLQotICAgICAgICAvLyBJbnZhbGlk
YXRlIHJlc291cmNlcyBpbiBhbmNlc3RvciBjaGFpbiwgaWYgbmVlZGVkLgotICAgICAgICBSZW5k
ZXJPYmplY3QqIGN1cnJlbnQgPSBjbGllbnQtPnBhcmVudCgpOwotICAgICAgICB3aGlsZSAoY3Vy
cmVudCkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmlzU1ZHUmVzb3VyY2VDb250YWluZXIo
KSkgewotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIoKS0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShtYXJrRm9ySW52YWxpZGF0aW9uKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQtPnBhcmVudCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyOjptYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKFJlbmRlck9i
amVjdCogY2xpZW50LCBJbnZhbGlkYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgQVNTRVJUKGNsaWVu
dCk7Ci0gICAgQVNTRVJUKCFtX2NsaWVudHMuaXNFbXB0eSgpKTsKLQotICAgIHN3aXRjaCAobW9k
ZSkgewotICAgIGNhc2UgTGF5b3V0QW5kQm91bmRhcmllc0ludmFsaWRhdGlvbjoKLSAgICBjYXNl
IEJvdW5kYXJpZXNJbnZhbGlkYXRpb246Ci0gICAgICAgIGNsaWVudC0+c2V0TmVlZHNCb3VuZGFy
aWVzVXBkYXRlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVwYWludEludmFsaWRhdGlv
bjoKLSAgICAgICAgaWYgKGNsaWVudC0+dmlldygpKQotICAgICAgICAgICAgY2xpZW50LT5yZXBh
aW50KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGFyZW50T25seUludmFsaWRhdGlvbjoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyOjphZGRDbGllbnQoUmVuZGVyT2JqZWN0KiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKGNsaWVu
dCk7Ci0gICAgbV9jbGllbnRzLmFkZChjbGllbnQpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyOjpyZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0KiBjbGllbnQpCi17Ci0gICAg
QVNTRVJUKGNsaWVudCk7Ci0gICAgbV9jbGllbnRzLnJlbW92ZShjbGllbnQpOwotfQotCi12b2lk
IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291cmNlKCkKLXsKLSAgICBT
VkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lvbnMgPSBzdmdFeHRlbnNpb25zRnJvbU5vZGUo
bm9kZSgpKTsKLSAgICBpZiAoIWV4dGVuc2lvbnMtPmlzUGVuZGluZ1Jlc291cmNlKG1faWQpKSB7
Ci0gICAgICAgIGV4dGVuc2lvbnMtPmFkZFJlc291cmNlKG1faWQsIHRoaXMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgT3duUHRyPFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6U1ZHUGVu
ZGluZ0VsZW1lbnRzPiBjbGllbnRzKGV4dGVuc2lvbnMtPnJlbW92ZVBlbmRpbmdSZXNvdXJjZSht
X2lkKSk7Ci0KLSAgICAvLyBDYWNoZSB1cyB3aXRoIHRoZSBuZXcgaWQuCi0gICAgZXh0ZW5zaW9u
cy0+YWRkUmVzb3VyY2UobV9pZCwgdGhpcyk7Ci0KLSAgICAvLyBVcGRhdGUgY2FjaGVkIHJlc291
cmNlcyBvZiBwZW5kaW5nIGNsaWVudHMuCi0gICAgY29uc3QgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
OjpTVkdQZW5kaW5nRWxlbWVudHM6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMtPmVuZCgp
OwotICAgIGZvciAoU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpTVkdQZW5kaW5nRWxlbWVudHM6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gY2xpZW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSAoKml0KS0+cmVuZGVyZXIoKTsKLSAgICAg
ICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBTVkdSZXNv
dXJjZXNDYWNoZTo6Y2xpZW50VXBkYXRlZEZyb21FbGVtZW50KHJlbmRlcmVyLCByZW5kZXJlci0+
c3R5bGUoKSk7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0xheW91dCh0cnVlKTsKLSAgICB9
Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlLgotQWZmaW5lVHJhbnNm
b3JtIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJv
a2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcmVzb3VyY2VU
cmFuc2Zvcm0pCi17Ci0gICAgaWYgKCFvYmplY3QtPmlzU1ZHUGF0aCgpKQotICAgICAgICByZXR1
cm4gcmVzb3VyY2VUcmFuc2Zvcm07Ci0KLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4o
b2JqZWN0LT5ub2RlKCkpOwotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSByZXNvdXJj
ZVRyYW5zZm9ybTsKLSAgICB0cmFuc2Zvcm0ubXVsdGlwbHkoZWxlbWVudC0+Z2V0U2NyZWVuQ1RN
KFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSkpOwotICAgIHJldHVybiB0cmFuc2Zv
cm07Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyLmgJKHJldmlzaW9uIDc1MjcyKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lcl9oCi0jZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyX2gKLQotI2lm
IEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgiCi0jaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJTVkdIaWRkZW5Db250
YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBSZW5kZXJT
VkdSZXNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoU1ZH
U3R5bGVkRWxlbWVudCopOwotICAgIHZpcnR1YWwgflJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ry
b3koKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotCi0gICAgdmlydHVhbCBib29sIGlzU1ZHUmVz
b3VyY2VDb250YWluZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogdG9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcigpIHsg
cmV0dXJuIHRoaXM7IH0KLQotICAgIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtT25O
b25TY2FsaW5nU3Ryb2tlKFJlbmRlck9iamVjdCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcmVz
b3VyY2VUcmFuc2Zvcm0pOwotCi0gICAgdm9pZCBpZENoYW5nZWQoKTsKLQotcHJvdGVjdGVkOgot
ICAgIGVudW0gSW52YWxpZGF0aW9uTW9kZSB7Ci0gICAgICAgIExheW91dEFuZEJvdW5kYXJpZXNJ
bnZhbGlkYXRpb24sCi0gICAgICAgIEJvdW5kYXJpZXNJbnZhbGlkYXRpb24sCi0gICAgICAgIFJl
cGFpbnRJbnZhbGlkYXRpb24sCi0gICAgICAgIFBhcmVudE9ubHlJbnZhbGlkYXRpb24KLSAgICB9
OwotCi0gICAgLy8gVXNlZCBmcm9tIHRoZSBpbnZhbGlkYXRlQ2xpZW50L2ludmFsaWRhdGVDbGll
bnRzIG1ldGhvZHMgZnJvbSBjbGFzc2VzLCBpbmhlcml0aW5nIGZyb20gdXMuCi0gICAgdm9pZCBt
YXJrQWxsQ2xpZW50c0ZvckludmFsaWRhdGlvbihJbnZhbGlkYXRpb25Nb2RlKTsKLSAgICB2b2lk
IG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oUmVuZGVyT2JqZWN0KiwgSW52YWxpZGF0aW9uTW9k
ZSk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFNWR1Jlc291cmNlc0NhY2hlOwotICAg
IHZvaWQgYWRkQ2xpZW50KFJlbmRlck9iamVjdCopOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFJl
bmRlck9iamVjdCopOwotCi1wcml2YXRlOgotICAgIHZvaWQgcmVnaXN0ZXJSZXNvdXJjZSgpOwot
Ci0gICAgQXRvbWljU3RyaW5nIG1faWQ7Ci0gICAgYm9vbCBtX3JlZ2lzdGVyZWQ7Ci0gICAgSGFz
aFNldDxSZW5kZXJPYmplY3QqPiBtX2NsaWVudHM7Ci19OwotCi1pbmxpbmUgUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIqIGdldFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyQnlJZChEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgaWQpCi17Ci0gICAgaWYgKGlkLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIqIHJlbmRlclJlc291cmNlID0gZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+
cmVzb3VyY2VCeUlkKGlkKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlclJlc291cmNlOwotCi0gICAg
cmV0dXJuIDA7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJlbmRlcmVyPgotUmVuZGVyZXIqIGdl
dFJlbmRlclNWR1Jlc291cmNlQnlJZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0
cmluZyYgaWQpCi17Ci0gICAgaWYgKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBjb250YWlu
ZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lckJ5SWQoZG9jdW1lbnQsIGlkKSkKLSAg
ICAgICAgcmV0dXJuIGNvbnRhaW5lci0+Y2FzdDxSZW5kZXJlcj4oKTsKLQotICAgIHJldHVybiAw
OwotfQotCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwzMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyUHJpbWl0aXZlLmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2luY2x1
ZGUgIlNWR0ZpbHRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJTVkdJ
bWFnZUJ1ZmZlclRvb2xzLmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJTVkdT
dHlsZWRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCi0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotCi1zdGF0aWMgY29uc3Qg
ZmxvYXQga01heEZpbHRlclNpemUgPSA1MDAwLjBmOwotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6c19yZXNvdXJjZVR5cGUgPSBGaWx0ZXJSZXNvdXJjZVR5cGU7Ci0KLVJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcihTVkdGaWx0ZXJF
bGVtZW50KiBub2RlKQotICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKLXsK
LX0KLQotUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6On5SZW5kZXJTVkdSZXNvdXJjZUZpbHRlcigp
Ci17Ci0gICAgaWYgKG1fZmlsdGVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
ZGVsZXRlQWxsVmFsdWVzKG1fZmlsdGVyKTsKLSAgICBtX2ZpbHRlci5jbGVhcigpOwotfQotCi12
b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJv
b2wgbWFya0ZvckludmFsaWRhdGlvbikKLXsKLSAgICBpZiAoIW1fZmlsdGVyLmlzRW1wdHkoKSkg
ewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9maWx0ZXIpOwotICAgICAgICBtX2ZpbHRlci5j
bGVhcigpOwotICAgIH0KLQotICAgIG1hcmtBbGxDbGllbnRzRm9ySW52YWxpZGF0aW9uKG1hcmtG
b3JJbnZhbGlkYXRpb24gPyBMYXlvdXRBbmRCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFyZW50
T25seUludmFsaWRhdGlvbik7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJl
bW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqIGNsaWVudCwgYm9vbCBtYXJrRm9ySW52
YWxpZGF0aW9uKQotewotICAgIEFTU0VSVChjbGllbnQpOwotCi0gICAgaWYgKG1fZmlsdGVyLmNv
bnRhaW5zKGNsaWVudCkpCi0gICAgICAgIGRlbGV0ZSBtX2ZpbHRlci50YWtlKGNsaWVudCk7Ci0K
LSAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGNsaWVudCwgbWFya0ZvckludmFsaWRhdGlv
biA/IEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKLX0K
LQotUGFzc1JlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6
YnVpbGRQcmltaXRpdmVzKEZpbHRlciogZmlsdGVyKQotewotICAgIFNWR0ZpbHRlckVsZW1lbnQq
IGZpbHRlckVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKTsK
LSAgICBib29sIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9IGZpbHRlckVsZW1lbnQtPnByaW1p
dGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5H
Qk9YOwotCi0gICAgLy8gQWRkIGVmZmVjdHMgdG8gdGhlIGJ1aWxkZXIKLSAgICBSZWZQdHI8U1ZH
RmlsdGVyQnVpbGRlcj4gYnVpbGRlciA9IFNWR0ZpbHRlckJ1aWxkZXI6OmNyZWF0ZShmaWx0ZXIp
OwotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpbHRlckVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9k
ZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5pc1NW
R0VsZW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFNWR0VsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgIGlmICgh
ZWxlbWVudC0+aXNGaWx0ZXJFZmZlY3QoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyogZWZmZWN0RWxlbWVudCA9
IHN0YXRpY19jYXN0PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyo+KGVsZW1l
bnQpOwotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBlZmZlY3RFbGVtZW50
LT5idWlsZChidWlsZGVyLmdldCgpLCBmaWx0ZXIpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewot
ICAgICAgICAgICAgYnVpbGRlci0+Y2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVy
ZW5jZXMoZWZmZWN0KTsKLSAgICAgICAgZWZmZWN0RWxlbWVudC0+c2V0U3RhbmRhcmRBdHRyaWJ1
dGVzKHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSwgZWZmZWN0LmdldCgpKTsKLSAgICAgICAgYnVp
bGRlci0+YWRkKGVmZmVjdEVsZW1lbnQtPnJlc3VsdCgpLCBlZmZlY3QpOwotICAgIH0KLSAgICBy
ZXR1cm4gYnVpbGRlci5yZWxlYXNlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OmZpdHNJbk1heGltdW1JbWFnZVNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBGbG9hdFNp
emUmIHNjYWxlKQotewotICAgIGJvb2wgbWF0Y2hlc0ZpbHRlclNpemUgPSB0cnVlOwotICAgIGlm
IChzaXplLndpZHRoKCkgPiBrTWF4RmlsdGVyU2l6ZSkgewotICAgICAgICBzY2FsZS5zZXRXaWR0
aChzY2FsZS53aWR0aCgpICoga01heEZpbHRlclNpemUgLyBzaXplLndpZHRoKCkpOwotICAgICAg
ICBtYXRjaGVzRmlsdGVyU2l6ZSA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoc2l6ZS5oZWlnaHQo
KSA+IGtNYXhGaWx0ZXJTaXplKSB7Ci0gICAgICAgIHNjYWxlLnNldEhlaWdodChzY2FsZS5oZWln
aHQoKSAqIGtNYXhGaWx0ZXJTaXplIC8gc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIG1hdGNoZXNG
aWx0ZXJTaXplID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoZXNGaWx0ZXJTaXpl
OwotfQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQs
IHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkKLXsKLSAgICBBU1NFUlQob2JqZWN0KTsKLSAg
ICBBU1NFUlQoY29udGV4dCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIEFTU0VSVChyZXNvdXJjZU1v
ZGUgPT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlc291
cmNlTW9kZSk7Ci0jZW5kaWYKLQotICAgIC8vIFJldHVybmluZyBmYWxzZSBoZXJlLCB0byBhdm9p
ZCBkcmF3aW5ncyBvbnRvIHRoZSBjb250ZXh0LiBXZSBqdXN0IHdhbnQgdG8KLSAgICAvLyBkcmF3
IHRoZSBzdG9yZWQgZmlsdGVyIG91dHB1dCwgbm90IHRoZSB1bmZpbHRlcmVkIG9iamVjdCBhcyB3
ZWxsLgotICAgIGlmIChtX2ZpbHRlci5jb250YWlucyhvYmplY3QpKSB7Ci0gICAgICAgIEZpbHRl
ckRhdGEqIGZpbHRlckRhdGEgPSBtX2ZpbHRlci5nZXQob2JqZWN0KTsKLSAgICAgICAgaWYgKGZp
bHRlckRhdGEtPmJ1aWxkZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
ZGVsZXRlIG1fZmlsdGVyLnRha2Uob2JqZWN0KTsgLy8gT29wcywgaGF2ZSB0byByZWJ1aWxkLCBn
byB0aHJvdWdoIG5vcm1hbCBjb2RlIHBhdGgKLSAgICB9Ci0KLSAgICBPd25QdHI8RmlsdGVyRGF0
YT4gZmlsdGVyRGF0YShuZXcgRmlsdGVyRGF0YSk7Ci0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5k
aW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwotCi0gICAgU1ZHRmlsdGVyRWxl
bWVudCogZmlsdGVyRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQqPihub2Rl
KCkpOwotICAgIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMgPSBmaWx0ZXJFbGVtZW50LT5maWx0ZXJC
b3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgaWYgKGZpbHRlckRhdGEtPmJvdW5k
YXJpZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBEZXRlcm1p
bmUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGZvciBmaWx0ZXIuIAotICAgIEFmZmlu
ZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpj
YWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbShvYmpl
Y3QsIGFic29sdXRlVHJhbnNmb3JtKTsKLSAgICBpZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52
ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBFbGltaW5hdGUgc2hl
YXIgb2YgdGhlIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgdG8gYmUgYWJsZSB0byBw
cm9kdWNlIHVuc2hlYXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxlLgotICAgIGZpbHRlckRhdGEt
PnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGFic29sdXRlVHJh
bnNmb3JtLnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSwgYWJzb2x1
dGVUcmFuc2Zvcm0uZSgpLCBhYnNvbHV0ZVRyYW5zZm9ybS5mKCkpOwotCi0gICAgLy8gRGV0ZXJt
aW5lIGFic29sdXRlIGJvdW5kYXJpZXMgb2YgdGhlIGZpbHRlciBhbmQgdGhlIGRyYXdpbmcgcmVn
aW9uLgotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZUZpbHRlckJvdW5kYXJpZXMgPSBmaWx0ZXJEYXRh
LT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJp
ZXMpOwotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gb2JqZWN0LT5zdHJva2VCb3VuZGlu
Z0JveCgpOwotICAgIGRyYXdpbmdSZWdpb24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJp
ZXMpOwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5z
aGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGRyYXdpbmdSZWdpb24pOwotCi0gICAg
Ly8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgotICAgIGJvb2wgcHJpbWl0aXZlQm91bmRp
bmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudC0+cHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlw
ZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7Ci0gICAgZmlsdGVyRGF0YS0+Zmls
dGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFu
c2Zvcm0sIGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlckRh
dGEtPmJvdW5kYXJpZXMsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSk7Ci0KLSAgICAvLyBDcmVh
dGUgYWxsIHJlbGV2YW50IGZpbHRlciBwcmltaXRpdmVzLgotICAgIGZpbHRlckRhdGEtPmJ1aWxk
ZXIgPSBidWlsZFByaW1pdGl2ZXMoZmlsdGVyRGF0YS0+ZmlsdGVyLmdldCgpKTsKLSAgICBpZiAo
IWZpbHRlckRhdGEtPmJ1aWxkZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIENh
bGN1bGF0ZSB0aGUgc2NhbGUgZmFjdG9yIGZvciB0aGUgdXNlIG9mIGZpbHRlclJlcy4KLSAgICAv
LyBBbHNvIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI0ZpbHRlckVm
ZmVjdHNSZWdpb24KLSAgICBGbG9hdFNpemUgc2NhbGUoMSwgMSk7Ci0gICAgaWYgKGZpbHRlckVs
ZW1lbnQtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6ZmlsdGVyUmVzQXR0cikpIHsKLSAgICAgICAg
c2NhbGUuc2V0V2lkdGgoZmlsdGVyRWxlbWVudC0+ZmlsdGVyUmVzWCgpIC8gYWJzb2x1dGVGaWx0
ZXJCb3VuZGFyaWVzLndpZHRoKCkpOwotICAgICAgICBzY2FsZS5zZXRIZWlnaHQoZmlsdGVyRWxl
bWVudC0+ZmlsdGVyUmVzWSgpIC8gYWJzb2x1dGVGaWx0ZXJCb3VuZGFyaWVzLmhlaWdodCgpKTsK
LSAgICB9Ci0KLSAgICBpZiAoc2NhbGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAvLyBEZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIuIFRoZSBzaXplIG9m
IGludGVybWVkaWF0ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dlciB0aGFuIGtNYXhG
aWx0ZXJTaXplLgotICAgIEZsb2F0UmVjdCB0ZW1wU291cmNlUmVjdCA9IGFic29sdXRlRHJhd2lu
Z1JlZ2lvbjsKLSAgICB0ZW1wU291cmNlUmVjdC5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5o
ZWlnaHQoKSk7Ci0gICAgZml0c0luTWF4aW11bUltYWdlU2l6ZSh0ZW1wU291cmNlUmVjdC5zaXpl
KCksIHNjYWxlKTsKLQotICAgIC8vIFNldCB0aGUgc2NhbGUgbGV2ZWwgaW4gU1ZHRmlsdGVyLgot
ICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0KLSAg
ICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZm
ZWN0KCk7Ci0gICAgaWYgKCFsYXN0RWZmZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKGxhc3RFZmZlY3QsIGZpbHRlckRhdGEtPmZpbHRlci5nZXQoKSk7Ci0gICAg
RmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3QtPm1heEVmZmVjdFJlY3QoKTsKLSAgICAv
LyBBdCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKLSAg
ICAvLyByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMu
Ci0gICAgaWYgKCFmaXRzSW5NYXhpbXVtSW1hZ2VTaXplKHN1YlJlZ2lvbi5zaXplKCksIHNjYWxl
KSkgewotICAgICAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2Nh
bGUpOwotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZTo6ZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGxhc3RFZmZlY3QsIGZpbHRlckRhdGEtPmZpbHRlci5n
ZXQoKSk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGRyYXdpbmdSZWdpb24gaXMgZW1wdHksIHdl
IGhhdmUgc29tZXRoaW5nIGxpa2UgPGcgZmlsdGVyPSIuLiIvPi4KLSAgICAvLyBFdmVuIGlmIHRo
ZSB0YXJnZXQgb2JqZWN0Qm91bmRpbmdCb3goKSBpcyBlbXB0eSwgd2Ugc3RpbGwgaGF2ZSB0byBk
cmF3IHRoZSBsYXN0IGVmZmVjdCByZXN1bHQgaW1hZ2UgaW4gcG9zdEFwcGx5UmVzb3VyY2UuCi0g
ICAgaWYgKGRyYXdpbmdSZWdpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9maWx0
ZXIuY29udGFpbnMob2JqZWN0KSk7Ci0gICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9
IGNvbnRleHQ7Ci0gICAgICAgIG1fZmlsdGVyLnNldChvYmplY3QsIGZpbHRlckRhdGEubGVha1B0
cigpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGFic29sdXRlRHJhd2lu
Z1JlZ2lvbi5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0KLSAgICBPd25Q
dHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWM7Ci0gICAgaWYgKCFTVkdJbWFnZUJ1ZmZlclRv
b2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihhYnNvbHV0ZURyYXdpbmdSZWdpb24sIGFic29sdXRlRHJh
d2luZ1JlZ2lvbiwgc291cmNlR3JhcGhpYywgQ29sb3JTcGFjZUxpbmVhclJHQikpIHsKLSAgICAg
ICAgQVNTRVJUKCFtX2ZpbHRlci5jb250YWlucyhvYmplY3QpKTsKLSAgICAgICAgZmlsdGVyRGF0
YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4dDsKLSAgICAgICAgbV9maWx0ZXIuc2V0KG9iamVjdCwg
ZmlsdGVyRGF0YS5sZWFrUHRyKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IAotICAgIEdyYXBoaWNzQ29udGV4dCogc291cmNlR3JhcGhpY0NvbnRleHQgPSBzb3VyY2VHcmFw
aGljLT5jb250ZXh0KCk7Ci0gICAgQVNTRVJUKHNvdXJjZUdyYXBoaWNDb250ZXh0KTsKLSAgCi0g
ICAgc291cmNlR3JhcGhpY0NvbnRleHQtPnRyYW5zbGF0ZSgtYWJzb2x1dGVEcmF3aW5nUmVnaW9u
LngoKSwgLWFic29sdXRlRHJhd2luZ1JlZ2lvbi55KCkpOwotICAgIGlmIChzY2FsZS53aWR0aCgp
ICE9IDEgfHwgc2NhbGUuaGVpZ2h0KCkgIT0gMSkKLSAgICAgICAgc291cmNlR3JhcGhpY0NvbnRl
eHQtPnNjYWxlKHNjYWxlKTsKLQotICAgIHNvdXJjZUdyYXBoaWNDb250ZXh0LT5jb25jYXRDVE0o
ZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgIHNvdXJjZUdyYXBo
aWNDb250ZXh0LT5jbGVhclJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVEcmF3
aW5nUmVnaW9uLnNpemUoKSkpOwotICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXIg
PSBzb3VyY2VHcmFwaGljLnJlbGVhc2UoKTsKLSAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQg
PSBjb250ZXh0OwotCi0gICAgY29udGV4dCA9IHNvdXJjZUdyYXBoaWNDb250ZXh0OwotCi0gICAg
QVNTRVJUKCFtX2ZpbHRlci5jb250YWlucyhvYmplY3QpKTsKLSAgICBtX2ZpbHRlci5zZXQob2Jq
ZWN0LCBmaWx0ZXJEYXRhLmxlYWtQdHIoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291
cmNlTW9kZSwgY29uc3QgUGF0aCopCi17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgQVNTRVJU
KGNvbnRleHQpOwotI2lmbmRlZiBOREVCVUcKLSAgICBBU1NFUlQocmVzb3VyY2VNb2RlID09IEFw
cGx5VG9EZWZhdWx0TW9kZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZXNvdXJjZU1vZGUp
OwotI2VuZGlmCi0KLSAgICBpZiAoIW1fZmlsdGVyLmNvbnRhaW5zKG9iamVjdCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEZpbHRlckRhdGEqIGZpbHRlckRhdGEgPSBtX2ZpbHRlci5nZXQob2Jq
ZWN0KTsKLSAgICBpZiAoIWZpbHRlckRhdGEtPmJ1aWxkZWQpIHsKLSAgICAgICAgaWYgKCFmaWx0
ZXJEYXRhLT5zYXZlZENvbnRleHQpIHsKLSAgICAgICAgICAgIHJlbW92ZUNsaWVudEZyb21DYWNo
ZShvYmplY3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgY29u
dGV4dCA9IGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dDsKLSAgICAgICAgZmlsdGVyRGF0YS0+c2F2
ZWRDb250ZXh0ID0gMDsKLSNpZiAhUExBVEZPUk0oQ0cpCi0gICAgICAgIGlmIChmaWx0ZXJEYXRh
LT5zb3VyY2VHcmFwaGljQnVmZmVyKQotICAgICAgICAgICAgZmlsdGVyRGF0YS0+c291cmNlR3Jh
cGhpY0J1ZmZlci0+dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlRGV2aWNlUkdCLCBDb2xv
clNwYWNlTGluZWFyUkdCKTsKLSNlbmRpZgotICAgIH0KLQotICAgIEZpbHRlckVmZmVjdCogbGFz
dEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKLSAgICAKLSAgICBp
ZiAobGFzdEVmZmVjdCAmJiAhZmlsdGVyRGF0YS0+Ym91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxh
c3RFZmZlY3QtPmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLmlzRW1wdHkoKSkgewotICAgICAg
ICAvLyBUaGlzIGlzIHRoZSByZWFsIGZpbHRlcmluZyBvZiB0aGUgb2JqZWN0LiBJdCBqdXN0IG5l
ZWRzIHRvIGJlIGNhbGxlZCBvbiB0aGUKLSAgICAgICAgLy8gaW5pdGlhbCBmaWx0ZXJpbmcgcHJv
Y2Vzcy4gV2UganVzdCB0YWtlIHRoZSBzdG9yZWQgZmlsdGVyIHJlc3VsdCBvbiBhCi0gICAgICAg
IC8vIHNlY29uZCBkcmF3aW5nLgotICAgICAgICBpZiAoIWZpbHRlckRhdGEtPmJ1aWxkZWQpIHsK
LSAgICAgICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0U291cmNlSW1hZ2UoZmlsdGVyRGF0
YS0+c291cmNlR3JhcGhpY0J1ZmZlci5yZWxlYXNlKCkpOwotICAgICAgICAgICAgbGFzdEVmZmVj
dC0+YXBwbHkoKTsKLSNpZiAhUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5hc0ltYWdlQnVmZmVyKCk7Ci0gICAgICAgICAgICBp
ZiAocmVzdWx0SW1hZ2UpCi0gICAgICAgICAgICAgICAgcmVzdWx0SW1hZ2UtPnRyYW5zZm9ybUNv
bG9yU3BhY2UoQ29sb3JTcGFjZUxpbmVhclJHQiwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0jZW5k
aWYKLSAgICAgICAgICAgIGZpbHRlckRhdGEtPmJ1aWxkZWQgPSB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFzdEVmZmVjdC0+YXNJbWFnZUJ1
ZmZlcigpOwotICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmNvbmNhdENUTShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5pbnZlcnNl
KCkpOwotCi0gICAgICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRh
dGEtPmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIDEgLyBmaWx0ZXJEYXRhLT5m
aWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgY29udGV4
dC0+Y2xpcChsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4
dC0+ZHJhd0ltYWdlQnVmZmVyKHJlc3VsdEltYWdlLCBvYmplY3QtPnN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSwgbGFzdEVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgICAgICBjb250
ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLT5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7Ci0KLSAg
ICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0
ZVRyYW5zZm9ybSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZmlsdGVyRGF0YS0+c291cmNlR3Jh
cGhpY0J1ZmZlci5jbGVhcigpOwotfQotCi1GbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OnJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYg
KFNWR0ZpbHRlckVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50
Kj4obm9kZSgpKSkKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmZpbHRlckJvdW5kaW5nQm94KG9i
amVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKSk7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci19
Ci0KLX0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5oCShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgotICogICAgICAgICAgICAgICAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyX2gKLSNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJfaAotCi0jaWYgRU5BQkxFKFNW
RykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgot
I2luY2x1ZGUgIlNWR0ZpbHRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKLSNp
bmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCi0K
LSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEZp
bHRlckRhdGEgewotICAgIEZpbHRlckRhdGEoKQotICAgICAgICA6IHNhdmVkQ29udGV4dCgwKQot
ICAgICAgICAsIGJ1aWxkZWQoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxTVkdG
aWx0ZXI+IGZpbHRlcjsKLSAgICBSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRlcjsKLSAg
ICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWNCdWZmZXI7Ci0gICAgR3JhcGhpY3ND
b250ZXh0KiBzYXZlZENvbnRleHQ7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBib3VuZGFyaWVzOwotICAgIEZsb2F0U2l6ZSBz
Y2FsZTsKLSAgICBib29sIGJ1aWxkZWQ7Ci19OwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0K
LWNsYXNzIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyIDogcHVibGljIFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcihTVkdGaWx0
ZXJFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIoKTsKLQot
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlciI7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxDbGll
bnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9y
SW52YWxpZGF0aW9uID0gdHJ1ZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBz
aG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VN
b2RlLCBjb25zdCBQYXRoKik7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5k
aW5nQm94KFJlbmRlck9iamVjdCopOwotCi0gICAgUGFzc1JlZlB0cjxTVkdGaWx0ZXJCdWlsZGVy
PiBidWlsZFByaW1pdGl2ZXMoRmlsdGVyKik7Ci0KLSAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRU
eXBlIGZpbHRlclVuaXRzKCkgY29uc3QgeyByZXR1cm4gdG9Vbml0VHlwZShzdGF0aWNfY2FzdDxT
VkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKS0+ZmlsdGVyVW5pdHMoKSk7IH0KLSAgICBTVkdVbml0
VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKCkgY29uc3QgeyByZXR1cm4gdG9Vbml0
VHlwZShzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKS0+cHJpbWl0aXZlVW5p
dHMoKSk7IH0KLQotICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9Ci0gICAgc3RhdGljIFJlbmRlclNW
R1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKLQotcHJpdmF0ZToKLSAgICBib29sIGZpdHNJ
bk1heGltdW1JbWFnZVNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJik7Ci0KLSAgICBI
YXNoTWFwPFJlbmRlck9iamVjdCosIEZpbHRlckRhdGEqPiBtX2ZpbHRlcjsKLX07Ci0KLX0KLQot
I2VuZGlmCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyUHJpbWl0aXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAJKHJldmlzaW9uIDc1MjcyKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcK
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkg
T0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBP
RiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oIgot
I2luY2x1ZGUgIlNWR0ZFSW1hZ2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GbG9hdFJl
Y3QgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbihGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgU1ZHRmlsdGVyKiBmaWx0ZXIpCi17
Ci0gICAgRmxvYXRSZWN0IHVuaXRlUmVjdDsKLSAgICBGbG9hdFJlY3Qgc3VicmVnaW9uQm91bmRp
bmdCb3ggPSBlZmZlY3QtPmVmZmVjdEJvdW5kYXJpZXMoKTsKLSAgICBGbG9hdFJlY3Qgc3VicmVn
aW9uID0gc3VicmVnaW9uQm91bmRpbmdCb3g7Ci0KLSAgICBpZiAoZWZmZWN0LT5maWx0ZXJFZmZl
Y3RUeXBlKCkgIT0gRmlsdGVyRWZmZWN0VHlwZVRpbGUpIHsKLSAgICAgICAgLy8gRkVUdXJidWxl
bmNlLCBGRUltYWdlIGFuZCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQgZWZmZWN0cywgdGFrZSB0
aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0ZSByZWN0LgotICAgICAgICBpZiAodW5zaWduZWQgbnVt
YmVyT2ZJbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpLnNpemUoKSkgewotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyAr
K2kpCi0gICAgICAgICAgICAgICAgdW5pdGVSZWN0LnVuaXRlKGRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbihlZmZlY3QtPmlucHV0RWZmZWN0KGkpLCBmaWx0ZXIpKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICB1bml0ZVJlY3QgPSBmaWx0ZXItPmZpbHRlclJlZ2lvbkluVXNl
clNwYWNlKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKGVmZmVjdC0+aW5wdXRFZmZlY3QoMCksIGZpbHRlcik7Ci0gICAgICAgIHVuaXRl
UmVjdCA9IGZpbHRlci0+ZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLSAgICB9Ci0KLSAgICBp
ZiAoZmlsdGVyLT5lZmZlY3RCb3VuZGluZ0JveE1vZGUoKSkgewotICAgICAgICBzdWJyZWdpb24g
PSB1bml0ZVJlY3Q7Ci0gICAgICAgIC8vIEF2b2lkIHRoZSBjYWxsaW5nIG9mIGEgdmlydHVhbCBt
ZXRob2Qgc2V2ZXJhbCB0aW1lcy4KLSAgICAgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94
ID0gZmlsdGVyLT50YXJnZXRCb3VuZGluZ0JveCgpOwotCi0gICAgICAgIGlmIChlZmZlY3QtPmhh
c1goKSkKLSAgICAgICAgICAgIHN1YnJlZ2lvbi5zZXRYKHRhcmdldEJvdW5kaW5nQm94LngoKSAr
IHN1YnJlZ2lvbkJvdW5kaW5nQm94LngoKSAqIHRhcmdldEJvdW5kaW5nQm94LndpZHRoKCkpOwot
Ci0gICAgICAgIGlmIChlZmZlY3QtPmhhc1koKSkKLSAgICAgICAgICAgIHN1YnJlZ2lvbi5zZXRZ
KHRhcmdldEJvdW5kaW5nQm94LnkoKSArIHN1YnJlZ2lvbkJvdW5kaW5nQm94LnkoKSAqIHRhcmdl
dEJvdW5kaW5nQm94LmhlaWdodCgpKTsKLQotICAgICAgICBpZiAoZWZmZWN0LT5oYXNXaWR0aCgp
KQotICAgICAgICAgICAgc3VicmVnaW9uLnNldFdpZHRoKHN1YnJlZ2lvbkJvdW5kaW5nQm94Lndp
ZHRoKCkgKiB0YXJnZXRCb3VuZGluZ0JveC53aWR0aCgpKTsKLQotICAgICAgICBpZiAoZWZmZWN0
LT5oYXNIZWlnaHQoKSkKLSAgICAgICAgICAgIHN1YnJlZ2lvbi5zZXRIZWlnaHQoc3VicmVnaW9u
Qm91bmRpbmdCb3guaGVpZ2h0KCkgKiB0YXJnZXRCb3VuZGluZ0JveC5oZWlnaHQoKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKCFlZmZlY3QtPmhhc1goKSkKLSAgICAgICAgICAgIHN1YnJl
Z2lvbi5zZXRYKHVuaXRlUmVjdC54KCkpOwotCi0gICAgICAgIGlmICghZWZmZWN0LT5oYXNZKCkp
Ci0gICAgICAgICAgICBzdWJyZWdpb24uc2V0WSh1bml0ZVJlY3QueSgpKTsKLQotICAgICAgICBp
ZiAoIWVmZmVjdC0+aGFzV2lkdGgoKSkKLSAgICAgICAgICAgIHN1YnJlZ2lvbi5zZXRXaWR0aCh1
bml0ZVJlY3Qud2lkdGgoKSk7Ci0KLSAgICAgICAgaWYgKCFlZmZlY3QtPmhhc0hlaWdodCgpKQot
ICAgICAgICAgICAgc3VicmVnaW9uLnNldEhlaWdodCh1bml0ZVJlY3QuaGVpZ2h0KCkpOwotICAg
IH0KLQotICAgIGVmZmVjdC0+c2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKHN1YnJlZ2lvbik7
Ci0KLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVTdWJyZWdpb24gPSBmaWx0ZXItPm1hcExvY2FsUmVj
dFRvQWJzb2x1dGVSZWN0KHN1YnJlZ2lvbik7Ci0gICAgRmxvYXRTaXplIGZpbHRlclJlc29sdXRp
b24gPSBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5z
Y2FsZShmaWx0ZXJSZXNvbHV0aW9uLndpZHRoKCksIGZpbHRlclJlc29sdXRpb24uaGVpZ2h0KCkp
OwotCi0gICAgLy8gRkVJbWFnZSBuZWVkcyB0aGUgdW5jbGlwcGVkIHN1YnJlZ2lvbiBpbiBhYnNv
bHV0ZSBjb29yZGluYXRlcyB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QKLSAgICAvLyBkZXN0aW5h
dGlvbiByZWN0IGluIGNvbWJpbmF0aW9uIHdpdGggcHJlc2VydmVBc3BlY3RSYXRpby4KLSAgICBp
ZiAoZWZmZWN0LT5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZUltYWdlKQot
ICAgICAgICByZWludGVycHJldF9jYXN0PEZFSW1hZ2UqPihlZmZlY3QpLT5zZXRBYnNvbHV0ZVN1
YnJlZ2lvbihhYnNvbHV0ZVN1YnJlZ2lvbik7Ci0KLSAgICAvLyBDbGlwIGV2ZXJ5IGZpbHRlciBl
ZmZlY3QgdG8gdGhlIGZpbHRlciByZWdpb24uCi0gICAgRmxvYXRSZWN0IGFic29sdXRlU2NhbGVk
RmlsdGVyUmVnaW9uID0gZmlsdGVyLT5maWx0ZXJSZWdpb24oKTsKLSAgICBhYnNvbHV0ZVNjYWxl
ZEZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uLndpZHRoKCksIGZpbHRlclJlc29s
dXRpb24uaGVpZ2h0KCkpOwotICAgIGFic29sdXRlU3VicmVnaW9uLmludGVyc2VjdChhYnNvbHV0
ZVNjYWxlZEZpbHRlclJlZ2lvbik7Ci0KLSAgICBlZmZlY3QtPnNldE1heEVmZmVjdFJlY3QoZW5j
bG9zaW5nSW50UmVjdChhYnNvbHV0ZVN1YnJlZ2lvbikpOwotICAgIHJldHVybiBzdWJyZWdpb247
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oCShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJz
aXR5IG9mIFN6ZWdlZAotICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNa
RUdFRCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pF
R0VEIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZV9oCi0jZGVmaW5lIFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlX2gKLQotI2lmIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQotCi0jaW5jbHVkZSAiUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgiCi0j
aW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVk
ZSAiU1ZHRmlsdGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUgOiBwdWJsaWMgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
IHsKLXB1YmxpYzoKLQotICAgIGV4cGxpY2l0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyogZmlsdGVyUHJpbWl0aXZl
RWxlbWVudCkKLSAgICAgICAgOiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIoZmlsdGVyUHJpbWl0
aXZlRWxlbWVudCkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gVGhleSBkZXBlbmQgb24gdGhlIFJl
bmRlck9iamVjdCBhcmd1bWVudCBvZiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNv
dXJjZS4KLSAgICBzdGF0aWMgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbihGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgU1ZHRmlsdGVyKiBmaWx0ZXIpOwotCi1wcml2YXRl
OgotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSI7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNT
VkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJM
RShGSUxURVJTKQotCi0jZW5kaWYgLy8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmVf
aApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5jcHAJKHJldmlzaW9uIDc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjgyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAwOCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0j
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIgotCi0jaW5jbHVkZSAiR3JhZGll
bnRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
UmVuZGVyU1ZHVGV4dC5oIgotI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKLSNpbmNs
dWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6UmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudChTVkdHcmFkaWVudEVsZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lcihub2RlKQotICAgICwgbV9zaG91bGRDb2xsZWN0R3JhZGll
bnRBdHRyaWJ1dGVzKHRydWUpCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgLCBtX3NhdmVkQ29udGV4
dCgwKQotI2VuZGlmCi17Ci19Ci0KLVJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6On5SZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50KCkKLXsKLSAgICBpZiAobV9ncmFkaWVudC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2dyYWRpZW50KTsKLSAgICBt
X2dyYWRpZW50LmNsZWFyKCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6
cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCi17Ci0g
ICAgaWYgKCFtX2dyYWRpZW50LmlzRW1wdHkoKSkgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMo
bV9ncmFkaWVudCk7Ci0gICAgICAgIG1fZ3JhZGllbnQuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBt
X3Nob3VsZENvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMgPSB0cnVlOwotICAgIG1hcmtBbGxDbGll
bnRzRm9ySW52YWxpZGF0aW9uKG1hcmtGb3JJbnZhbGlkYXRpb24gPyBSZXBhaW50SW52YWxpZGF0
aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudDo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCogY2xpZW50LCBi
b29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCi17Ci0gICAgQVNTRVJUKGNsaWVudCk7Ci0KLSAgICBp
ZiAobV9ncmFkaWVudC5jb250YWlucyhjbGllbnQpKQotICAgICAgICBkZWxldGUgbV9ncmFkaWVu
dC50YWtlKGNsaWVudCk7Ci0KLSAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGNsaWVudCwg
bWFya0ZvckludmFsaWRhdGlvbiA/IFJlcGFpbnRJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52
YWxpZGF0aW9uKTsKLX0KLQotI2lmIFBMQVRGT1JNKENHKQotc3RhdGljIGlubGluZSBib29sIGNy
ZWF0ZU1hc2tBbmRTd2FwQ29udGV4dEZvclRleHRHcmFkaWVudChHcmFwaGljc0NvbnRleHQqJiBj
b250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqJiBzYXZlZENvbnRleHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE93blB0cjxJbWFn
ZUJ1ZmZlcj4mIGltYWdlQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBS
ZW5kZXJPYmplY3QqIHRleHRSb290QmxvY2sgPSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJT
VkdUZXh0QW5jZXN0b3Iob2JqZWN0KTsKLSAgICBBU1NFUlQodGV4dFJvb3RCbG9jayk7Ci0KLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgU1ZHSW1hZ2VCdWZmZXJU
b29sczo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0
ZW0odGV4dFJvb3RCbG9jaywgYWJzb2x1dGVUcmFuc2Zvcm0pOwotCi0gICAgRmxvYXRSZWN0IGFi
c29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QodGV4dFJvb3RCbG9j
ay0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgRmxvYXRSZWN0IGNsYW1w
ZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1
dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIodGV4dFJvb3RCbG9jaywgYWJzb2x1dGVUYXJnZXRSZWN0
KTsKLSAgICBpZiAoY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlOwotICAg
IGlmICghU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVUYXJn
ZXRSZWN0LCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBtYXNrSW1hZ2UsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQq
IG1hc2tJbWFnZUNvbnRleHQgPSBtYXNrSW1hZ2UtPmNvbnRleHQoKTsKLSAgICBBU1NFUlQobWFz
a0ltYWdlQ29udGV4dCk7Ci0KLSAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLWNsYW1w
ZWRBYnNvbHV0ZVRhcmdldFJlY3QueCgpLCAtY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC55KCkp
OwotICAgIG1hc2tJbWFnZUNvbnRleHQtPmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0K
LSAgICBBU1NFUlQobWFza0ltYWdlKTsKLSAgICBzYXZlZENvbnRleHQgPSBjb250ZXh0OwotICAg
IGNvbnRleHQgPSBtYXNrSW1hZ2VDb250ZXh0OwotICAgIGltYWdlQnVmZmVyID0gbWFza0ltYWdl
LnJlbGVhc2UoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSBBZmZpbmVU
cmFuc2Zvcm0gY2xpcFRvVGV4dE1hc2soR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVy
PiYgaW1hZ2VCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGbG9hdFJlY3QmIHRhcmdldFJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYm91bmRpbmdCb3hNb2RlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBncmFkaWVudFRyYW5zZm9ybSkKLXsKLSAgICBSZW5kZXJPYmplY3QqIHRleHRSb290Qmxv
Y2sgPSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3Iob2JqZWN0KTsK
LSAgICBBU1NFUlQodGV4dFJvb3RCbG9jayk7Ci0KLSAgICB0YXJnZXRSZWN0ID0gdGV4dFJvb3RC
bG9jay0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKLQotICAgIEFmZmluZVRyYW5z
Zm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxh
dGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbSh0ZXh0Um9vdEJs
b2NrLCBhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0KLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVUYXJnZXRS
ZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdCh0YXJnZXRSZWN0KTsKLSAgICBGbG9hdFJl
Y3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1w
ZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcih0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRh
cmdldFJlY3QpOwotCi0gICAgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xpcFRvSW1hZ2VCdWZmZXIo
Y29udGV4dCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIGlt
YWdlQnVmZmVyKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7Ci0gICAgaWYgKGJvdW5k
aW5nQm94TW9kZSkgewotICAgICAgICBGbG9hdFJlY3QgbWFza0JvdW5kaW5nQm94ID0gdGV4dFJv
b3RCbG9jay0+b2JqZWN0Qm91bmRpbmdCb3goKTsKLSAgICAgICAgbWF0cml4LnRyYW5zbGF0ZSht
YXNrQm91bmRpbmdCb3gueCgpLCBtYXNrQm91bmRpbmdCb3gueSgpKTsKLSAgICAgICAgbWF0cml4
LnNjYWxlTm9uVW5pZm9ybShtYXNrQm91bmRpbmdCb3gud2lkdGgoKSwgbWFza0JvdW5kaW5nQm94
LmhlaWdodCgpKTsKLSAgICB9Ci0gICAgbWF0cml4Lm11bHRMZWZ0KGdyYWRpZW50VHJhbnNmb3Jt
KTsKLSAgICByZXR1cm4gbWF0cml4OwotfQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNv
dXJjZU1vZGUpCi17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLSAg
ICBBU1NFUlQoY29udGV4dCk7Ci0gICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVm
YXVsdE1vZGUpOwotCi0gICAgLy8gQmUgc3VyZSB0byBzeW5jaHJvbml6ZSBhbGwgU1ZHIHByb3Bl
cnRpZXMgb24gdGhlIGdyYWRpZW50RWxlbWVudCBfYmVmb3JlXyBwcm9jZXNzaW5nIGFueSBmdXJ0
aGVyLgotICAgIC8vIE90aGVyd2hpc2UgdGhlIGNhbGwgdG8gY29sbGVjdEdyYWRpZW50QXR0cmli
dXRlcygpIGluIGNyZWF0ZVRpbGVJbWFnZSgpLCBtYXkgY2F1c2UgdGhlIFNWRyBET00gcHJvcGVy
dHkKLSAgICAvLyBzeW5jaHJvbml6YXRpb24gdG8ga2ljayBpbiwgd2hpY2ggY2F1c2VzIHJlbW92
ZUFsbENsaWVudHNGcm9tQ2FjaGUoKSB0byBiZSBjYWxsZWQsIHdoaWNoIGluIHR1cm4gZGVsZXRl
cyBvdXIKLSAgICAvLyBHcmFkaWVudERhdGEgb2JqZWN0ISBMZWF2aW5nIG91dCB0aGUgbGluZSBi
ZWxvdyB3aWxsIGNhdXNlIHN2Zy9keW5hbWljLXVwZGF0ZXMvU1ZHKkdyYWRpZW50RWxlbWVudC1z
dmdkb20qIHRvIGNyYXNoLgotICAgIFNWR0dyYWRpZW50RWxlbWVudCogZ3JhZGllbnRFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHR3JhZGllbnRFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBpZiAoIWdy
YWRpZW50RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fc2hvdWxk
Q29sbGVjdEdyYWRpZW50QXR0cmlidXRlcykgewotICAgICAgICBncmFkaWVudEVsZW1lbnQtPnVw
ZGF0ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGFueVFOYW1lKCkpOwotICAgICAgICBjb2xsZWN0R3Jh
ZGllbnRBdHRyaWJ1dGVzKGdyYWRpZW50RWxlbWVudCk7Ci0gICAgICAgIG1fc2hvdWxkQ29sbGVj
dEdyYWRpZW50QXR0cmlidXRlcyA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFNwZWM6IFdoZW4g
dGhlIGdlb21ldHJ5IG9mIHRoZSBhcHBsaWNhYmxlIGVsZW1lbnQgaGFzIG5vIHdpZHRoIG9yIGhl
aWdodCBhbmQgb2JqZWN0Qm91bmRpbmdCb3ggaXMgc3BlY2lmaWVkLAotICAgIC8vIHRoZW4gdGhl
IGdpdmVuIGVmZmVjdCAoZS5nLiBhIGdyYWRpZW50IG9yIGEgZmlsdGVyKSB3aWxsIGJlIGlnbm9y
ZWQuCi0gICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3Vu
ZGluZ0JveCgpOwotICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSAmJiBvYmplY3RCb3VuZGluZ0Jv
eC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9ncmFkaWVu
dC5jb250YWlucyhvYmplY3QpKQotICAgICAgICBtX2dyYWRpZW50LnNldChvYmplY3QsIG5ldyBH
cmFkaWVudERhdGEpOwotCi0gICAgR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEgPSBtX2dyYWRp
ZW50LmdldChvYmplY3QpOwotICAgIGJvb2wgaXNQYWludGluZ1RleHQgPSByZXNvdXJjZU1vZGUg
JiBBcHBseVRvVGV4dE1vZGU7Ci0KLSAgICAvLyBDcmVhdGUgZ3JhZGllbnQgb2JqZWN0Ci0gICAg
aWYgKCFncmFkaWVudERhdGEtPmdyYWRpZW50KSB7Ci0gICAgICAgIGJ1aWxkR3JhZGllbnQoZ3Jh
ZGllbnREYXRhLCBncmFkaWVudEVsZW1lbnQpOwotCi0gICAgICAgIC8vIENHIHBsYXRmb3JtcyB3
aWxsIGhhbmRsZSB0aGUgZ3JhZGllbnQgc3BhY2UgdHJhbnNmb3JtIGZvciB0ZXh0IGFmdGVyIGFw
cGx5aW5nIHRoZQotICAgICAgICAvLyByZXNvdXJjZSwgc28gZG9uJ3QgYXBwbHkgaXQgaGVyZS4g
Rm9yIG5vbi1DRyBwbGF0Zm9ybXMsIHdlIHdhbnQgdGhlIHRleHQgYm91bmRpbmcKLSAgICAgICAg
Ly8gYm94IGFwcGxpZWQgdG8gdGhlIGdyYWRpZW50IHNwYWNlIHRyYW5zZm9ybSBub3csIHNvIHRo
ZSBncmFkaWVudCBzaGFkZXIgY2FuIHVzZSBpdC4KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAg
aWYgKGJvdW5kaW5nQm94TW9kZSgpICYmICFvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkgJiYg
IWlzUGFpbnRpbmdUZXh0KSB7Ci0jZWxzZQotICAgICAgICBpZiAoYm91bmRpbmdCb3hNb2RlKCkg
JiYgIW9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkgewotI2VuZGlmCi0gICAgICAgICAgICBn
cmFkaWVudERhdGEtPnVzZXJzcGFjZVRyYW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdC
b3gueCgpLCBvYmplY3RCb3VuZGluZ0JveC55KCkpOwotICAgICAgICAgICAgZ3JhZGllbnREYXRh
LT51c2Vyc3BhY2VUcmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKG9iamVjdEJvdW5kaW5nQm94Lndp
ZHRoKCksIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFRyYW5zZm9ybTsKLSAgICAgICAgY2FsY3VsYXRlR3Jh
ZGllbnRUcmFuc2Zvcm0oZ3JhZGllbnRUcmFuc2Zvcm0pOwotCi0gICAgICAgIGdyYWRpZW50RGF0
YS0+dXNlcnNwYWNlVHJhbnNmb3JtLm11bHRMZWZ0KGdyYWRpZW50VHJhbnNmb3JtKTsKLSAgICAg
ICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudC0+c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybShncmFk
aWVudERhdGEtPnVzZXJzcGFjZVRyYW5zZm9ybSk7Ci0gICAgfQotCi0gICAgaWYgKCFncmFkaWVu
dERhdGEtPmdyYWRpZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBEcmF3IGdy
YWRpZW50Ci0gICAgY29udGV4dC0+c2F2ZSgpOwotCi0gICAgaWYgKGlzUGFpbnRpbmdUZXh0KSB7
Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgIGlmICghY3JlYXRlTWFza0FuZFN3YXBDb250ZXh0
Rm9yVGV4dEdyYWRpZW50KGNvbnRleHQsIG1fc2F2ZWRDb250ZXh0LCBtX2ltYWdlQnVmZmVyLCBv
YmplY3QpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGNvbnRleHQtPnNldFRl
eHREcmF3aW5nTW9kZShyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUgPyBUZXh0TW9kZUZp
bGwgOiBUZXh0TW9kZVN0cm9rZSk7Ci0gICAgfQotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7Ci0gICAgQVNTRVJUKHN2Z1N0eWxlKTsKLQot
ICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsKLSAgICAgICAgY29udGV4
dC0+c2V0QWxwaGEoc3ZnU3R5bGUtPmZpbGxPcGFjaXR5KCkpOwotICAgICAgICBjb250ZXh0LT5z
ZXRGaWxsR3JhZGllbnQoZ3JhZGllbnREYXRhLT5ncmFkaWVudCk7Ci0gICAgICAgIGNvbnRleHQt
PnNldEZpbGxSdWxlKHN2Z1N0eWxlLT5maWxsUnVsZSgpKTsKLSAgICB9IGVsc2UgaWYgKHJlc291
cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKSB7Ci0gICAgICAgIGlmIChzdmdTdHlsZS0+dmVj
dG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFKQotICAgICAgICAgICAgZ3JhZGll
bnREYXRhLT5ncmFkaWVudC0+c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybSh0cmFuc2Zvcm1Pbk5v
blNjYWxpbmdTdHJva2Uob2JqZWN0LCBncmFkaWVudERhdGEtPnVzZXJzcGFjZVRyYW5zZm9ybSkp
OwotICAgICAgICBjb250ZXh0LT5zZXRBbHBoYShzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpKTsK
LSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoZ3JhZGllbnREYXRhLT5ncmFkaWVu
dCk7Ci0gICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQo
Y29udGV4dCwgc3R5bGUsIG9iamVjdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCk7
Ci0gICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwotCi0gICAg
aWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkgewotI2lmIFBMQVRGT1JNKENHKQot
ICAgICAgICAvLyBDRyByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nIGZvciBncmFkaWVudCBvbiB0
ZXh0Ci0gICAgICAgIGlmIChtX3NhdmVkQ29udGV4dCAmJiBtX2dyYWRpZW50LmNvbnRhaW5zKG9i
amVjdCkpIHsKLSAgICAgICAgICAgIEdyYWRpZW50RGF0YSogZ3JhZGllbnREYXRhID0gbV9ncmFk
aWVudC5nZXQob2JqZWN0KTsKLQotICAgICAgICAgICAgLy8gUmVzdG9yZSBvbi1zY3JlZW4gZHJh
d2luZyBjb250ZXh0Ci0gICAgICAgICAgICBjb250ZXh0ID0gbV9zYXZlZENvbnRleHQ7Ci0gICAg
ICAgICAgICBtX3NhdmVkQ29udGV4dCA9IDA7Ci0KLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9y
bSBncmFkaWVudFRyYW5zZm9ybTsKLSAgICAgICAgICAgIGNhbGN1bGF0ZUdyYWRpZW50VHJhbnNm
b3JtKGdyYWRpZW50VHJhbnNmb3JtKTsKLQotICAgICAgICAgICAgRmxvYXRSZWN0IHRhcmdldFJl
Y3Q7Ci0gICAgICAgICAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5zZXRHcmFkaWVudFNwYWNl
VHJhbnNmb3JtKGNsaXBUb1RleHRNYXNrKGNvbnRleHQsIG1faW1hZ2VCdWZmZXIsIHRhcmdldFJl
Y3QsIG9iamVjdCwgYm91bmRpbmdCb3hNb2RlKCksIGdyYWRpZW50VHJhbnNmb3JtKSk7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnREYXRhLT5ncmFkaWVudCk7
Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHRhcmdldFJlY3QpOwotICAgICAgICAg
ICAgbV9pbWFnZUJ1ZmZlci5jbGVhcigpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBVTlVT
RURfUEFSQU0ob2JqZWN0KTsKLSNlbmRpZgotICAgIH0gZWxzZSBpZiAocGF0aCkgewotICAgICAg
ICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQotICAgICAgICAgICAgY29udGV4
dC0+ZmlsbFBhdGgoKnBhdGgpOwotICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBs
eVRvU3Ryb2tlTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOwot
ICAgIH0KLQotICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50OjphZGRTdG9wcyhHcmFkaWVudERhdGEqIGdyYWRpZW50RGF0YSwgY29uc3Qg
VmVjdG9yPEdyYWRpZW50OjpDb2xvclN0b3A+JiBzdG9wcykgY29uc3QKLXsKLSAgICBBU1NFUlQo
Z3JhZGllbnREYXRhLT5ncmFkaWVudCk7Ci0KLSAgICBjb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNv
bG9yU3RvcD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0b3BzLmVuZCgpOwotICAgIGZvciAoVmVj
dG9yPEdyYWRpZW50OjpDb2xvclN0b3A+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0b3BzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudC0+YWRk
Q29sb3JTdG9wKCppdCk7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCShyZXZpc2lvbiA3NTI3MikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogICAgICAgICAgICAgICAyMDA4IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFJlbmRl
clNWR1Jlc291cmNlR3JhZGllbnRfaAotI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
X2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCi0jaW5j
bHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50LmgiCi0KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBHcmFkaWVudERhdGEgewotICAgIFJlZlB0
cjxHcmFkaWVudD4gZ3JhZGllbnQ7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJzcGFjZVRyYW5z
Zm9ybTsKLX07Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLQotY2xhc3MgUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudCA6IHB1YmxpYyBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciB7Ci1wdWJs
aWM6Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudChTVkdHcmFkaWVudEVsZW1lbnQqKTsK
LSAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50KCk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlkYXRpb24g
PSB0cnVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9i
amVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwotCi0gICAgdmlydHVhbCBi
b29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0Nv
bnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2ln
bmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOwotICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0
KCk7IH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQgYWRkU3RvcHMoR3JhZGllbnREYXRhKiwgY29u
c3QgVmVjdG9yPEdyYWRpZW50OjpDb2xvclN0b3A+JikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgYm91bmRpbmdCb3hNb2RlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxh
dGVHcmFkaWVudFRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMoU1ZHR3JhZGllbnRFbGVtZW50KikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KEdyYWRpZW50RGF0YSosIFNWR0dyYWRpZW50
RWxlbWVudCopIGNvbnN0ID0gMDsKLQotcHJpdmF0ZToKLSAgICBib29sIG1fc2hvdWxkQ29sbGVj
dEdyYWRpZW50QXR0cmlidXRlcyA6IDE7Ci0gICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBHcmFk
aWVudERhdGEqPiBtX2dyYWRpZW50OwotCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgR3JhcGhpY3ND
b250ZXh0KiBtX3NhdmVkQ29udGV4dDsKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VC
dWZmZXI7Ci0jZW5kaWYKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3Bw
CShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
TGluZWFyR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
U1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCIKLQotI2lu
Y2x1ZGUgIkxpbmVhckdyYWRpZW50QXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlNWR0xpbmVhckdy
YWRpZW50RWxlbWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclNWR1Jlc291
cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50OjpzX3Jlc291cmNlVHlwZSA9
IExpbmVhckdyYWRpZW50UmVzb3VyY2VUeXBlOwotCi1SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdy
YWRpZW50OjpSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50KFNWR0xpbmVhckdyYWRpZW50
RWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQobm9kZSkKLXsK
LX0KLQotUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudDo6flJlbmRlclNWR1Jlc291cmNl
TGluZWFyR3JhZGllbnQoKQotewotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3Jh
ZGllbnQ6OmNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMoU1ZHR3JhZGllbnRFbGVtZW50KiBncmFk
aWVudEVsZW1lbnQpCi17Ci0gICAgbV9hdHRyaWJ1dGVzID0gTGluZWFyR3JhZGllbnRBdHRyaWJ1
dGVzKCk7Ci0gICAgc3RhdGljX2Nhc3Q8U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Kj4oZ3JhZGll
bnRFbGVtZW50KS0+Y29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhtX2F0dHJpYnV0ZXMpOwotfQot
Ci12b2lkIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OmJ1aWxkR3JhZGllbnQoR3Jh
ZGllbnREYXRhKiBncmFkaWVudERhdGEsIFNWR0dyYWRpZW50RWxlbWVudCogZ3JhZGllbnRFbGVt
ZW50KSBjb25zdAotewotICAgIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCogbGluZWFyR3JhZGll
bnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Kj4oZ3JhZGll
bnRFbGVtZW50KTsKLQotICAgIC8vIERldGVybWluZSBncmFkaWVudCBzdGFydC9lbmQgcG9pbnRz
Ci0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50OwotICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQ7Ci0g
ICAgbGluZWFyR3JhZGllbnRFbGVtZW50LT5jYWxjdWxhdGVTdGFydEVuZFBvaW50cyhtX2F0dHJp
YnV0ZXMsIHN0YXJ0UG9pbnQsIGVuZFBvaW50KTsKLQotICAgIGdyYWRpZW50RGF0YS0+Z3JhZGll
bnQgPSBHcmFkaWVudDo6Y3JlYXRlKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTsKLSAgICBncmFkaWVu
dERhdGEtPmdyYWRpZW50LT5zZXRTcHJlYWRNZXRob2QobV9hdHRyaWJ1dGVzLnNwcmVhZE1ldGhv
ZCgpKTsKLQotICAgIC8vIEFkZCBzdG9wcwotICAgIGFkZFN0b3BzKGdyYWRpZW50RGF0YSwgbV9h
dHRyaWJ1dGVzLnN0b3BzKCkpOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaAkocmV2aXNp
b24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdy
YWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKgotICovCi0KLSNpZm5kZWYgUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudF9oCi0j
ZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnRfaAotCi0jaWYgRU5BQkxFKFNW
RykKLSNpbmNsdWRlICJMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdSZXNvdXJjZUxpbmVh
ckdyYWRpZW50IDogcHVibGljIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQgewotcHVibGljOgot
ICAgIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQoU1ZHTGluZWFyR3JhZGllbnRFbGVt
ZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudCgpOwot
Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJl
bmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQiOyB9Ci0KLSAgICB2aXJ0dWFsIFJlbmRlclNW
R1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCB7IHJldHVybiBzX3Jlc291cmNlVHlw
ZTsgfQotICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgc19yZXNvdXJjZVR5cGU7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgYm91bmRpbmdCb3hNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRy
aWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNhbGN1bGF0ZUdy
YWRpZW50VHJhbnNmb3JtKEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7IHRyYW5zZm9ybSA9
IG1fYXR0cmlidXRlcy5ncmFkaWVudFRyYW5zZm9ybSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNv
bGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMoU1ZHR3JhZGllbnRFbGVtZW50Kik7Ci0gICAgdmlydHVh
bCB2b2lkIGJ1aWxkR3JhZGllbnQoR3JhZGllbnREYXRhKiwgU1ZHR3JhZGllbnRFbGVtZW50Kikg
Y29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzIG1fYXR0cmli
dXRlczsKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAJKHJldmlzaW9uIDc1MjcyKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3
LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogICAgICAg
ICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVO
QUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKLQotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgot
I2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdNYXJrZXJFbGVtZW50LmgiCi0j
aW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLVJlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlcjo6c19yZXNvdXJjZVR5cGUgPSBNYXJrZXJSZXNvdXJjZVR5cGU7Ci0KLVJlbmRlclNWR1Jl
c291cmNlTWFya2VyOjpSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcihTVkdNYXJrZXJFbGVtZW50KiBu
b2RlKQotICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKLXsKLX0KLQotUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXI6On5SZW5kZXJTVkdSZXNvdXJjZU1hcmtlcigpCi17Ci19Ci0K
LXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmxheW91dCgpCi17Ci0gICAgLy8gSW52YWxp
ZGF0ZSBhbGwgcmVzb3VyY2VzIGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KLSAgICBpZiAobV9ldmVy
SGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91dCgpKQotICAgICAgICByZW1vdmVBbGxDbGllbnRz
RnJvbUNhY2hlKCk7Ci0KLSAgICAvLyBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIgb3ZlcndyaXRl
cyBsYXlvdXQoKS4gV2UgbmVlZCB0aGUKLSAgICAvLyBsYXlvdXRpbmcgb2YgUmVuZGVyU1ZHQ29u
dGFpbmVyIGZvciBjYWxjdWxhdGluZyAgbG9jYWwKLSAgICAvLyB0cmFuc2Zvcm1hdGlvbnMgYW5k
IHJlcGFpbnQuCi0gICAgUmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXQoKTsKLX0KLQotdm9pZCBS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1h
cmtGb3JJbnZhbGlkYXRpb24pCi17Ci0gICAgbWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24o
bWFya0ZvckludmFsaWRhdGlvbiA/IExheW91dEFuZEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQ
YXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
cjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCogY2xpZW50LCBib29sIG1hcmtG
b3JJbnZhbGlkYXRpb24pCi17Ci0gICAgQVNTRVJUKGNsaWVudCk7Ci0gICAgbWFya0NsaWVudEZv
ckludmFsaWRhdGlvbihjbGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52
YWxpZGF0aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXI6OmFwcGx5Vmlld3BvcnRDbGlwKFBhaW50SW5mbyYgcGFpbnRJbmZvKQot
ewotICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0Ojppc092ZXJmbG93SGlkZGVuKHRoaXMpKQotICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChtX3ZpZXdwb3J0KTsKLX0KLQotRmxvYXRSZWN0
IFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjptYXJrZXJCb3VuZGFyaWVzKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgbWFya2VyVHJhbnNmb3JtYXRpb24pIGNvbnN0Ci17Ci0gICAgRmxvYXRSZWN0IGNv
b3JkaW5hdGVzID0gUmVuZGVyU1ZHQ29udGFpbmVyOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpOwotCi0gICAgLy8gTWFwIHJlcGFpbnQgcmVjdCBpbnRvIHBhcmVudCBjb29yZGluYXRl
IHNwYWNlLCBpbiB3aGljaCB0aGUgbWFya2VyIGJvdW5kYXJpZXMgaGF2ZSB0byBiZSBldmFsdWF0
ZWQKLSAgICBjb29yZGluYXRlcyA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KGNv
b3JkaW5hdGVzKTsKLQotICAgIHJldHVybiBtYXJrZXJUcmFuc2Zvcm1hdGlvbi5tYXBSZWN0KGNv
b3JkaW5hdGVzKTsKLX0KLQotY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlcjo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIHZpZXdwb3J0VHJhbnNsYXRpb24odmlld3BvcnRUcmFuc2Zvcm0oKSk7Ci0gICAgbV9s
b2NhbFRvUGFyZW50VHJhbnNmb3JtID0gdmlld3BvcnRUcmFuc2xhdGlvbi50cmFuc2xhdGVSaWdo
dChtX3ZpZXdwb3J0LngoKSwgbV92aWV3cG9ydC55KCkpOwotICAgIHJldHVybiBtX2xvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm07Ci0gICAgLy8gSWYgdGhpcyBjbGFzcyB3ZXJlIGV2ZXIgZ2l2ZW4gYSBs
b2NhbFRyYW5zZm9ybSgpLCB0aGVuIHRoZSBhYm92ZSB3b3VsZCByZWFkOgotICAgIC8vIHJldHVy
biB2aWV3cG9ydFRyYW5zZm9ybSgpICogbG9jYWxUcmFuc2Zvcm0oKSAqIHZpZXdwb3J0VHJhbnNs
YXRpb247Ci19Ci0KLUZsb2F0UG9pbnQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OnJlZmVyZW5j
ZVBvaW50KCkgY29uc3QKLXsKLSAgICBTVkdNYXJrZXJFbGVtZW50KiBtYXJrZXIgPSBzdGF0aWNf
Y2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBBU1NFUlQobWFya2VyKTsKLQot
ICAgIHJldHVybiBGbG9hdFBvaW50KG1hcmtlci0+cmVmWCgpLnZhbHVlKG1hcmtlciksIG1hcmtl
ci0+cmVmWSgpLnZhbHVlKG1hcmtlcikpOwotfQotCi1mbG9hdCBSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlcjo6YW5nbGUoKSBjb25zdAotewotICAgIFNWR01hcmtlckVsZW1lbnQqIG1hcmtlciA9IHN0
YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQqPihub2RlKCkpOwotICAgIEFTU0VSVChtYXJrZXIp
OwotCi0gICAgZmxvYXQgYW5nbGUgPSAtMTsKLSAgICBpZiAobWFya2VyLT5vcmllbnRUeXBlKCkg
PT0gU1ZHTWFya2VyRWxlbWVudDo6U1ZHX01BUktFUl9PUklFTlRfQU5HTEUpCi0gICAgICAgIGFu
Z2xlID0gbWFya2VyLT5vcmllbnRBbmdsZSgpLnZhbHVlKCk7Ci0KLSAgICByZXR1cm4gYW5nbGU7
Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bWFya2VyVHJh
bnNmb3JtYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBhdXRvQW5nbGUsIGZs
b2F0IHN0cm9rZVdpZHRoKSBjb25zdAotewotICAgIFNWR01hcmtlckVsZW1lbnQqIG1hcmtlciA9
IHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQqPihub2RlKCkpOwotICAgIEFTU0VSVChtYXJr
ZXIpOwotCi0gICAgZmxvYXQgbWFya2VyQW5nbGUgPSBhbmdsZSgpOwotICAgIGJvb2wgdXNlU3Ry
b2tlV2lkdGggPSAobWFya2VyLT5tYXJrZXJVbml0cygpID09IFNWR01hcmtlckVsZW1lbnQ6OlNW
R19NQVJLRVJVTklUU19TVFJPS0VXSURUSCk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNm
b3JtOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob3JpZ2luLngoKSwgb3JpZ2luLnkoKSk7Ci0g
ICAgdHJhbnNmb3JtLnJvdGF0ZShtYXJrZXJBbmdsZSA9PSAtMSA/IGF1dG9BbmdsZSA6IG1hcmtl
ckFuZ2xlKTsKLSAgICB0cmFuc2Zvcm0gPSBtYXJrZXJDb250ZW50VHJhbnNmb3JtYXRpb24odHJh
bnNmb3JtLCByZWZlcmVuY2VQb2ludCgpLCB1c2VTdHJva2VXaWR0aCA/IHN0cm9rZVdpZHRoIDog
LTEpOwotICAgIHJldHVybiB0cmFuc2Zvcm07Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXI6OmRyYXcoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKQotewotICAgIFBhaW50SW5mbyBpbmZvKHBhaW50SW5mbyk7Ci0gICAgaW5mby5j
b250ZXh0LT5zYXZlKCk7Ci0gICAgaW5mby5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0pOwotICAg
IFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoaW5mbywgMCwgMCk7Ci0gICAgaW5mby5jb250ZXh0
LT5yZXN0b3JlKCk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
cjo6bWFya2VyQ29udGVudFRyYW5zZm9ybWF0aW9uKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY29u
dGVudFRyYW5zZm9ybWF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHN0cm9r
ZVdpZHRoKSBjb25zdAotewotICAgIC8vIFRoZSAnb3JpZ2luJyBjb29yZGluYXRlIG1hcHMgdG8g
U1ZHcyByZWZYL3JlZlksIGdpdmVuIGluIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSB2aWV3
cG9ydCBlc3RhYmxpc2hlZCBieSB0aGUgbWFya2VyCi0gICAgRmxvYXRQb2ludCBtYXBwZWRPcmln
aW4gPSB2aWV3cG9ydFRyYW5zZm9ybSgpLm1hcFBvaW50KG9yaWdpbik7Ci0KLSAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtYXRpb24gPSBjb250ZW50VHJhbnNmb3JtYXRpb247Ci0gICAgaWYg
KHN0cm9rZVdpZHRoICE9IC0xKQotICAgICAgICB0cmFuc2Zvcm1hdGlvbi5zY2FsZU5vblVuaWZv
cm0oc3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRoKTsKLQotICAgIHRyYW5zZm9ybWF0aW9uLnRyYW5z
bGF0ZSgtbWFwcGVkT3JpZ2luLngoKSwgLW1hcHBlZE9yaWdpbi55KCkpOwotICAgIHJldHVybiB0
cmFuc2Zvcm1hdGlvbjsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyOjp2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgU1ZHTWFya2VyRWxlbWVudCog
bWFya2VyID0gc3RhdGljX2Nhc3Q8U1ZHTWFya2VyRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgQVNT
RVJUKG1hcmtlcik7Ci0KLSAgICByZXR1cm4gbWFya2VyLT52aWV3Qm94VG9WaWV3VHJhbnNmb3Jt
KG1fdmlld3BvcnQud2lkdGgoKSwgbV92aWV3cG9ydC5oZWlnaHQoKSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmNhbGNWaWV3cG9ydCgpCi17Ci0gICAgaWYgKCFzZWxmTmVl
ZHNMYXlvdXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU1ZHTWFya2VyRWxlbWVudCogbWFy
a2VyID0gc3RhdGljX2Nhc3Q8U1ZHTWFya2VyRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgQVNTRVJU
KG1hcmtlcik7Ci0KLSAgICBmbG9hdCB3ID0gbWFya2VyLT5tYXJrZXJXaWR0aCgpLnZhbHVlKG1h
cmtlcik7Ci0gICAgZmxvYXQgaCA9IG1hcmtlci0+bWFya2VySGVpZ2h0KCkudmFsdWUobWFya2Vy
KTsKLSAgICBtX3ZpZXdwb3J0ID0gRmxvYXRSZWN0KDAsIDAsIHcsIGgpOwotfQotCi19Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlci5oCShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlTWFya2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
cl9oCi0jZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlTWFya2VyX2gKLQotI2lmIEVOQUJMRShTVkcp
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKLSNpbmNsdWRlICJTVkdNYXJrZXJF
bGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotCi0jaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBZmZpbmVUcmFuc2Zv
cm07Ci0KLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlTWFya2VyIDogcHVibGljIFJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcihT
VkdNYXJrZXJFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIo
KTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJu
ICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciI7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVB
bGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwotICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBt
YXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7Ci0KLSAgICB2b2lkIGRyYXcoUGFpbnRJbmZvJiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0KLSAgICAvLyBDYWxjdWxhdGVzIG1hcmtlciBib3Vu
ZGFyaWVzLCBtYXBwZWQgdG8gdGhlIHRhcmdldCBlbGVtZW50J3MgY29vcmRpbmF0ZSBzcGFjZQot
ICAgIEZsb2F0UmVjdCBtYXJrZXJCb3VuZGFyaWVzKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWFy
a2VyVHJhbnNmb3JtYXRpb24pIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5Vmlld3Bv
cnRDbGlwKFBhaW50SW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY2FsY1ZpZXdwb3J0KCk7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0OwotICAgIEFmZmluZVRyYW5zZm9y
bSBtYXJrZXJUcmFuc2Zvcm1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IGFu
Z2xlLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlS
ZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1
bnNpZ25lZCBzaG9ydCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBy
ZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9
Ci0KLSAgICBGbG9hdFBvaW50IHJlZmVyZW5jZVBvaW50KCkgY29uc3Q7Ci0gICAgZmxvYXQgYW5n
bGUoKSBjb25zdDsKLSAgICBTVkdNYXJrZXJFbGVtZW50OjpTVkdNYXJrZXJVbml0c1R5cGUgbWFy
a2VyVW5pdHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50OjpT
VkdNYXJrZXJVbml0c1R5cGU+KHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQqPihub2RlKCkp
LT5tYXJrZXJVbml0cygpKTsgfQotCi0gICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUg
cmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KLSAgICBzdGF0
aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBlOwotCi1wcml2YXRlOgotICAg
IC8vIEdlbmVyYXRlcyBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB1c2FibGUgdG8gcmVuZGVyIG1h
cmtlciBjb250ZW50LiBIYW5kbGVzIHNjYWxpbmcgdGhlIG1hcmtlciBjb250ZW50Ci0gICAgLy8g
YWNvcmRpbmcgdG8gU1ZHcyBtYXJrZXJVbml0cz0ic3Ryb2tlV2lkdGgiIGNvbmNlcHQsIHdoZW4g
YSBzdHJva2VXaWR0aCB2YWx1ZSAhPSAtMSBpcyBwYXNzZWQgaW4uCi0gICAgQWZmaW5lVHJhbnNm
b3JtIG1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNv
bnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBzdHJv
a2VXaWR0aCA9IC0xKSBjb25zdDsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3cG9ydFRyYW5z
Zm9ybSgpIGNvbnN0OwotCi0gICAgbXV0YWJsZSBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRvUGFy
ZW50VHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBtX3ZpZXdwb3J0OwotfTsKLQotfQotI2VuZGlm
Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
TWFza2VyLmNwcAkocmV2aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZU1hc2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjI0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJM
RShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCIKLQotI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgotI2luY2x1
ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmgiCi0jaW5j
bHVkZSAiU1ZHTWFza0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0j
aW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCi0KLSNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNv
dXJjZU1hc2tlcjo6c19yZXNvdXJjZVR5cGUgPSBNYXNrZXJSZXNvdXJjZVR5cGU7Ci0KLVJlbmRl
clNWR1Jlc291cmNlTWFza2VyOjpSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcihTVkdNYXNrRWxlbWVu
dCogbm9kZSkKLSAgICA6IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKG5vZGUpCi17Ci19Ci0K
LVJlbmRlclNWR1Jlc291cmNlTWFza2VyOjp+UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIoKQotewot
ICAgIGlmIChtX21hc2tlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlbGV0
ZUFsbFZhbHVlcyhtX21hc2tlcik7Ci0gICAgbV9tYXNrZXIuY2xlYXIoKTsKLX0KLQotdm9pZCBS
ZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1h
cmtGb3JJbnZhbGlkYXRpb24pCi17Ci0gICAgbV9tYXNrQ29udGVudEJvdW5kYXJpZXMgPSBGbG9h
dFJlY3QoKTsKLSAgICBpZiAoIW1fbWFza2VyLmlzRW1wdHkoKSkgewotICAgICAgICBkZWxldGVB
bGxWYWx1ZXMobV9tYXNrZXIpOwotICAgICAgICBtX21hc2tlci5jbGVhcigpOwotICAgIH0KLQot
ICAgIG1hcmtBbGxDbGllbnRzRm9ySW52YWxpZGF0aW9uKG1hcmtGb3JJbnZhbGlkYXRpb24gPyBM
YXlvdXRBbmRCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7
Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OnJlbW92ZUNsaWVudEZyb21DYWNo
ZShSZW5kZXJPYmplY3QqIGNsaWVudCwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uKQotewotICAg
IEFTU0VSVChjbGllbnQpOwotCi0gICAgaWYgKG1fbWFza2VyLmNvbnRhaW5zKGNsaWVudCkpCi0g
ICAgICAgIGRlbGV0ZSBtX21hc2tlci50YWtlKGNsaWVudCk7Ci0KLSAgICBtYXJrQ2xpZW50Rm9y
SW52YWxpZGF0aW9uKGNsaWVudCwgbWFya0ZvckludmFsaWRhdGlvbiA/IEJvdW5kYXJpZXNJbnZh
bGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVy
U3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJj
ZU1vZGUpCi17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgQVNTRVJUKGNvbnRleHQpOwotI2lm
bmRlZiBOREVCVUcKLSAgICBBU1NFUlQocmVzb3VyY2VNb2RlID09IEFwcGx5VG9EZWZhdWx0TW9k
ZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZXNvdXJjZU1vZGUpOwotI2VuZGlmCi0KLSAg
ICBpZiAoIW1fbWFza2VyLmNvbnRhaW5zKG9iamVjdCkpCi0gICAgICAgIG1fbWFza2VyLnNldChv
YmplY3QsIG5ldyBNYXNrZXJEYXRhKTsKLQotICAgIE1hc2tlckRhdGEqIG1hc2tlckRhdGEgPSBt
X21hc2tlci5nZXQob2JqZWN0KTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5z
Zm9ybTsKLSAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRv
T3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbShvYmplY3QsIGFic29sdXRlVHJhbnNmb3JtKTsK
LQotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5t
YXBSZWN0KG9iamVjdC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgRmxv
YXRSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpj
bGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIob2JqZWN0LCBhYnNvbHV0ZVRhcmdl
dFJlY3QpOwotCi0gICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgJiYgIWNsYW1wZWRBYnNv
bHV0ZVRhcmdldFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNWR01hc2tFbGVtZW50KiBtYXNr
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR01hc2tFbGVtZW50Kj4obm9kZSgpKTsKLSAgICAgICAg
aWYgKCFtYXNrRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBp
ZiAoIVNWR0ltYWdlQnVmZmVyVG9vbHM6OmNyZWF0ZUltYWdlQnVmZmVyKGFic29sdXRlVGFyZ2V0
UmVjdCwgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCwgbWFza2VyRGF0YS0+bWFza0ltYWdlLCBD
b2xvclNwYWNlTGluZWFyUkdCKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBHcmFwaGljc0NvbnRleHQqIG1hc2tJbWFnZUNvbnRleHQgPSBtYXNrZXJEYXRhLT5tYXNrSW1h
Z2UtPmNvbnRleHQoKTsKLSAgICAgICAgQVNTRVJUKG1hc2tJbWFnZUNvbnRleHQpOwotCi0gICAg
ICAgIC8vIFRoZSBzYXZlL3Jlc3RvcmUgcGFpciBpcyBuZWVkZWQgZm9yIGNsaXBUb0ltYWdlQnVm
ZmVyIC0gaXQgZG9lc24ndCB3b3JrIHdpdGhvdXQgaXQgb24gbm9uLUNnIHBsYXRmb3Jtcy4KLSAg
ICAgICAgbWFza0ltYWdlQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0
LT50cmFuc2xhdGUoLWNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QueCgpLCAtY2xhbXBlZEFic29s
dXRlVGFyZ2V0UmVjdC55KCkpOwotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5jb25jYXRDVE0o
YWJzb2x1dGVUcmFuc2Zvcm0pOwotCi0gICAgICAgIGRyYXdDb250ZW50SW50b01hc2tJbWFnZSht
YXNrZXJEYXRhLCBtYXNrRWxlbWVudCwgb2JqZWN0KTsKLSAgICB9Ci0KLSAgICBpZiAoIW1hc2tl
ckRhdGEtPm1hc2tJbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU1ZHSW1hZ2VC
dWZmZXJUb29sczo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29udGV4dCwgYWJzb2x1dGVUcmFuc2Zvcm0s
IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIG1hc2tlckRhdGEtPm1hc2tJbWFnZSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmRyYXdDb250
ZW50SW50b01hc2tJbWFnZShNYXNrZXJEYXRhKiBtYXNrZXJEYXRhLCBjb25zdCBTVkdNYXNrRWxl
bWVudCogbWFza0VsZW1lbnQsIFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIEdyYXBoaWNz
Q29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Y29udGV4
dCgpOwotICAgIEFTU0VSVChtYXNrSW1hZ2VDb250ZXh0KTsKLQotICAgIC8vIEV2ZW50dWFsbHkg
YWRqdXN0IHRoZSBtYXNrIGltYWdlIGNvbnRleHQgYWNjb3JkaW5nIHRvIHRoZSB0YXJnZXQgb2Jq
ZWN0Qm91bmRpbmdCb3guCi0gICAgQWZmaW5lVHJhbnNmb3JtIG1hc2tDb250ZW50VHJhbnNmb3Jt
YXRpb247Ci0gICAgaWYgKG1hc2tFbGVtZW50LT5tYXNrQ29udGVudFVuaXRzKCkgPT0gU1ZHVW5p
dFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7Ci0gICAgICAgIEZsb2F0
UmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKLSAg
ICAgICAgbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbi50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdC
b3gueCgpLCBvYmplY3RCb3VuZGluZ0JveC55KCkpOwotICAgICAgICBtYXNrQ29udGVudFRyYW5z
Zm9ybWF0aW9uLnNjYWxlTm9uVW5pZm9ybShvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpLCBvYmpl
Y3RCb3VuZGluZ0JveC5oZWlnaHQoKSk7Ci0gICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmNvbmNh
dENUTShtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uKTsKLSAgICB9Ci0KLSAgICAvLyBEcmF3IHRo
ZSBjb250ZW50IGludG8gdGhlIEltYWdlQnVmZmVyLgotICAgIGZvciAoTm9kZSogbm9kZSA9IG1h
c2tFbGVtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygp
KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwot
ICAgICAgICBpZiAoIW5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVt
ZW50Kj4obm9kZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVyKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwotICAg
ICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gTk9ORSB8fCBzdHlsZS0+dmlz
aWJpbGl0eSgpICE9IFZJU0lCTEUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgU1ZH
SW1hZ2VCdWZmZXJUb29sczo6cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIobWFza2VyRGF0YS0+
bWFza0ltYWdlLmdldCgpLCByZW5kZXJlciwgbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbik7Ci0g
ICAgfQotCi0gICAgbWFza0ltYWdlQ29udGV4dC0+cmVzdG9yZSgpOwotCi0jaWYgIVBMQVRGT1JN
KENHKQotICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xv
clNwYWNlRGV2aWNlUkdCLCBDb2xvclNwYWNlTGluZWFyUkdCKTsKLSNlbmRpZgotCi0gICAgLy8g
Q3JlYXRlIHRoZSBsdW1pbmFuY2UgbWFzay4KLSAgICBJbnRSZWN0IG1hc2tJbWFnZVJlY3QoSW50
UG9pbnQoKSwgbWFza2VyRGF0YS0+bWFza0ltYWdlLT5zaXplKCkpOwotICAgIFJlZlB0cjxCeXRl
QXJyYXk+IHNyY1BpeGVsQXJyYXkgPSBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UtPmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShtYXNrSW1hZ2VSZWN0KTsKLQotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlM
ZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVs
T2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCAr
PSA0KSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYSA9IHNyY1BpeGVsQXJyYXktPmdldChwaXhl
bE9mZnNldCArIDMpOwotICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgdW5zaWduZWQgY2hhciByID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsT2Zmc2V0KTsK
LSAgICAgICAgdW5zaWduZWQgY2hhciBnID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsT2Zmc2V0
ICsgMSk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYiA9IHNyY1BpeGVsQXJyYXktPmdldChwaXhl
bE9mZnNldCArIDIpOwotCi0gICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICog
MC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAgICBzcmNQ
aXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKLSAgICB9Ci0KLSAgICBtYXNr
ZXJEYXRhLT5tYXNrSW1hZ2UtPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShzcmNQaXhlbEFycmF5
LmdldCgpLCBtYXNrSW1hZ2VSZWN0LnNpemUoKSwgbWFza0ltYWdlUmVjdCwgSW50UG9pbnQoKSk7
Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmNhbGN1bGF0ZU1hc2tDb250ZW50
UmVwYWludFJlY3QoKQotewotICAgIGZvciAoTm9kZSogY2hpbGROb2RlID0gbm9kZSgpLT5maXJz
dENoaWxkKCk7IGNoaWxkTm9kZTsgY2hpbGROb2RlID0gY2hpbGROb2RlLT5uZXh0U2libGluZygp
KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRlcmVy
KCk7Ci0gICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVyKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVy
LT5zdHlsZSgpOwotICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gTk9O
RSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCi0gICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIG1fbWFza0NvbnRlbnRCb3VuZGFyaWVzLnVuaXRlKHJlbmRlcmVyLT5sb2Nh
bFRvUGFyZW50VHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSkpOwotICAgIH0KLX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNl
TWFza2VyOjpyZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAg
IFNWR01hc2tFbGVtZW50KiBtYXNrRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR01hc2tFbGVtZW50
Kj4obm9kZSgpKTsKLSAgICBBU1NFUlQobWFza0VsZW1lbnQpOwotCi0gICAgRmxvYXRSZWN0IG9i
amVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwotICAgIEZsb2F0
UmVjdCBtYXNrQm91bmRhcmllcyA9IG1hc2tFbGVtZW50LT5tYXNrQm91bmRpbmdCb3gob2JqZWN0
Qm91bmRpbmdCb3gpOwotCi0gICAgLy8gUmVzb3VyY2Ugd2FzIG5vdCBsYXlvdXRlZCB5ZXQuIEdp
dmUgYmFjayBjbGlwcGluZyByZWN0IG9mIHRoZSBtYXNrLgotICAgIGlmIChzZWxmTmVlZHNMYXlv
dXQoKSkKLSAgICAgICAgcmV0dXJuIG1hc2tCb3VuZGFyaWVzOwotCi0gICAgaWYgKG1fbWFza0Nv
bnRlbnRCb3VuZGFyaWVzLmlzRW1wdHkoKSkKLSAgICAgICAgY2FsY3VsYXRlTWFza0NvbnRlbnRS
ZXBhaW50UmVjdCgpOwotCi0gICAgRmxvYXRSZWN0IG1hc2tSZWN0ID0gbV9tYXNrQ29udGVudEJv
dW5kYXJpZXM7Ci0gICAgaWYgKG1hc2tFbGVtZW50LT5tYXNrQ29udGVudFVuaXRzKCkgPT0gU1ZH
VW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7Ci0gICAgICAgIEFm
ZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob2Jq
ZWN0Qm91bmRpbmdCb3gueCgpLCBvYmplY3RCb3VuZGluZ0JveC55KCkpOwotICAgICAgICB0cmFu
c2Zvcm0uc2NhbGVOb25Vbmlmb3JtKG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJv
dW5kaW5nQm94LmhlaWdodCgpKTsKLSAgICAgICAgbWFza1JlY3QgPSB0cmFuc2Zvcm0ubWFwUmVj
dChtYXNrUmVjdCk7Ci0gICAgfQotCi0gICAgbWFza1JlY3QuaW50ZXJzZWN0KG1hc2tCb3VuZGFy
aWVzKTsKLSAgICByZXR1cm4gbWFza1JlY3Q7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShT
VkcpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmgJ
KHJldmlzaW9uIDc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICoKLSAqLwotCi0jaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlTWFza2VyX2gKLSNkZWZpbmUgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXJfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR01hc2tFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
VW5pdFR5cGVzLmgiCi0KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgTWFza2VyRGF0YSB7Ci0g
ICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2U7Ci19OwotCi1jbGFzcyBSZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlciA6IHB1YmxpYyBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciB7Ci1wdWJs
aWM6Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIoU1ZHTWFza0VsZW1lbnQqKTsKLSAgICB2
aXJ0dWFsIH5SZW5kZXJTVkdSZXNvdXJjZU1hc2tlcigpOwotCi0gICAgdmlydHVhbCBjb25zdCBj
aGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1Jlc291cmNlTWFza2Vy
IjsgfQotCi0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9vbCBt
YXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVu
dEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVl
KTsKLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJT
dHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwot
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kik7
Ci0KLSAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIG1hc2tVbml0cygpIGNvbnN0IHsgcmV0
dXJuIHRvVW5pdFR5cGUoc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpLT5tYXNr
VW5pdHMoKSk7IH0KLSAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIG1hc2tDb250ZW50VW5p
dHMoKSBjb25zdCB7IHJldHVybiB0b1VuaXRUeXBlKHN0YXRpY19jYXN0PFNWR01hc2tFbGVtZW50
Kj4obm9kZSgpKS0+bWFza0NvbnRlbnRVbml0cygpKTsgfQotCi0gICAgdmlydHVhbCBSZW5kZXJT
VkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5
cGU7IH0KLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBlOwot
Ci1wcml2YXRlOgotICAgIHZvaWQgZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKE1hc2tlckRhdGEq
LCBjb25zdCBTVkdNYXNrRWxlbWVudCosIFJlbmRlck9iamVjdCopOwotICAgIHZvaWQgY2FsY3Vs
YXRlTWFza0NvbnRlbnRSZXBhaW50UmVjdCgpOwotCi0gICAgRmxvYXRSZWN0IG1fbWFza0NvbnRl
bnRCb3VuZGFyaWVzOwotICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgTWFza2VyRGF0YSo+IG1f
bWFza2VyOwotfTsKLQotfQotCi0jZW5kaWYKLSNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShyZXZpc2lvbiA3NTI3MikKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlUGF0dGVybi5oIgotCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybkF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRl
ICJSZW5kZXJTVkdSb290LmgiCi0jaW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJUb29scy5oIgotI2lu
Y2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZW5k
ZXJTVkdSZXNvdXJjZVR5cGUgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpzX3Jlc291cmNlVHlw
ZSA9IFBhdHRlcm5SZXNvdXJjZVR5cGU7Ci0KLVJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6UmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuKFNWR1BhdHRlcm5FbGVtZW50KiBub2RlKQotICAgIDogUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKLSAgICAsIG1fc2hvdWxkQ29sbGVjdFBhdHRl
cm5BdHRyaWJ1dGVzKHRydWUpCi17Ci19Ci0KLVJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6flJl
bmRlclNWR1Jlc291cmNlUGF0dGVybigpCi17Ci0gICAgaWYgKG1fcGF0dGVybi5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3BhdHRlcm4pOwotICAg
IG1fcGF0dGVybi5jbGVhcigpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6
cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCi17Ci0g
ICAgaWYgKCFtX3BhdHRlcm4uaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcyht
X3BhdHRlcm4pOwotICAgICAgICBtX3BhdHRlcm4uY2xlYXIoKTsKLSAgICB9Ci0KLSAgICBtX3No
b3VsZENvbGxlY3RQYXR0ZXJuQXR0cmlidXRlcyA9IHRydWU7Ci0gICAgbWFya0FsbENsaWVudHNG
b3JJbnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IFJlcGFpbnRJbnZhbGlkYXRpb24g
OiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm46OnJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqIGNsaWVudCwgYm9vbCBt
YXJrRm9ySW52YWxpZGF0aW9uKQotewotICAgIEFTU0VSVChjbGllbnQpOwotCi0gICAgaWYgKG1f
cGF0dGVybi5jb250YWlucyhjbGllbnQpKQotICAgICAgICBkZWxldGUgbV9wYXR0ZXJuLnRha2Uo
Y2xpZW50KTsKLQotICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9y
SW52YWxpZGF0aW9uID8gUmVwYWludEludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRp
b24pOwotfQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBHcmFwaGljc0NvbnRleHQq
JiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpCi17Ci0gICAgQVNTRVJUKG9i
amVjdCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0gICAgQVNT
RVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwotCi0gICAgLy8gQmUgc3Vy
ZSB0byBzeW5jaHJvbml6ZSBhbGwgU1ZHIHByb3BlcnRpZXMgb24gdGhlIHBhdHRlcm5FbGVtZW50
IF9iZWZvcmVfIHByb2Nlc3NpbmcgYW55IGZ1cnRoZXIuCi0gICAgLy8gT3RoZXJ3aGlzZSB0aGUg
Y2FsbCB0byBjb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMoKSBiZWxvdywgbWF5IGNhdXNlIHRoZSBT
VkcgRE9NIHByb3BlcnR5Ci0gICAgLy8gc3luY2hyb25pemF0aW9uIHRvIGtpY2sgaW4sIHdoaWNo
IGNhdXNlcyByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCkgdG8gYmUgY2FsbGVkLCB3aGljaCBp
biB0dXJuIGRlbGV0ZXMgb3VyCi0gICAgLy8gUGF0dGVybkRhdGEgb2JqZWN0ISBMZWF2aW5nIG91
dCB0aGUgbGluZSBiZWxvdyB3aWxsIGNhdXNlIHN2Zy9keW5hbWljLXVwZGF0ZXMvU1ZHUGF0dGVy
bkVsZW1lbnQtc3ZnZG9tKiB0byBjcmFzaC4KLSAgICBTVkdQYXR0ZXJuRWxlbWVudCogcGF0dGVy
bkVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdQYXR0ZXJuRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAg
aWYgKCFwYXR0ZXJuRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1f
c2hvdWxkQ29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzKSB7Ci0gICAgICAgIHBhdHRlcm5FbGVtZW50
LT51cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShhbnlRTmFtZSgpKTsKLQotICAgICAgICBtX2F0
dHJpYnV0ZXMgPSBQYXR0ZXJuQXR0cmlidXRlcygpOwotICAgICAgICBwYXR0ZXJuRWxlbWVudC0+
Y29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzKG1fYXR0cmlidXRlcyk7Ci0gICAgICAgIG1fc2hvdWxk
Q29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gU3BlYzog
V2hlbiB0aGUgZ2VvbWV0cnkgb2YgdGhlIGFwcGxpY2FibGUgZWxlbWVudCBoYXMgbm8gd2lkdGgg
b3IgaGVpZ2h0IGFuZCBvYmplY3RCb3VuZGluZ0JveCBpcyBzcGVjaWZpZWQsCi0gICAgLy8gdGhl
biB0aGUgZ2l2ZW4gZWZmZWN0IChlLmcuIGEgZ3JhZGllbnQgb3IgYSBmaWx0ZXIpIHdpbGwgYmUg
aWdub3JlZC4KLSAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVj
dEJvdW5kaW5nQm94KCk7Ci0gICAgaWYgKG1fYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSAm
JiBvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICghbV9wYXR0ZXJuLmNvbnRhaW5zKG9iamVjdCkpCi0gICAgICAgIG1fcGF0dGVybi5z
ZXQob2JqZWN0LCBuZXcgUGF0dGVybkRhdGEpOwotCi0gICAgUGF0dGVybkRhdGEqIHBhdHRlcm5E
YXRhID0gbV9wYXR0ZXJuLmdldChvYmplY3QpOwotICAgIGlmICghcGF0dGVybkRhdGEtPnBhdHRl
cm4pIHsKLSAgICAgICAgLy8gSWYgd2UgY291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBwYXR0ZXJuIGNv
bnRlbnQgZWxlbWVudCByb290LCBzdG9wIGhlcmUuCi0gICAgICAgIGlmICghbV9hdHRyaWJ1dGVz
LnBhdHRlcm5Db250ZW50RWxlbWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIC8vIENvbXB1dGUgYWxsIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMgdG8gYnVpbGQg
dGhlIHRpbGUgaW1hZ2UgJiB0aGUgcGF0dGVybi4KLSAgICAgICAgRmxvYXRSZWN0IHRpbGVCb3Vu
ZGFyaWVzOwotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdGlsZUltYWdlVHJhbnNmb3JtOwotICAg
ICAgICBpZiAoIWJ1aWxkVGlsZUltYWdlVHJhbnNmb3JtKG9iamVjdCwgbV9hdHRyaWJ1dGVzLCBw
YXR0ZXJuRWxlbWVudCwgdGlsZUJvdW5kYXJpZXMsIHRpbGVJbWFnZVRyYW5zZm9ybSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRl
VHJhbnNmb3JtOwotICAgICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVUcmFuc2Zv
cm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbShvYmplY3QsIGFic29sdXRlVHJh
bnNmb3JtKTsKLQotICAgICAgICBGbG9hdFJlY3QgYWJzb2x1dGVUaWxlQm91bmRhcmllcyA9IGFi
c29sdXRlVHJhbnNmb3JtLm1hcFJlY3QodGlsZUJvdW5kYXJpZXMpOwotCi0gICAgICAgIC8vIEJ1
aWxkIHRpbGUgaW1hZ2UuCi0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gdGlsZUltYWdlID0g
Y3JlYXRlVGlsZUltYWdlKG9iamVjdCwgbV9hdHRyaWJ1dGVzLCB0aWxlQm91bmRhcmllcywgYWJz
b2x1dGVUaWxlQm91bmRhcmllcywgdGlsZUltYWdlVHJhbnNmb3JtKTsKLSAgICAgICAgaWYgKCF0
aWxlSW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgUmVmUHRyPElt
YWdlPiBjb3BpZWRJbWFnZSA9IHRpbGVJbWFnZS0+Y29weUltYWdlKCk7Ci0gICAgICAgIGlmICgh
Y29waWVkSW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gQnVp
bGQgcGF0dGVybi4KLSAgICAgICAgcGF0dGVybkRhdGEtPnBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVh
dGUoY29waWVkSW1hZ2UsIHRydWUsIHRydWUpOwotICAgICAgICBpZiAoIXBhdHRlcm5EYXRhLT5w
YXR0ZXJuKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIENvbXB1dGUg
cGF0dGVybiBzcGFjZSB0cmFuc2Zvcm1hdGlvbi4KLSAgICAgICAgcGF0dGVybkRhdGEtPnRyYW5z
Zm9ybS50cmFuc2xhdGUodGlsZUJvdW5kYXJpZXMueCgpLCB0aWxlQm91bmRhcmllcy55KCkpOwot
ICAgICAgICBwYXR0ZXJuRGF0YS0+dHJhbnNmb3JtLnNjYWxlKHRpbGVCb3VuZGFyaWVzLndpZHRo
KCkgLyBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLndpZHRoKCksIHRpbGVCb3VuZGFyaWVzLmhlaWdo
dCgpIC8gYWJzb2x1dGVUaWxlQm91bmRhcmllcy5oZWlnaHQoKSk7Ci0KLSAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPSBtX2F0dHJpYnV0ZXMucGF0dGVyblRyYW5zZm9y
bSgpOwotICAgICAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQotICAgICAg
ICAgICAgcGF0dGVybkRhdGEtPnRyYW5zZm9ybS5tdWx0aXBseShwYXR0ZXJuVHJhbnNmb3JtKTsK
LQotICAgICAgICBwYXR0ZXJuRGF0YS0+cGF0dGVybi0+c2V0UGF0dGVyblNwYWNlVHJhbnNmb3Jt
KHBhdHRlcm5EYXRhLT50cmFuc2Zvcm0pOwotICAgIH0KLQotICAgIC8vIERyYXcgcGF0dGVybgot
ICAgIGNvbnRleHQtPnNhdmUoKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHls
ZSA9IHN0eWxlLT5zdmdTdHlsZSgpOwotICAgIEFTU0VSVChzdmdTdHlsZSk7Ci0KLSAgICBpZiAo
cmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7Ci0gICAgICAgIGNvbnRleHQtPnNldEFs
cGhhKHN2Z1N0eWxlLT5maWxsT3BhY2l0eSgpKTsKLSAgICAgICAgY29udGV4dC0+c2V0RmlsbFBh
dHRlcm4ocGF0dGVybkRhdGEtPnBhdHRlcm4pOwotICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVs
ZShzdmdTdHlsZS0+ZmlsbFJ1bGUoKSk7Ci0gICAgfSBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBB
cHBseVRvU3Ryb2tlTW9kZSkgewotICAgICAgICBpZiAoc3ZnU3R5bGUtPnZlY3RvckVmZmVjdCgp
ID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRSkKLSAgICAgICAgICAgIHBhdHRlcm5EYXRhLT5wYXR0
ZXJuLT5zZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0odHJhbnNmb3JtT25Ob25TY2FsaW5nU3Ryb2tl
KG9iamVjdCwgcGF0dGVybkRhdGEtPnRyYW5zZm9ybSkpOwotICAgICAgICBjb250ZXh0LT5zZXRB
bHBoYShzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpKTsKLSAgICAgICAgY29udGV4dC0+c2V0U3Ry
b2tlUGF0dGVybihwYXR0ZXJuRGF0YS0+cGF0dGVybik7Ci0gICAgICAgIFNWR1JlbmRlclN1cHBv
cnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7Ci0g
ICAgfQotCi0gICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkgewotICAgICAg
ICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoVGV4dE1vZGVGaWxsKTsKLQotI2lmIFBMQVRGT1JNKENH
KQotICAgICAgICAgICAgY29udGV4dC0+YXBwbHlGaWxsUGF0dGVybigpOwotI2VuZGlmCi0gICAg
ICAgIH0gZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShUZXh0TW9kZVN0cm9rZSk7Ci0KLSNp
ZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIGNvbnRleHQtPmFwcGx5U3Ryb2tlUGF0dGVybigp
OwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVj
dCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9k
ZSwgY29uc3QgUGF0aCogcGF0aCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0gICAgQVNTRVJU
KHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwotCi0gICAgaWYgKHBhdGggJiYg
IShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7Ci0gICAgICAgIGlmIChyZXNvdXJj
ZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgq
cGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2Rl
KQotICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7Ci0gICAgfQotCi0gICAg
Y29udGV4dC0+cmVzdG9yZSgpOwotfQotCi1zdGF0aWMgaW5saW5lIEZsb2F0UmVjdCBjYWxjdWxh
dGVQYXR0ZXJuQm91bmRhcmllcyhjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYgYXR0cmlidXRlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCogcGF0dGVy
bkVsZW1lbnQpCi17Ci0gICAgQVNTRVJUKHBhdHRlcm5FbGVtZW50KTsKLQotICAgIGlmIChhdHRy
aWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KGF0dHJp
YnV0ZXMueCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC53aWR0aCgp
ICsgb2JqZWN0Qm91bmRpbmdCb3gueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZXMueSgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC5oZWlnaHQo
KSArIG9iamVjdEJvdW5kaW5nQm94LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGVzLndpZHRoKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5kaW5nQm94Lndp
ZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5oZWlnaHQoKS52YWx1
ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwotCi0gICAgcmV0
dXJuIEZsb2F0UmVjdChhdHRyaWJ1dGVzLngoKS52YWx1ZShwYXR0ZXJuRWxlbWVudCksCi0gICAg
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnkoKS52YWx1ZShwYXR0ZXJuRWxlbWVudCksCi0g
ICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLndpZHRoKCkudmFsdWUocGF0dGVybkVsZW1l
bnQpLAotICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5oZWlnaHQoKS52YWx1ZShwYXR0
ZXJuRWxlbWVudCkpOwotfQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YnVpbGRU
aWxlSW1hZ2VUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQYXR0ZXJuQXR0
cmlidXRlcyYgYXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCogcGF0dGVybkVsZW1l
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRmxvYXRSZWN0JiBwYXR0ZXJuQm91bmRhcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFn
ZVRyYW5zZm9ybSkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyZXIpOwotICAgIEFTU0VSVChw
YXR0ZXJuRWxlbWVudCk7Ci0KLSAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSByZW5k
ZXJlci0+b2JqZWN0Qm91bmRpbmdCb3goKTsKLSAgICBwYXR0ZXJuQm91bmRhcmllcyA9IGNhbGN1
bGF0ZVBhdHRlcm5Cb3VuZGFyaWVzKGF0dHJpYnV0ZXMsIG9iamVjdEJvdW5kaW5nQm94LCBwYXR0
ZXJuRWxlbWVudCk7IAotICAgIGlmIChwYXR0ZXJuQm91bmRhcmllcy53aWR0aCgpIDw9IDAgfHwg
cGF0dGVybkJvdW5kYXJpZXMuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdCb3hDVE0gPSBwYXR0ZXJuRWxlbWVudC0+dmlld0Jv
eFRvVmlld1RyYW5zZm9ybShwYXR0ZXJuRWxlbWVudC0+dmlld0JveCgpLCBwYXR0ZXJuRWxlbWVu
dC0+cHJlc2VydmVBc3BlY3RSYXRpbygpLCBwYXR0ZXJuQm91bmRhcmllcy53aWR0aCgpLCBwYXR0
ZXJuQm91bmRhcmllcy5oZWlnaHQoKSk7Ci0KLSAgICAvLyBBcHBseSB2aWV3Qm94L29iamVjdEJv
dW5kaW5nQm94IHRyYW5zZm9ybWF0aW9ucy4KLSAgICBpZiAoIXZpZXdCb3hDVE0uaXNJZGVudGl0
eSgpKQotICAgICAgICB0aWxlSW1hZ2VUcmFuc2Zvcm0gPSB2aWV3Qm94Q1RNOwotICAgIGVsc2Ug
aWYgKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlQ29udGVudCgpKSB7Ci0gICAgICAgIHRpbGVJ
bWFnZVRyYW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgpLCBvYmplY3RCb3Vu
ZGluZ0JveC55KCkpOwotICAgICAgICB0aWxlSW1hZ2VUcmFuc2Zvcm0uc2NhbGUob2JqZWN0Qm91
bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1QYXNzT3duUHRyPEltYWdlQnVmZmVyPiBSZW5kZXJTVkdS
ZXNvdXJjZVBhdHRlcm46OmNyZWF0ZVRpbGVJbWFnZShSZW5kZXJPYmplY3QqIG9iamVjdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRSZWN0JiB0aWxlQm91bmRhcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYg
YWJzb2x1dGVUaWxlQm91bmRhcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdAotewotICAgIEFTU0VSVChvYmplY3QpOwotCi0gICAg
Ly8gQ2xhbXAgdGlsZSBpbWFnZSBzaXplIGFnYWluc3QgU1ZHIHZpZXdwb3J0IHNpemUsIGFzIGxh
c3QgcmVzb3J0LCB0byBhdm9pZCBhbGxvY2F0aW5nIGh1Z2UgaW1hZ2UgYnVmZmVycy4KLSAgICBG
bG9hdFJlY3QgY29udGVudEJveFJlY3QgPSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVHJlZVJvb3RP
YmplY3Qob2JqZWN0KS0+Y29udGVudEJveFJlY3QoKTsKLQotICAgIEZsb2F0UmVjdCBjbGFtcGVk
QWJzb2x1dGVUaWxlQm91bmRhcmllcyA9IGFic29sdXRlVGlsZUJvdW5kYXJpZXM7Ci0gICAgaWYg
KGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLndpZHRoKCkgPiBjb250ZW50Qm94UmVjdC53
aWR0aCgpKQotICAgICAgICBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcy5zZXRXaWR0aChj
b250ZW50Qm94UmVjdC53aWR0aCgpKTsKLQotICAgIGlmIChjbGFtcGVkQWJzb2x1dGVUaWxlQm91
bmRhcmllcy5oZWlnaHQoKSA+IGNvbnRlbnRCb3hSZWN0LmhlaWdodCgpKQotICAgICAgICBjbGFt
cGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcy5zZXRIZWlnaHQoY29udGVudEJveFJlY3QuaGVpZ2h0
KCkpOwotCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2U7Ci0KLSAgICBpZiAoIVNW
R0ltYWdlQnVmZmVyVG9vbHM6OmNyZWF0ZUltYWdlQnVmZmVyKGFic29sdXRlVGlsZUJvdW5kYXJp
ZXMsIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCB0aWxlSW1hZ2UsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpKQotICAgICAgICByZXR1cm4gUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4oKTsKLQot
ICAgIEdyYXBoaWNzQ29udGV4dCogdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4
dCgpOwotICAgIEFTU0VSVCh0aWxlSW1hZ2VDb250ZXh0KTsKLQotICAgIC8vIFRoZSBpbWFnZSBi
dWZmZXIgcmVwcmVzZW50cyB0aGUgZmluYWwgcmVuZGVyZWQgc2l6ZSwgc28gdGhlIGNvbnRlbnQg
aGFzIHRvIGJlIHNjYWxlZCAodG8gYXZvaWQgcGl4ZWxhdGlvbikuCi0gICAgdGlsZUltYWdlQ29u
dGV4dC0+c2NhbGUoRmxvYXRTaXplKGFic29sdXRlVGlsZUJvdW5kYXJpZXMud2lkdGgoKSAvIHRp
bGVCb3VuZGFyaWVzLndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFic29sdXRlVGlsZUJvdW5kYXJpZXMuaGVpZ2h0KCkgLyB0aWxlQm91bmRhcmllcy5oZWln
aHQoKSkpOwotCi0gICAgLy8gQXBwbHkgdGlsZSBpbWFnZSB0cmFuc2Zvcm1hdGlvbnMuCi0gICAg
aWYgKCF0aWxlSW1hZ2VUcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQotICAgICAgICB0aWxlSW1hZ2VD
b250ZXh0LT5jb25jYXRDVE0odGlsZUltYWdlVHJhbnNmb3JtKTsKLQotICAgIEFmZmluZVRyYW5z
Zm9ybSBjb250ZW50VHJhbnNmb3JtYXRpb247Ci0KLSAgICAvLyBEcmF3IHRoZSBjb250ZW50IGlu
dG8gdGhlIEltYWdlQnVmZmVyLgotICAgIGZvciAoTm9kZSogbm9kZSA9IGF0dHJpYnV0ZXMucGF0
dGVybkNvbnRlbnRFbGVtZW50KCktPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5l
eHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpLT5pc1N0eWxlZCgpIHx8ICFub2RlLT5yZW5kZXJl
cigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6
OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKHRpbGVJbWFnZS5nZXQoKSwgbm9kZS0+cmVuZGVy
ZXIoKSwgY29udGVudFRyYW5zZm9ybWF0aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGlsZUlt
YWdlLnJlbGVhc2UoKTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFJlbmRl
clNWR1Jlc291cmNlUGF0dGVybl9oCi0jZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybl9o
Ci0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiUGF0
dGVybi5oIgotI2luY2x1ZGUgIlBhdHRlcm5BdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIuaCIKLSNpbmNsdWRlICJTVkdQYXR0ZXJuRWxlbWVudC5oIgot
I2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IFBh
dHRlcm5EYXRhIHsKLSAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybjsKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtOwotfTsKLQotY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuIDog
cHVibGljIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4oU1ZHUGF0dGVybkVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5SZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4oKTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4iOyB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZh
bGlkYXRpb24gPSB0cnVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hl
KFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwotCi0gICAg
dmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBH
cmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0
KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOwotICAgIHZpcnR1
YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4g
RmxvYXRSZWN0KCk7IH0KLQotICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291
cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9Ci0gICAgc3RhdGljIFJl
bmRlclNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKLQotcHJpdmF0ZToKLSAgICBib29s
IGJ1aWxkVGlsZUltYWdlVHJhbnNmb3JtKFJlbmRlck9iamVjdCosIGNvbnN0IFBhdHRlcm5BdHRy
aWJ1dGVzJiwgY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqLCBGbG9hdFJlY3QmIHBhdHRlcm5Cb3Vu
ZGFyaWVzLCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSkgY29uc3Q7Ci0KLSAg
ICBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVUaWxlSW1hZ2UoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVCb3VuZGFyaWVz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFJlY3QmIGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGls
ZUltYWdlVHJhbnNmb3JtKSBjb25zdDsKLQotICAgIGJvb2wgbV9zaG91bGRDb2xsZWN0UGF0dGVy
bkF0dHJpYnV0ZXMgOiAxOwotICAgIFBhdHRlcm5BdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKLSAg
ICBIYXNoTWFwPFJlbmRlck9iamVjdCosIFBhdHRlcm5EYXRhKj4gbV9wYXR0ZXJuOwotfTsKLQot
fQotCi0jZW5kaWYKLSNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VSYWRpYWxHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAJKHJldmlzaW9uIDc1MjcyKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIgotCi0jaW5jbHVkZSAiUmFkaWFsR3JhZGllbnRB
dHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIFJlbmRlclNWR1Jlc291
cmNlUmFkaWFsR3JhZGllbnQ6OnNfcmVzb3VyY2VUeXBlID0gUmFkaWFsR3JhZGllbnRSZXNvdXJj
ZVR5cGU7Ci0KLVJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQ6OlJlbmRlclNWR1Jlc291
cmNlUmFkaWFsR3JhZGllbnQoU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50KiBub2RlKQotICAgIDog
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudChub2RlKQotewotfQotCi1SZW5kZXJTVkdSZXNvdXJj
ZVJhZGlhbEdyYWRpZW50Ojp+UmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudCgpCi17Ci19
Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudDo6Y29sbGVjdEdyYWRpZW50
QXR0cmlidXRlcyhTVkdHcmFkaWVudEVsZW1lbnQqIGdyYWRpZW50RWxlbWVudCkKLXsKLSAgICBt
X2F0dHJpYnV0ZXMgPSBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMoKTsKLSAgICBzdGF0aWNfY2Fz
dDxTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQqPihncmFkaWVudEVsZW1lbnQpLT5jb2xsZWN0R3Jh
ZGllbnRBdHRyaWJ1dGVzKG1fYXR0cmlidXRlcyk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VSYWRpYWxHcmFkaWVudDo6YnVpbGRHcmFkaWVudChHcmFkaWVudERhdGEqIGdyYWRpZW50RGF0
YSwgU1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgU1ZH
UmFkaWFsR3JhZGllbnRFbGVtZW50KiByYWRpYWxHcmFkaWVudEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQqPihncmFkaWVudEVsZW1lbnQpOwotCi0gICAgLy8g
RGV0ZXJtaW5lIGdyYWRpZW50IGZvY2FsL2NlbnRlciBwb2ludHMgYW5kIHJhZGl1cwotICAgIEZs
b2F0UG9pbnQgZm9jYWxQb2ludDsKLSAgICBGbG9hdFBvaW50IGNlbnRlclBvaW50OwotICAgIGZs
b2F0IHJhZGl1czsKLSAgICByYWRpYWxHcmFkaWVudEVsZW1lbnQtPmNhbGN1bGF0ZUZvY2FsQ2Vu
dGVyUG9pbnRzQW5kUmFkaXVzKG1fYXR0cmlidXRlcywgZm9jYWxQb2ludCwgY2VudGVyUG9pbnQs
IHJhZGl1cyk7Ci0KLSAgICBncmFkaWVudERhdGEtPmdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0
ZShmb2NhbFBvaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIC8vIFNWRyBkb2VzIG5vdCBzdXBwb3J0IGEgImZvY3VzIHJhZGl1cyIKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJQb2ludCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXMpOwotCi0gICAg
Z3JhZGllbnREYXRhLT5ncmFkaWVudC0+c2V0U3ByZWFkTWV0aG9kKG1fYXR0cmlidXRlcy5zcHJl
YWRNZXRob2QoKSk7Ci0KLSAgICAvLyBBZGQgc3RvcHMKLSAgICBhZGRTdG9wcyhncmFkaWVudERh
dGEsIG1fYXR0cmlidXRlcy5zdG9wcygpKTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgJ
KHJldmlzaW9uIDc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VS
YWRpYWxHcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnRfaAotI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50X2gKLQotI2lmIEVO
QUJMRShTVkcpCi0jaW5jbHVkZSAiUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDsKLQotY2xhc3MgUmVuZGVyU1ZHUmVzb3Vy
Y2VSYWRpYWxHcmFkaWVudCA6IHB1YmxpYyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50IHsKLXB1
YmxpYzoKLSAgICBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50KFNWR1JhZGlhbEdyYWRp
ZW50RWxlbWVudCopOwotICAgIHZpcnR1YWwgflJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQoKTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0
dXJuICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50IjsgfQotCi0gICAgdmlydHVhbCBS
ZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNv
dXJjZVR5cGU7IH0KLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VU
eXBlOwotCi0gICAgdmlydHVhbCBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBjYWxj
dWxhdGVHcmFkaWVudFRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyB0cmFu
c2Zvcm0gPSBtX2F0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKTsgfQotICAgIHZpcnR1YWwg
dm9pZCBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKFNWR0dyYWRpZW50RWxlbWVudCopOwotICAg
IHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KEdyYWRpZW50RGF0YSosIFNWR0dyYWRpZW50RWxl
bWVudCopIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcyBt
X2F0dHJpYnV0ZXM7Ci19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAJKHJldmlzaW9u
IDc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5o
IgotCi0jaWYgUExBVEZPUk0oU0tJQSkKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgi
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZW5kZXJTVkdSZXNvdXJjZVR5cGUg
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpzX3Jlc291cmNlVHlwZSA9IFNvbGlkQ29sb3JS
ZXNvdXJjZVR5cGU7Ci0KLVJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6UmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yKCkKLXsKLX0KLQotUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjp+
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKCkKLXsKLX0KLQotYm9vbCBSZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3I6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRl
clN0eWxlKiBzdHlsZSwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQg
cmVzb3VyY2VNb2RlKQotewotICAgIC8vIFdlIGFyZSBOT1QgYWxsb3dlZCB0byBBU1NFUlQob2Jq
ZWN0KSBoZXJlLCB1bmxpa2UgYWxsIG90aGVyIHJlc291cmNlcy4KLSAgICAvLyBSZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IgaXMgdGhlIG9ubHkgcmVzb3VyY2Ugd2hpY2ggbWF5IGJlIHVzZWQg
ZnJvbSBIVE1MLCB3aGVuIHJlbmRlcmluZwotICAgIC8vIFNWRyBGb250cyBmb3IgYSBIVE1MIGRv
Y3VtZW50LiBUaGlzIHdpbGwgYmUgaW5kaWNhdGVkIGJ5IGEgbnVsbCBSZW5kZXJPYmplY3QgcG9p
bnRlci4KLSAgICBBU1NFUlQoY29udGV4dCk7Ci0gICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBB
cHBseVRvRGVmYXVsdE1vZGUpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxl
ID0gc3R5bGUgPyBzdHlsZS0+c3ZnU3R5bGUoKSA6IDA7Ci0gICAgQ29sb3JTcGFjZSBjb2xvclNw
YWNlID0gc3R5bGUgPyBzdHlsZS0+Y29sb3JTcGFjZSgpIDogQ29sb3JTcGFjZURldmljZVJHQjsK
LQotICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsKLSAgICAgICAgY29u
dGV4dC0+c2V0QWxwaGEoc3ZnU3R5bGUgPyBzdmdTdHlsZS0+ZmlsbE9wYWNpdHkoKSA6IDEuMGYp
OwotICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IobV9jb2xvciwgY29sb3JTcGFjZSk7Ci0g
ICAgICAgIGNvbnRleHQtPnNldEZpbGxSdWxlKHN2Z1N0eWxlID8gc3ZnU3R5bGUtPmZpbGxSdWxl
KCkgOiBSVUxFX05PTlpFUk8pOwotCi0gICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRv
VGV4dE1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoVGV4dE1v
ZGVGaWxsKTsKLSAgICB9IGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2Rl
KSB7Ci0gICAgICAgIGNvbnRleHQtPnNldEFscGhhKHN2Z1N0eWxlID8gc3ZnU3R5bGUtPnN0cm9r
ZU9wYWNpdHkoKSA6IDEuMGYpOwotICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihtX2Nv
bG9yLCBjb2xvclNwYWNlKTsKLQotICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICBTVkdS
ZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBv
YmplY3QpOwotCi0gICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpCi0g
ICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoVGV4dE1vZGVTdHJva2UpOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0
KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRo
KQotewotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFw
cGx5VG9EZWZhdWx0TW9kZSk7Ci0KLSAgICBpZiAocGF0aCAmJiAhKHJlc291cmNlTW9kZSAmIEFw
cGx5VG9UZXh0TW9kZSkpIHsKLSAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxs
TW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKLSAgICAgICAgZWxz
ZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCi0gICAgICAgICAgICBjb250
ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKLSAgICB9Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaAkocmV2
aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0g
Ki8KLQotI2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3JfaAotI2RlZmluZSBSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3JfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJD
b2xvci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yIDogcHVibGljIFJlbmRlclNWR1Jlc291cmNlIHsKLXB1YmxpYzoKLSAgICBSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IoKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IoKTsKLQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxDbGllbnRzRnJvbUNh
Y2hlKGJvb2wgPSB0cnVlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNh
Y2hlKFJlbmRlck9iamVjdCosIGJvb2wgPSB0cnVlKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBh
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0
KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RB
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBz
aG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBy
ZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9
Ci0KLSAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25z
dCB7IHJldHVybiBzX3Jlc291cmNlVHlwZTsgfQotICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJj
ZVR5cGUgc19yZXNvdXJjZVR5cGU7Ci0KLSAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9Ci0gICAgdm9pZCBzZXRDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
IHsgbV9jb2xvciA9IGNvbG9yOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ29sb3IgbV9jb2xvcjsKLX07
Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3Qu
Y3BwCShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM2MSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDkgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDcgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDkgR29vZ2xlLCBJbmMuCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNW
R1Jvb3QuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKLSNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZS5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJT
VkdMZW5ndGguaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0jaW5jbHVkZSAiU1ZH
UmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1N0
eWxlZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgotCi0jaWYgRU5BQkxF
KEZJTFRFUlMpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKLSNlbmRpZgot
Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclNW
R1Jvb3Q6OlJlbmRlclNWR1Jvb3QoU1ZHU3R5bGVkRWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRl
ckJveChub2RlKQotICAgICwgbV9pc0xheW91dFNpemVDaGFuZ2VkKGZhbHNlKQotICAgICwgbV9u
ZWVkc0JvdW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSh0cnVlKQotewotICAgIHNldFJlcGxhY2Vk
KHRydWUpOwotfQotCi1SZW5kZXJTVkdSb290Ojp+UmVuZGVyU1ZHUm9vdCgpCi17Ci19Ci0KLXZv
aWQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQotewotICAg
IEFTU0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7Ci0KLSAgICBpbnQgYm9yZGVy
QW5kUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpOwotICAgIGludCB3aWR0aCA9IGNv
bXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChmYWxzZSkgKyBib3JkZXJBbmRQYWRkaW5nOwotCi0g
ICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRo
KCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpCi0gICAgICAgIHdpZHRoID0gbWluKHdpZHRo
LCBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgKyAoc3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0g
Q09OVEVOVF9CT1ggPyBib3JkZXJBbmRQYWRkaW5nIDogMCkpOwotCi0gICAgaWYgKHN0eWxlKCkt
PndpZHRoKCkuaXNQZXJjZW50KCkgfHwgKHN0eWxlKCktPndpZHRoKCkuaXNBdXRvKCkgJiYgc3R5
bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpKSB7Ci0gICAgICAgIG1fbWluUHJlZmVycmVkTG9n
aWNhbFdpZHRoID0gMDsKLSAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSB3aWR0
aDsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21h
eFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHdpZHRoOwotCi0gICAgc2V0UHJlZmVycmVkTG9naWNh
bFdpZHRoc0RpcnR5KGZhbHNlKTsKLX0KLQotaW50IFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCkgY29uc3QKLXsKLSAgICBpbnQg
cmVwbGFjZWRXaWR0aCA9IFJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGlu
Y2x1ZGVNYXhXaWR0aCk7Ci0gICAgaWYgKCFzdHlsZSgpLT5sb2dpY2FsV2lkdGgoKS5pc1BlcmNl
bnQoKSkKLSAgICAgICAgcmV0dXJuIHJlcGxhY2VkV2lkdGg7Ci0KLSAgICAvLyBGSVhNRTogSW52
ZXN0aWdhdGUgaW4gc2l6ZSByb3VuZGluZyBpc3N1ZXMKLSAgICBTVkdTVkdFbGVtZW50KiBzdmcg
PSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4obm9kZSgpKTsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50Pihyb3VuZGYocmVwbGFjZWRXaWR0aCAqIHN2Zy0+Y3VycmVudFNjYWxlKCkpKTsK
LX0KLQotaW50IFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBj
b25zdAotewotICAgIGludCByZXBsYWNlZEhlaWdodCA9IFJlbmRlckJveDo6Y29tcHV0ZVJlcGxh
Y2VkTG9naWNhbEhlaWdodCgpOwotICAgIGlmICghc3R5bGUoKS0+bG9naWNhbEhlaWdodCgpLmlz
UGVyY2VudCgpKQotICAgICAgICByZXR1cm4gcmVwbGFjZWRIZWlnaHQ7Ci0KLSAgICAvLyBGSVhN
RTogSW52ZXN0aWdhdGUgaW4gc2l6ZSByb3VuZGluZyBpc3N1ZXMKLSAgICBTVkdTVkdFbGVtZW50
KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4obm9kZSgpKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocmVwbGFjZWRIZWlnaHQgKiBzdmctPmN1cnJlbnRTY2Fs
ZSgpKSk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUm9vdDo6bGF5b3V0KCkKLXsKLSAgICBBU1NFUlQo
bmVlZHNMYXlvdXQoKSk7Ci0KLSAgICAvLyBBcmJpdHJhcnkgYWZmaW5lIHRyYW5zZm9ybXMgYXJl
IGluY29tcGF0aWJsZSB3aXRoIExheW91dFN0YXRlLgotICAgIHZpZXcoKS0+ZGlzYWJsZUxheW91
dFN0YXRlKCk7Ci0KLSAgICBib29sIG5lZWRzTGF5b3V0ID0gc2VsZk5lZWRzTGF5b3V0KCk7Ci0g
ICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5n
TGF5b3V0KCkgJiYgbmVlZHNMYXlvdXQpOwotCi0gICAgSW50U2l6ZSBvbGRTaXplKHdpZHRoKCks
IGhlaWdodCgpKTsKLSAgICBjb21wdXRlTG9naWNhbFdpZHRoKCk7Ci0gICAgY29tcHV0ZUxvZ2lj
YWxIZWlnaHQoKTsKLSAgICBjYWxjVmlld3BvcnQoKTsKLQotICAgIFNWR1NWR0VsZW1lbnQqIHN2
ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2RlKCkpOwotICAgIG1faXNMYXlvdXRT
aXplQ2hhbmdlZCA9IHN2Zy0+aGFzUmVsYXRpdmVMZW5ndGhzKCkgJiYgb2xkU2l6ZSAhPSBzaXpl
KCk7Ci0KLSAgICBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbih0aGlzLCBuZWVkc0xh
eW91dCk7Ci0gICAgbV9pc0xheW91dFNpemVDaGFuZ2VkID0gZmFsc2U7Ci0KLSAgICAvLyBBdCB0
aGlzIHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBib3VuZHMs
Ci0gICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cgc28gcmVwYWludEFmdGVyTGF5b3V0KCkgdXNl
cyB0aGUgbmV3IGJvdW5kcy4KLSAgICBpZiAobV9uZWVkc0JvdW5kYXJpZXNPclRyYW5zZm9ybVVw
ZGF0ZSkgewotICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7Ci0gICAgICAgIG1fbmVl
ZHNCb3VuZGFyaWVzT3JUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXBh
aW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7Ci0KLSAgICB2aWV3KCktPmVuYWJsZUxheW91dFN0
YXRlKCk7Ci0gICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwotfQotCi1ib29sIFJlbmRlclNWR1Jv
b3Q6OnNlbGZXaWxsUGFpbnQoKQotewotI2lmIEVOQUJMRShGSUxURVJTKQotICAgIFNWR1Jlc291
cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJl
bmRlck9iamVjdCh0aGlzKTsKLSAgICByZXR1cm4gcmVzb3VyY2VzICYmIHJlc291cmNlcy0+Zmls
dGVyKCk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi12b2lkIFJlbmRl
clNWR1Jvb3Q6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBh
cmVudFkpCi17Ci0gICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaXNWaXNpYmxlID0gc3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IFZJU0lCTEU7Ci0gICAgSW50UG9pbnQgcGFyZW50T3JpZ2luSW5Db250YWluZXIo
cGFyZW50WCwgcGFyZW50WSk7Ci0gICAgSW50UG9pbnQgYm9yZGVyQm94T3JpZ2luSW5Db250YWlu
ZXIgPSBwYXJlbnRPcmlnaW5JbkNvbnRhaW5lciArIHBhcmVudE9yaWdpblRvQm9yZGVyQm94KCk7
Ci0KLSAgICBpZiAoaGFzQm94RGVjb3JhdGlvbnMoKSAmJiAocGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2VCbG9ja0JhY2tncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VD
aGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaXNWaXNpYmxlKQotICAgICAgICBwYWludEJveERlY29y
YXRpb25zKHBhaW50SW5mbywgYm9yZGVyQm94T3JpZ2luSW5Db250YWluZXIueCgpLCBib3JkZXJC
b3hPcmlnaW5JbkNvbnRhaW5lci55KCkpOwotCi0gICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBBbiBl
bXB0eSB2aWV3cG9ydCBkaXNhYmxlcyByZW5kZXJpbmcuICBGSVhNRTogU2hvdWxkIHdlIHN0aWxs
IHJlbmRlciBmaWx0ZXJzPwotICAgIGlmIChtX3ZpZXdwb3J0U2l6ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIERvbid0IHBhaW50IGlmIHdlIGRvbid0IGhhdmUga2lkcywg
ZXhjZXB0IGlmIHdlIGhhdmUgZmlsdGVycyB3ZSBzaG91bGQgcGFpbnQgdGhvc2UuCi0gICAgaWYg
KCFmaXJzdENoaWxkKCkgJiYgIXNlbGZXaWxsUGFpbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIFBhaW50SW5mbyBiZWNhdXNlIGFwcGx5VHJhbnNmb3Jt
IHdpbGwgbW9kaWZ5IHRoZSBkYW1hZ2UgcmVjdC4KLSAgICBQYWludEluZm8gY2hpbGRQYWludElu
Zm8ocGFpbnRJbmZvKTsKLSAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0KLSAg
ICAvLyBBcHBseSBpbml0aWFsIHZpZXdwb3J0IGNsaXAgLSBub3QgYWZmZWN0ZWQgYnkgb3ZlcmZs
b3cgaGFuZGxpbmcKLSAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5jbGlwKG92ZXJmbG93Q2xp
cFJlY3QoYm9yZGVyQm94T3JpZ2luSW5Db250YWluZXIueCgpLCBib3JkZXJCb3hPcmlnaW5JbkNv
bnRhaW5lci55KCkpKTsKLQotICAgIC8vIENvbnZlcnQgZnJvbSBjb250YWluZXIgb2Zmc2V0cyAo
aHRtbCByZW5kZXJlcnMpIHRvIGEgcmVsYXRpdmUgdHJhbnNmb3JtIChzdmcgcmVuZGVyZXJzKS4K
LSAgICAvLyBUcmFuc2Zvcm0gZnJvbSBvdXIgcGFpbnQgY29udGFpbmVyJ3MgY29vcmRpbmF0ZSBz
eXN0ZW0gdG8gb3VyIGxvY2FsIGNvb3Jkcy4KLSAgICBjaGlsZFBhaW50SW5mby5hcHBseVRyYW5z
Zm9ybShsb2NhbFRvUmVwYWludENvbnRhaW5lclRyYW5zZm9ybShwYXJlbnRPcmlnaW5JbkNvbnRh
aW5lcikpOwotCi0gICAgYm9vbCBjb250aW51ZVJlbmRlcmluZyA9IHRydWU7Ci0gICAgaWYgKGNo
aWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQotICAgICAgICBjb250
aW51ZVJlbmRlcmluZyA9IFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRl
bnQodGhpcywgY2hpbGRQYWludEluZm8pOwotCi0gICAgaWYgKGNvbnRpbnVlUmVuZGVyaW5nKQot
ICAgICAgICBSZW5kZXJCb3g6OnBhaW50KGNoaWxkUGFpbnRJbmZvLCAwLCAwKTsKLQotICAgIGlm
IChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKLSAgICAgICAg
U1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50
SW5mbywgcGFpbnRJbmZvLmNvbnRleHQpOwotCi0gICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+
cmVzdG9yZSgpOwotCi0gICAgaWYgKChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxp
bmUgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgJiYgc3R5bGUo
KS0+b3V0bGluZVdpZHRoKCkgJiYgaXNWaXNpYmxlKQotICAgICAgICBwYWludE91dGxpbmUocGFp
bnRJbmZvLmNvbnRleHQsIGJvcmRlckJveE9yaWdpbkluQ29udGFpbmVyLngoKSwgYm9yZGVyQm94
T3JpZ2luSW5Db250YWluZXIueSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyU1ZHUm9vdDo6ZGVzdHJveSgpCi17Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudERl
c3Ryb3llZCh0aGlzKTsKLSAgICBSZW5kZXJCb3g6OmRlc3Ryb3koKTsKLX0KLQotdm9pZCBSZW5k
ZXJTVkdSb290OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJl
bmRlclN0eWxlKiBuZXdTdHlsZSkKLXsKLSAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VM
YXlvdXQpCi0gICAgICAgIHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwotICAgIFJlbmRlckJv
eDo6c3R5bGVXaWxsQ2hhbmdlKGRpZmYsIG5ld1N0eWxlKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdS
b290OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKQotewotICAgIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xk
U3R5bGUpOwotICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nZWQodGhpcywg
ZGlmZiwgc3R5bGUoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlRnJvbUVsZW1l
bnQoKQotewotICAgIFJlbmRlckJveDo6dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICBTVkdSZXNv
dXJjZXNDYWNoZTo6Y2xpZW50VXBkYXRlZEZyb21FbGVtZW50KHRoaXMsIHN0eWxlKCkpOwotfQot
Ci12b2lkIFJlbmRlclNWR1Jvb3Q6OmNhbGNWaWV3cG9ydCgpCi17Ci0gICAgU1ZHU1ZHRWxlbWVu
dCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5vZGUoKSk7Ci0KLSAgICBpZiAo
IXN2Zy0+aGFzU2V0Q29udGFpbmVyU2l6ZSgpKSB7Ci0gICAgICAgIC8vIEluIHRoZSBub3JtYWwg
Y2FzZSBvZiA8c3ZnPiBiZWluZyBzdGFuZC1hbG9uZSBvciBpbiBhIENTU0JveE1vZGVsIG9iamVj
dCB3ZSB1c2UKLSAgICAgICAgLy8gUmVuZGVyQm94Ojp3aWR0aCgpL2hlaWdodCgpICh3aGljaCBw
dWxscyBkYXRhIGZyb20gUmVuZGVyU3R5bGUpCi0gICAgICAgIG1fdmlld3BvcnRTaXplID0gRmxv
YXRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIEluIHRoZSBTVkdJbWFnZSBjYXNlIGdyYWIgdGhlIFNWR0xlbmd0aCB2YWx1ZXMgb2ZmIG9m
IFNWR1NWR0VsZW1lbnQgYW5kIHVzZQotICAgIC8vIHRoZSBzcGVjaWFsIHJlbGF0aXZlV2lkdGhW
YWx1ZSBhY2Nlc3NvcnMgd2hpY2ggcmVzcGVjdCB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lclNpemUK
LSAgICAvLyBGSVhNRTogQ2hlY2sgaG93IFNWR0ltYWdlICsgem9vbWluZyBpcyBzdXBwb3NlZCB0
byBiZSBoYW5kbGVkPwotICAgIFNWR0xlbmd0aCB3aWR0aCA9IHN2Zy0+d2lkdGgoKTsKLSAgICBT
VkdMZW5ndGggaGVpZ2h0ID0gc3ZnLT5oZWlnaHQoKTsKLSAgICBtX3ZpZXdwb3J0U2l6ZSA9IEZs
b2F0U2l6ZSh3aWR0aC51bml0VHlwZSgpID09IExlbmd0aFR5cGVQZXJjZW50YWdlID8gc3ZnLT5y
ZWxhdGl2ZVdpZHRoVmFsdWUoKSA6IHdpZHRoLnZhbHVlKHN2ZyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVpZ2h0LnVuaXRUeXBlKCkgPT0gTGVuZ3RoVHlwZVBlcmNlbnRhZ2Ug
PyBzdmctPnJlbGF0aXZlSGVpZ2h0VmFsdWUoKSA6IGhlaWdodC52YWx1ZShzdmcpKTsKLX0KLQot
Ly8gUmVuZGVyQm94IG1ldGhvZHMgd2lsbCBleHBlY3QgY29vcmRpbmF0ZXMgdy9vIGFueSB0cmFu
c2Zvcm1zIGluIGNvb3JkaW5hdGVzCi0vLyByZWxhdGl2ZSB0byBvdXIgYm9yZGVyQm94IG9yaWdp
bi4gIFRoaXMgbWV0aG9kIGdpdmVzIHVzIGV4YWN0bHkgdGhhdC4KLUFmZmluZVRyYW5zZm9ybSBS
ZW5kZXJTVkdSb290Ojpsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICBJ
bnRTaXplIGJvcmRlckFuZFBhZGRpbmcgPSBib3JkZXJPcmlnaW5Ub0NvbnRlbnRCb3goKTsKLSAg
ICBTVkdTVkdFbGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4obm9kZSgp
KTsKLSAgICBmbG9hdCBzY2FsZSA9IHN2Zy0+Y3VycmVudFNjYWxlKCk7Ci0gICAgRmxvYXRQb2lu
dCB0cmFuc2xhdGUgPSBzdmctPmN1cnJlbnRUcmFuc2xhdGUoKTsKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gY3RtKHNjYWxlLCAwLCAwLCBzY2FsZSwgYm9yZGVyQW5kUGFkZGluZy53aWR0aCgpICsgdHJh
bnNsYXRlLngoKSwgYm9yZGVyQW5kUGFkZGluZy5oZWlnaHQoKSArIHRyYW5zbGF0ZS55KCkpOwot
ICAgIHJldHVybiBzdmctPnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGgoKSAvIHNjYWxlLCBo
ZWlnaHQoKSAvIHNjYWxlKSAqIGN0bTsKLX0KLQotSW50U2l6ZSBSZW5kZXJTVkdSb290OjpwYXJl
bnRPcmlnaW5Ub0JvcmRlckJveCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUoeCgpLCB5
KCkpOwotfQotCi1JbnRTaXplIFJlbmRlclNWR1Jvb3Q6OmJvcmRlck9yaWdpblRvQ29udGVudEJv
eCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUoYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xl
ZnQoKSwgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0g
UmVuZGVyU1ZHUm9vdDo6bG9jYWxUb1JlcGFpbnRDb250YWluZXJUcmFuc2Zvcm0oY29uc3QgSW50
UG9pbnQmIHBhcmVudE9yaWdpbkluQ29udGFpbmVyKSBjb25zdAotewotICAgIEFmZmluZVRyYW5z
Zm9ybSBwYXJlbnRUb0NvbnRhaW5lcihsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkpOwotICAgIHJl
dHVybiBwYXJlbnRUb0NvbnRhaW5lci50cmFuc2xhdGVSaWdodChwYXJlbnRPcmlnaW5JbkNvbnRh
aW5lci54KCksIHBhcmVudE9yaWdpbkluQ29udGFpbmVyLnkoKSk7Ci19Ci0KLWNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgUmVuZGVyU1ZHUm9vdDo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0
Ci17Ci0gICAgSW50U2l6ZSBwYXJlbnRUb0JvcmRlckJveE9mZnNldCA9IHBhcmVudE9yaWdpblRv
Qm9yZGVyQm94KCk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gYm9yZGVyQm94T3JpZ2luVG9QYXJl
bnRPcmlnaW4obG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpKTsKLSAgICBib3JkZXJCb3hPcmln
aW5Ub1BhcmVudE9yaWdpbi50cmFuc2xhdGVSaWdodChwYXJlbnRUb0JvcmRlckJveE9mZnNldC53
aWR0aCgpLCBwYXJlbnRUb0JvcmRlckJveE9mZnNldC5oZWlnaHQoKSk7Ci0KLSAgICBtX2xvY2Fs
VG9QYXJlbnRUcmFuc2Zvcm0gPSBib3JkZXJCb3hPcmlnaW5Ub1BhcmVudE9yaWdpbjsKLSAgICBy
ZXR1cm4gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOwotfQotCi1JbnRSZWN0IFJlbmRlclNWR1Jv
b3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyKQotewotICAgIHJldHVybiBTVkdSZW5kZXJTdXBwb3J0OjpjbGlwcGVk
T3ZlcmZsb3dSZWN0Rm9yUmVwYWludCh0aGlzLCByZXBhaW50Q29udGFpbmVyKTsKLX0KLQotdm9p
ZCBSZW5kZXJTVkdSb290Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKQot
ewotICAgIC8vIEFwcGx5IG91ciBsb2NhbCB0cmFuc2Zvcm1zIChleGNlcHQgZm9yIHgveSB0cmFu
c2xhdGlvbiksIHRoZW4gb3VyIHNoYWRvdywgCi0gICAgLy8gYW5kIHRoZW4gY2FsbCBSZW5kZXJC
b3gncyBtZXRob2QgdG8gaGFuZGxlIGFsbCB0aGUgbm9ybWFsIENTUyBCb3ggbW9kZWwgYml0cwot
ICAgIHJlcGFpbnRSZWN0ID0gbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpLm1hcFJlY3QocmVw
YWludFJlY3QpOwotCi0gICAgLy8gQXBwbHkgaW5pdGlhbCB2aWV3cG9ydCBjbGlwIC0gbm90IGFm
ZmVjdGVkIGJ5IG92ZXJmbG93IHNldHRpbmdzICAgIAotICAgIHJlcGFpbnRSZWN0LmludGVyc2Vj
dChlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fdmlld3BvcnRTaXpl
KSkpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3Zn
U3R5bGUoKTsKLSAgICBpZiAoY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gc3ZnU3R5bGUtPnNo
YWRvdygpKQotICAgICAgICBzaGFkb3ctPmFkanVzdFJlY3RGb3JTaGFkb3cocmVwYWludFJlY3Qp
OwotCi0gICAgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5l
ciwgcmVwYWludFJlY3QsIGZpeGVkKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSb290OjptYXBMb2Nh
bFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29s
IGZpeGVkICwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3Rh
dGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFmaXhlZCk7IC8vIFdlIHNob3VsZCBoYXZlIG5vIGZp
eGVkIGNvbnRlbnQgaW4gdGhlIFNWRyByZW5kZXJpbmcgdHJlZS4KLSAgICBBU1NFUlQodXNlVHJh
bnNmb3Jtcyk7IC8vIG1hcHBpbmcgYSBwb2ludCB0aHJvdWdoIFNWRyB3L28gcmVzcGVjdGluZyB0
cmFzbmZvcm1zIGlzIHVzZWxlc3MuCi0KLSAgICAvLyBUcmFuc2Zvcm0gdG8gb3VyIGJvcmRlciBi
b3ggYW5kIGxldCBSZW5kZXJCb3ggdHJhbnNmb3JtIHRoZSByZXN0IG9mIHRoZSB3YXkuCi0gICAg
dHJhbnNmb3JtU3RhdGUuYXBwbHlUcmFuc2Zvcm0obG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgp
KTsKLSAgICBSZW5kZXJCb3g6Om1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwg
Zml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsKLX0KLQotdm9pZCBSZW5kZXJT
VkdSb290Ojp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCkKLXsKLSAgICBtX29iamVjdEJvdW5kaW5n
Qm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgp
OwotICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0KLSAgICBTVkdSZW5k
ZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyh0aGlzLCBtX29iamVjdEJv
dW5kaW5nQm94LCBtX3N0cm9rZUJvdW5kaW5nQm94LCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7Ci0g
ICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRo
aXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKLSAgICBtX3JlcGFpbnRCb3VuZGluZ0JveC5pbmZs
YXRlKGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpKTsKLX0KLQotYm9vbCBSZW5kZXJTVkdSb290Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBo
aXRUZXN0QWN0aW9uKQotewotICAgIEludFBvaW50IHBvaW50SW5Db250YWluZXIoX3gsIF95KTsK
LSAgICBJbnRTaXplIGNvbnRhaW5lclRvUGFyZW50T2Zmc2V0KF90eCwgX3R5KTsKLQotICAgIElu
dFBvaW50IHBvaW50SW5QYXJlbnQgPSBwb2ludEluQ29udGFpbmVyIC0gY29udGFpbmVyVG9QYXJl
bnRPZmZzZXQ7Ci0gICAgSW50UG9pbnQgcG9pbnRJbkJvcmRlckJveCA9IHBvaW50SW5QYXJlbnQg
LSBwYXJlbnRPcmlnaW5Ub0JvcmRlckJveCgpOwotCi0gICAgLy8gTm90ZTogRm9yIG5vdywgd2Un
cmUgaWdub3JpbmcgaGl0cyB0byBib3JkZXIgYW5kIHBhZGRpbmcgZm9yIDxzdmc+Ci0gICAgSW50
UG9pbnQgcG9pbnRJbkNvbnRlbnRCb3ggPSBwb2ludEluQm9yZGVyQm94IC0gYm9yZGVyT3JpZ2lu
VG9Db250ZW50Qm94KCk7Ci0gICAgaWYgKCFjb250ZW50Qm94UmVjdCgpLmNvbnRhaW5zKHBvaW50
SW5Db250ZW50Qm94KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSW50UG9pbnQgbG9j
YWxQb2ludCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQocG9p
bnRJblBhcmVudCk7Ci0KLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlm
IChjaGlsZC0+bm9kZUF0RmxvYXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2FsUG9pbnQsIGhp
dFRlc3RBY3Rpb24pKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQ1NTL0hUTUwgYXNzdW1lcyB0
aGUgbG9jYWwgcG9pbnQgaXMgcmVsYXRpdmUgdG8gdGhlIGJvcmRlciBib3gsIHJpZ2h0PwotICAg
ICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Cb3JkZXJCb3gpOwot
ICAgICAgICAgICAgLy8gRklYTUU6IG5vZGVBdEZsb2F0UG9pbnQoKSBkb2Vzbid0IGhhbmRsZSBy
ZWN0LWJhc2VkIGhpdCB0ZXN0cyB5ZXQuCi0gICAgICAgICAgICByZXN1bHQuYWRkTm9kZVRvUmVj
dEJhc2VkVGVzdFJlc3VsdChjaGlsZC0+bm9kZSgpLCBfeCwgX3kpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBkaWRuJ3QgZWFybHkg
ZXhpdCBhYm92ZSwgd2UndmUganVzdCBoaXQgdGhlIGNvbnRhaW5lciA8c3ZnPiBlbGVtZW50LiBV
bmxpa2UgU1ZHIDEuMSwgMm5kIEVkaXRpb24gYWxsb3dzIGNvbnRhaW5lciBlbGVtZW50cyB0byBi
ZSBoaXQuCi0gICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCkg
ewotICAgICAgICAvLyBPbmx5IHJldHVybiB0cnVlIGhlcmUsIGlmIHRoZSBsYXN0IGhpdCB0ZXN0
aW5nIHBoYXNlICdCbG9ja0JhY2tncm91bmQnIGlzIGV4ZWN1dGVkLiBJZiB3ZSdkIHJldHVybiB0
cnVlIGluIHRoZSAnRm9yZWdyb3VuZCcgcGhhc2UsCi0gICAgICAgIC8vIGhpdCB0ZXN0aW5nIHdv
dWxkIHN0b3AgaW1tZWRpYXRlbHkuIEZvciBTVkcgb25seSB0cmVlcyB0aGlzIGRvZXNuJ3QgbWF0
dGVyLiBUaG91Z2ggd2hlbiB3ZSBoYXZlIGEgPGZvcmVpZ25PYmplY3Q+IHN1YnRyZWUgd2UgbmVl
ZAotICAgICAgICAvLyB0byBiZSBhYmxlIHRvIGRldGVjdCBoaXRzIG9uIHRoZSBiYWNrZ3JvdW5k
IG9mIGEgPGRpdj4gZWxlbWVudC4gSWYgd2UnZCByZXR1cm4gdHJ1ZSBoZXJlIGluIHRoZSAnRm9y
ZWdyb3VuZCcgcGhhc2UsIHdlIGFyZSBub3QgYWJsZSAKLSAgICAgICAgLy8gdG8gZGV0ZWN0IHRo
ZXNlIGhpdHMgYW55bW9yZS4KLSAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJv
dW5kZWRJbnRQb2ludChsb2NhbFBvaW50KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmgJKHJldmlzaW9uIDc1MjcyKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMCArMCww
IEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUs
IDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAgIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIFJlbmRlclNWR1Jvb3Rf
aAotI2RlZmluZSBSZW5kZXJTVkdSb290X2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAi
UmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVy
U3VwcG9ydC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNWR1N0eWxlZEVsZW1l
bnQ7Ci1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci0KLWNsYXNzIFJlbmRlclNWR1Jvb3QgOiBwdWJs
aWMgUmVuZGVyQm94IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBSZW5kZXJTVkdSb290KFNWR1N0
eWxlZEVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSb290KCk7Ci0KLSAgICBjb25z
dCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gJm1fY2hp
bGRyZW47IH0KLSAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1cm4g
Jm1fY2hpbGRyZW47IH0KLQotICAgIGJvb2wgaXNMYXlvdXRTaXplQ2hhbmdlZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNMYXlvdXRTaXplQ2hhbmdlZDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNCb3VuZGFyaWVzT3JUcmFuc2Zvcm1VcGRhdGUg
PSB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgeyBt
X25lZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQotCi1wcml2YXRlOgot
ICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSB7IHJl
dHVybiBjaGlsZHJlbigpOyB9Ci0gICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExp
c3QqIHZpcnR1YWxDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KLQotICAg
IHZpcnR1YWwgYm9vbCBpc1NWR1Jvb3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1Jv
b3QiOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMo
KTsKLSAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNs
dWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFj
ZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAg
IHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkp
OwotCi0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVX
aWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVu
dCgpOwotCi0gICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRU
cmFuc2Zvcm0oKSBjb25zdDsKLQotICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKLSAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBj
b25zdDsKLQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Qg
eyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0
cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQot
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29u
c3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwg
aW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKLQotICAgIHZpcnR1YWwgSW50
UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lcik7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWlu
dChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWlu
dFJlY3QsIGJvb2wgZml4ZWQpOwotCi0gICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWlu
ZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNm
b3JtcywgYm9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKLQotICAgIHZvaWQgY2Fs
Y1ZpZXdwb3J0KCk7Ci0KLSAgICBib29sIHNlbGZXaWxsUGFpbnQoKTsKLSAgICB2b2lkIHVwZGF0
ZUNhY2hlZEJvdW5kYXJpZXMoKTsKLQotICAgIEludFNpemUgcGFyZW50T3JpZ2luVG9Cb3JkZXJC
b3goKSBjb25zdDsKLSAgICBJbnRTaXplIGJvcmRlck9yaWdpblRvQ29udGVudEJveCgpIGNvbnN0
OwotICAgIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRvUmVwYWludENvbnRhaW5lclRyYW5zZm9ybShj
b25zdCBJbnRQb2ludCYgcGFyZW50T3JpZ2luSW5Db250YWluZXIpIGNvbnN0OwotICAgIEFmZmlu
ZVRyYW5zZm9ybSBsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkgY29uc3Q7Ci0KLSAgICBSZW5k
ZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKLSAgICBGbG9hdFNpemUgbV92aWV3cG9ydFNp
emU7Ci0gICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1f
c3Ryb2tlQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94Owot
ICAgIG11dGFibGUgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKLSAg
ICBib29sIG1faXNMYXlvdXRTaXplQ2hhbmdlZCA6IDE7Ci0gICAgYm9vbCBtX25lZWRzQm91bmRh
cmllc09yVHJhbnNmb3JtVXBkYXRlIDogMTsKLX07Ci0KLWlubGluZSBSZW5kZXJTVkdSb290KiB0
b1JlbmRlclNWR1Jvb3QoUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17IAotICAgIEFTU0VSVCghb2Jq
ZWN0IHx8IG9iamVjdC0+aXNTVkdSb290KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJTVkdSb290Kj4ob2JqZWN0KTsKLX0KLQotaW5saW5lIGNvbnN0IFJlbmRlclNWR1Jvb3QqIHRv
UmVuZGVyU1ZHUm9vdChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsgCi0gICAgQVNTRVJU
KCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1Jvb3QoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IFJlbmRlclNWR1Jvb3QqPihvYmplY3QpOwotfQotCi0vLyBUaGlzIHdpbGwgY2F0Y2gg
YW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCi12b2lkIHRvUmVuZGVyU1ZHUm9vdChj
b25zdCBSZW5kZXJTVkdSb290Kik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShTVkcpCi0jZW5kaWYgLy8gUmVuZGVyU1ZHUm9vdF9oCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIu
Y3BwCShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1NoYWRv
d1RyZWVSb290Q29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDggKzAsMCBAQAot
LyoKLSAgICBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
U1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgiCi0KLSNp
bmNsdWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgi
Ci0jaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJl
bmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyOjpSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENv
bnRhaW5lcihTVkdVc2VFbGVtZW50KiBub2RlKQotICAgIDogUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lcihub2RlKQotICAgICwgbV9yZWNyZWF0ZVRyZWUoZmFsc2UpCi17Ci19Ci0KLVJl
bmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyOjp+UmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RD
b250YWluZXIoKQotewotICAgIGlmIChtX3NoYWRvd1Jvb3QgJiYgbV9zaGFkb3dSb290LT5hdHRh
Y2hlZCgpKSB7Ci0gICAgICAgIG1fc2hhZG93Um9vdC0+ZGV0YWNoKCk7Ci0gICAgICAgIG1fc2hh
ZG93Um9vdC0+Y2xlYXJTaGFkb3dIb3N0KCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlclNWR1No
YWRvd1RyZWVSb290Q29udGFpbmVyOjp1cGRhdGVTdHlsZShOb2RlOjpTdHlsZUNoYW5nZSBjaGFu
Z2UpCi17Ci0gICAgaWYgKG1fc2hhZG93Um9vdCAmJiBtX3NoYWRvd1Jvb3QtPmF0dGFjaGVkKCkp
Ci0gICAgICAgIG1fc2hhZG93Um9vdC0+cmVjYWxjU3R5bGUoY2hhbmdlKTsKLX0KLQotdm9pZCBS
ZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQotewot
ICAgIGJvb2wgaGFkRXhpc3RpbmdUcmVlID0gbV9zaGFkb3dSb290OwotCi0gICAgU1ZHVXNlRWxl
bWVudCogdXNlRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1VzZUVsZW1lbnQqPihub2RlKCkpOwot
ICAgIGlmICghbV9zaGFkb3dSb290KSB7Ci0gICAgICAgIEFTU0VSVCghbV9yZWNyZWF0ZVRyZWUp
OwotICAgICAgICBtX3NoYWRvd1Jvb3QgPSBTVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQ6OmNyZWF0
ZShkb2N1bWVudCgpLCB1c2VFbGVtZW50KTsKLSAgICAgICAgdXNlRWxlbWVudC0+YnVpbGRQZW5k
aW5nUmVzb3VyY2UoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9zaGFkb3dSb290LT5zaGFkb3dQ
YXJlbnROb2RlKCkgPT0gdXNlRWxlbWVudCk7Ci0KLSAgICBib29sIHNob3VsZFJlY3JlYXRlVHJl
ZSA9IG1fcmVjcmVhdGVUcmVlOwotICAgIGlmIChtX3JlY3JlYXRlVHJlZSkgewotICAgICAgICBB
U1NFUlQoaGFkRXhpc3RpbmdUcmVlKTsKLQotICAgICAgICBpZiAobV9zaGFkb3dSb290LT5hdHRh
Y2hlZCgpKQotICAgICAgICAgICAgbV9zaGFkb3dSb290LT5kZXRhY2goKTsKLQotICAgICAgICBt
X3NoYWRvd1Jvb3QtPnJlbW92ZUFsbENoaWxkcmVuKCk7Ci0gICAgICAgIG1fcmVjcmVhdGVUcmVl
ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gT25seSByZWJ1aWxkIHRoZSBzaGFkb3cgdHJlZSwg
aWYgd2UgYSkgbmV2ZXIgaGFkIGEgdHJlZSBvciBiKSB3ZSB3ZXJlIHNwZWNpZmljYWxseSBhc2tl
ZCB0byBkbyBzbwotICAgIC8vIElmIHRoZSB1c2UgZWxlbWVudCBpcyBhIHBlbmRpbmcgcmVzb3Vy
Y2UsIGFuZCBhKSBvciBiKSBpcyB0cnVlLCBkbyBub3RoaW5nLCBhbmQgd2FpdCBmb3IgdGhlIHVz
ZQotICAgIC8vIGVsZW1lbnQgdG8gYmUgYXNrZWQgdG8gYnVpbGRQZW5kaW5nUmVzb3VyY2UoKSwg
dGhpcyB3aWxsIGNhbGwgdXMgYWdhaW4sIHdpdGggbV9yZWNyZWF0ZVRydWU9dHJ1ZS4KLSAgICBp
ZiAoKHNob3VsZFJlY3JlYXRlVHJlZSB8fCAhaGFkRXhpc3RpbmdUcmVlKSAmJiAhdXNlRWxlbWVu
dC0+aXNQZW5kaW5nUmVzb3VyY2UoKSkgewotICAgICAgICB1c2VFbGVtZW50LT5idWlsZFNoYWRv
d0FuZEluc3RhbmNlVHJlZShtX3NoYWRvd1Jvb3QuZ2V0KCkpOwotCi0gICAgICAgIC8vIEF0dGFj
aCBzaGFkb3cgcm9vdCBlbGVtZW50Ci0gICAgICAgIG1fc2hhZG93Um9vdC0+YXR0YWNoRWxlbWVu
dChzdHlsZSgpLCByZW5kZXJBcmVuYSgpKTsKLQotICAgICAgICAvLyBBdHRhY2ggc3VidHJlZSwg
YXMgaWYgaXQgd2FzIGEgcmVndWxhciBub24tc2hhZG93IHRyZWUKLSAgICAgICAgZm9yIChOb2Rl
KiBjaGlsZCA9IG1fc2hhZG93Um9vdC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIGNoaWxkLT5hdHRhY2goKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoIW1fcmVjcmVhdGVUcmVlKTsKLSAgICBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxl
Q29udGFpbmVyOjp1cGRhdGVGcm9tRWxlbWVudCgpOwotfQotCi12b2lkIFJlbmRlclNWR1NoYWRv
d1RyZWVSb290Q29udGFpbmVyOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIFJlbmRlclNWR1RyYW5zZm9ybWFi
bGVDb250YWluZXI6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLQotICAgIGlmIChS
ZW5kZXJPYmplY3QqIHNoYWRvd1Jvb3RSZW5kZXJlciA9IG1fc2hhZG93Um9vdCA/IG1fc2hhZG93
Um9vdC0+cmVuZGVyZXIoKSA6IDApCi0gICAgICAgIHNoYWRvd1Jvb3RSZW5kZXJlci0+c2V0U3R5
bGUoc3R5bGUoKSk7Ci19Ci0KLU5vZGUqIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVy
Ojpyb290RWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2hhZG93Um9vdC5nZXQoKTsK
LX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1NoYWRv
d1RyZWVSb290Q29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaAkocmV2aXNpb24gNzUyNzIpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBS
ZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcl9oCi0jZGVmaW5lIFJlbmRlclNWR1NoYWRv
d1RyZWVSb290Q29udGFpbmVyX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVy
U1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAg
Ci1jbGFzcyBTVkdVc2VFbGVtZW50OwotY2xhc3MgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50Owot
Ci1jbGFzcyBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJT
VkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lcihTVkdVc2VFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZH
U2hhZG93VHJlZVJvb3RDb250YWluZXIoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1NWR1NoYWRv
d1RyZWVSb290Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCBt
YXJrU2hhZG93VHJlZUZvclJlY3JlYXRpb24oKSB7IG1fcmVjcmVhdGVUcmVlID0gdHJ1ZTsgfQot
ICAgIHZvaWQgdXBkYXRlU3R5bGUoTm9kZTo6U3R5bGVDaGFuZ2UpOwotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotCi0gICAgTm9kZSogcm9vdEVsZW1lbnQoKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotCi0gICAgYm9vbCBtX3JlY3JlYXRl
VHJlZTsKLSAgICBSZWZQdHI8U1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50PiBtX3NoYWRvd1Jvb3Q7
Ci19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAkocmV2aXNpb24gNzUy
NzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAg
ICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
LSAgICAgICAgICAgICAgICAgIDIwMDkgR29vZ2xlLCBJbmMuCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5oIgotCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJTVkdTaGFk
b3dUcmVlRWxlbWVudHMuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1SZW5kZXJTVkdUcmFuc2Zvcm1hYmxl
Q29udGFpbmVyOjpSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyKFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50KiBub2RlKQotICAgIDogUmVuZGVyU1ZHQ29udGFpbmVyKG5vZGUpCi0g
ICAgLCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlKHRydWUpCi17Ci19Ci0KLWJvb2wgUmVuZGVyU1ZH
VHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6Y2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKQotewotICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOwotCi0gICAgYm9vbCBuZWVkc1Vw
ZGF0ZSA9IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGU7Ci0gICAgaWYgKG5lZWRzVXBkYXRlKSB7Ci0g
ICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSBlbGVtZW50LT5hbmltYXRlZExvY2FsVHJhbnNmb3Jt
KCk7Ci0gICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoIWVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmdUYWcpIHx8ICFzdGF0aWNfY2Fz
dDxTVkdHRWxlbWVudCo+KGVsZW1lbnQpLT5pc1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50KCkp
Ci0gICAgICAgIHJldHVybiBuZWVkc1VwZGF0ZTsKLQotICAgIEZsb2F0U2l6ZSB0cmFuc2xhdGlv
biA9IHN0YXRpY19jYXN0PFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCkt
PmNvbnRhaW5lclRyYW5zbGF0aW9uKCk7Ci0gICAgaWYgKHRyYW5zbGF0aW9uLndpZHRoKCkgPT0g
MCAmJiB0cmFuc2xhdGlvbi5oZWlnaHQoKSA9PSAwKQotICAgICAgICByZXR1cm4gbmVlZHNVcGRh
dGU7Ci0KLSAgICAvLyBGSVhNRTogQ291bGQgb3B0aW1pemUgdGhpcyBjYXNlIGZvciB1c2UgdG8g
YXZvaWQgcmVmZXRjaGluZyB0aGUgYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGhlcmUsIGlmIG9u
bHkgdGhlIGNvbnRhaW5lclRyYW5zbGF0aW9uKCkgY2hhbmdlZC4KLSAgICBpZiAoIW5lZWRzVXBk
YXRlKQotICAgICAgICBtX2xvY2FsVHJhbnNmb3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRy
YW5zZm9ybSgpOwotCi0gICAgbV9sb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUodHJhbnNsYXRpb24u
d2lkdGgoKSwgdHJhbnNsYXRpb24uaGVpZ2h0KCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi19
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaAkocmV2aXNpb24gNzUyNzIpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDcg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDkgR29v
Z2xlLCBJbmMuCi0gICAgICAKLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFp
bmVyX2gKLSNkZWZpbmUgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcl9oCi0KLSNpZiBF
TkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0gICAgCi0gICAgY2xhc3MgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7
Ci0gICAgY2xhc3MgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lciA6IHB1YmxpYyBSZW5k
ZXJTVkdDb250YWluZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgUmVuZGVyU1ZH
VHJhbnNmb3JtYWJsZUNvbnRhaW5lcihTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOwot
Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQotICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRh
dGUgPSB0cnVlOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3Vs
YXRlTG9jYWxUcmFuc2Zvcm0oKTsKLSAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9j
YWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0KLSAgICAg
ICAgYm9vbCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKLSAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIG1fbG9jYWxUcmFuc2Zvcm07Ci0gICAgfTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcp
Ci0jZW5kaWYgLy8gUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcl9oCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCShyZXZp
c2lvbiA3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFp
bmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5NCArMCwwIEBACi0vKgotICAgIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDkgR29vZ2xlLCBJbmMuCi0gICAgQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAg
YWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1
ZGUgIlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
LSNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKFNWR1N0
eWxlZEVsZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5kZXJTVkdDb250YWluZXIobm9kZSkKLXsKLX0K
LQotdm9pZCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6YXBwbHlWaWV3cG9ydENsaXAoUGFp
bnRJbmZvJiBwYWludEluZm8pCi17Ci0gICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZs
b3dIaWRkZW4odGhpcykpCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKG1fdmlld3Bv
cnQpOwotfQotCi12b2lkIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpjYWxjVmlld3BvcnQo
KQotewotICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+
KG5vZGUoKSk7Ci0gICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcp
KSB7Ci0gICAgICAgICBTVkdTVkdFbGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVt
ZW50Kj4oZWxlbWVudCk7Ci0KLSAgICAgICAgIEZsb2F0UmVjdCBvbGRWaWV3cG9ydCA9IG1fdmll
d3BvcnQ7Ci0gICAgICAgICBtX3ZpZXdwb3J0ID0gRmxvYXRSZWN0KHN2Zy0+eCgpLnZhbHVlKHN2
ZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBzdmctPnkoKS52YWx1ZShzdmcp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgc3ZnLT53aWR0aCgpLnZhbHVlKHN2
ZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBzdmctPmhlaWdodCgpLnZhbHVl
KHN2ZykpOwotCi0gICAgICAgIGlmIChvbGRWaWV3cG9ydCAhPSBtX3ZpZXdwb3J0KQotICAgICAg
ICAgICAgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7Ci0gICAgfQotfQotCi1BZmZpbmVUcmFu
c2Zvcm0gUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OnZpZXdwb3J0VHJhbnNmb3JtKCkgY29u
c3QKLXsKLSAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpKSB7Ci0g
ICAgICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihu
b2RlKCkpOwotICAgICAgICByZXR1cm4gc3ZnLT52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKG1fdmll
d3BvcnQud2lkdGgoKSwgbV92aWV3cG9ydC5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgpOwotfQotCi1jb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlbmRlclNW
R1ZpZXdwb3J0Q29udGFpbmVyOjpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QKLXsKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gdmlld3BvcnRUcmFuc2xhdGlvbih2aWV3cG9ydFRyYW5zZm9ybSgp
KTsKLSAgICBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0gPSB2aWV3cG9ydFRyYW5zbGF0aW9uLnRy
YW5zbGF0ZVJpZ2h0KG1fdmlld3BvcnQueCgpLCBtX3ZpZXdwb3J0LnkoKSk7Ci0gICAgcmV0dXJu
IG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKLSAgICAvLyBJZiB0aGlzIGNsYXNzIHdlcmUgZXZl
ciBnaXZlbiBhIGxvY2FsVHJhbnNmb3JtKCksIHRoZW4gdGhlIGFib3ZlIHdvdWxkIHJlYWQ6Ci0g
ICAgLy8gcmV0dXJuIHZpZXdwb3J0VHJhbnNmb3JtKCkgKiBsb2NhbFRyYW5zZm9ybSgpICogdmll
d3BvcnRUcmFuc2xhdGlvbjsKLX0KLQotYm9vbCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6
cG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xpcChjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50
KQotewotICAgIC8vIFJlc3BlY3QgdGhlIHZpZXdwb3J0IGNsaXAgKHdoaWNoIGlzIGluIHBhcmVu
dCBjb29yZHMpCi0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojppc092ZXJmbG93SGlkZGVuKHRo
aXMpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gbV92aWV3cG9ydC5j
b250YWlucyhwb2ludEluUGFyZW50KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIu
aAkocmV2aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9y
dENvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNyBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwOSBHb29nbGUsIEluYy4KLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lm
bmRlZiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcl9oCi0jZGVmaW5lIFJlbmRlclNWR1ZpZXdw
b3J0Q29udGFpbmVyX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHQ29u
dGFpbmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gVGhpcyBpcyB1c2VkIGZvciBu
b24tcm9vdCA8c3ZnPiBlbGVtZW50cyBhbmQgPG1hcmtlcj4gZWxlbWVudHMsIG5laXRoZXIgb2Yg
d2hpY2ggYXJlIFNWR1RyYW5zZm9ybWFibGUKLS8vIHRodXMgd2UgaW5oZXJpdCBmcm9tIFJlbmRl
clNWR0NvbnRhaW5lciBpbnN0ZWFkIG9mIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIK
LWNsYXNzIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyIDogcHVibGljIFJlbmRlclNWR0NvbnRh
aW5lciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIo
U1ZHU3R5bGVkRWxlbWVudCopOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBpc1NWR0Nv
bnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTVkdW
aWV3cG9ydENvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHVmlld3BvcnRD
b250YWluZXIiOyB9Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdmlld3BvcnRUcmFuc2Zvcm0oKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGNhbGNWaWV3cG9ydCgpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGFwcGx5Vmlld3BvcnRDbGlwKFBhaW50SW5mbyYpOwotICAgIHZpcnR1
YWwgYm9vbCBwb2ludElzSW5zaWRlVmlld3BvcnRDbGlwKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
SW5QYXJlbnQpOwotCi0gICAgRmxvYXRSZWN0IG1fdmlld3BvcnQ7Ci0gICAgbXV0YWJsZSBBZmZp
bmVUcmFuc2Zvcm0gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOwotfTsKLSAgCi1pbmxpbmUgUmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXIqIHRvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIoUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgIXN0cmNtcChvYmpl
Y3QtPnJlbmRlck5hbWUoKSwgIlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyIikpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcio+KG9iamVjdCk7Ci19
Ci0KLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4K
LXZvaWQgdG9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcihjb25zdCBSZW5kZXJTVkdWaWV3cG9y
dENvbnRhaW5lciopOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoU1ZHKQotI2VuZGlmIC8vIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyX2gKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCShyZXZpc2lvbiA3NTI3MikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDEyOCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9v
bHMuaCIKLQotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRh
aW5lci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgQWZmaW5lVHJhbnNmb3JtJiBjdXJyZW50Q29udGVudFRyYW5zZm9ybWF0aW9u
KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEFmZmluZVRyYW5zZm9ybSwgc19jdXJyZW50
Q29udGVudFRyYW5zZm9ybWF0aW9uLCAoKSk7Ci0gICAgcmV0dXJuIHNfY3VycmVudENvbnRlbnRU
cmFuc2Zvcm1hdGlvbjsKLX0KLQotdm9pZCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVU
cmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbShjb25zdCBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtKQotewot
ICAgIGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCA9IHJlbmRlcmVyOwotICAgIEFTU0VSVChj
dXJyZW50KTsKLQotICAgIGFic29sdXRlVHJhbnNmb3JtID0gY3VycmVudENvbnRlbnRUcmFuc2Zv
cm1hdGlvbigpOwotICAgIHdoaWxlIChjdXJyZW50KSB7Ci0gICAgICAgIGFic29sdXRlVHJhbnNm
b3JtLm11bHRpcGx5KGN1cnJlbnQtPmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSk7Ci0gICAgICAg
IGlmIChjdXJyZW50LT5pc1NWR1Jvb3QoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
dXJyZW50ID0gY3VycmVudC0+cGFyZW50KCk7Ci0gICAgfQotfQotCi1ib29sIFNWR0ltYWdlQnVm
ZmVyVG9vbHM6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJn
ZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0
cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi17Ci0g
ICAgSW50U2l6ZSBpbWFnZVNpemUocm91bmRlZEltYWdlQnVmZmVyU2l6ZShjbGFtcGVkQWJzb2x1
dGVUYXJnZXRSZWN0LnNpemUoKSkpOwotICAgIEludFNpemUgdW5jbGFtcGVkSW1hZ2VTaXplKFNW
R0ltYWdlQnVmZmVyVG9vbHM6OnJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoYWJzb2x1dGVUYXJnZXRS
ZWN0LnNpemUoKSkpOwotCi0gICAgLy8gRG9uJ3QgY3JlYXRlIGVtcHR5IEltYWdlQnVmZmVycy4K
LSAgICBpZiAoaW1hZ2VTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VT
aXplLCBjb2xvclNwYWNlKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGltYWdlQ29udGV4dCA9IGltYWdlLT5jb250ZXh0KCk7
Ci0gICAgQVNTRVJUKGltYWdlQ29udGV4dCk7Ci0KLSAgICAvLyBDb21wZW5zYXRlIHJvdW5kaW5n
IGVmZmVjdHMsIGFzIHRoZSBhYnNvbHV0ZSB0YXJnZXQgcmVjdCBpcyB1c2luZyBmbG9hdGluZy1w
b2ludCBudW1iZXJzIGFuZCB0aGUgaW1hZ2UgYnVmZmVyIHNpemUgaXMgaW50ZWdlci4KLSAgICBp
bWFnZUNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh1bmNsYW1wZWRJbWFnZVNpemUud2lkdGgoKSAv
IGFic29sdXRlVGFyZ2V0UmVjdC53aWR0aCgpLCB1bmNsYW1wZWRJbWFnZVNpemUuaGVpZ2h0KCkg
LyBhYnNvbHV0ZVRhcmdldFJlY3QuaGVpZ2h0KCkpKTsKLQotICAgIGltYWdlQnVmZmVyID0gaW1h
Z2UucmVsZWFzZSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNWR0ltYWdlQnVmZmVy
VG9vbHM6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBpbWFnZSwgUmVu
ZGVyT2JqZWN0KiBpdGVtLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN1YnRyZWVDb250ZW50VHJh
bnNmb3JtYXRpb24pCi17Ci0gICAgQVNTRVJUKGl0ZW0pOwotICAgIEFTU0VSVChpbWFnZSk7Ci0g
ICAgQVNTRVJUKGltYWdlLT5jb250ZXh0KCkpOwotCi0gICAgUGFpbnRJbmZvIGluZm8oaW1hZ2Ut
PmNvbnRleHQoKSwgUGFpbnRJbmZvOjppbmZpbml0ZVJlY3QoKSwgUGFpbnRQaGFzZUZvcmVncm91
bmQsIDAsIDAsIDApOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtJiBjb250ZW50VHJhbnNmb3JtYXRp
b24gPSBjdXJyZW50Q29udGVudFRyYW5zZm9ybWF0aW9uKCk7Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
IHNhdmVkQ29udGVudFRyYW5zZm9ybWF0aW9uID0gY29udGVudFRyYW5zZm9ybWF0aW9uOwotICAg
IGNvbnRlbnRUcmFuc2Zvcm1hdGlvbi5tdWx0aXBseShzdWJ0cmVlQ29udGVudFRyYW5zZm9ybWF0
aW9uKTsKLQotICAgIGl0ZW0tPmxheW91dElmTmVlZGVkKCk7Ci0gICAgaXRlbS0+cGFpbnQoaW5m
bywgMCwgMCk7Ci0KLSAgICBjb250ZW50VHJhbnNmb3JtYXRpb24gPSBzYXZlZENvbnRlbnRUcmFu
c2Zvcm1hdGlvbjsKLX0KLQotdm9pZCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGlwVG9JbWFnZUJ1
ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJz
b2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVj
dCwgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIpCi17Ci0gICAgQVNTRVJUKGNvbnRl
eHQpOwotICAgIEFTU0VSVChpbWFnZUJ1ZmZlcik7Ci0KLSAgICAvLyBUaGUgbWFzayBpbWFnZSBo
YXMgYmVlbiBjcmVhdGVkIGluIHRoZSBhYnNvbHV0ZSBjb29yZGluYXRlIHNwYWNlLCBhcyB0aGUg
aW1hZ2Ugc2hvdWxkIG5vdCBiZSBzY2FsZWQuCi0gICAgLy8gU28gdGhlIGFjdHVhbCBtYXNraW5n
IHByb2Nlc3MgaGFzIHRvIGJlIGRvbmUgaW4gdGhlIGFic29sdXRlIGNvb3JkaW5hdGUgc3BhY2Ug
YXMgd2VsbC4KLSAgICBjb250ZXh0LT5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJz
ZSgpKTsKLSAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5nZXQoKSwg
Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCk7Ci0gICAgY29udGV4dC0+Y29uY2F0Q1RNKGFic29s
dXRlVHJhbnNmb3JtKTsKLQotICAgIC8vIFdoZW4gbmVzdGluZyByZXNvdXJjZXMsIHdpdGggb2Jq
ZWN0Qm91bmRpbmdCb3ggYXMgY29udGVudCB1bml0IHR5cGVzLCB0aGVyZSdzIG5vIHVzZSBpbiBj
YWNoaW5nIHRoZQotICAgIC8vIHJlc3VsdGluZyBpbWFnZSBidWZmZXIgYXMgdGhlIHBhcmVudCBy
ZXNvdXJjZSBhbHJlYWR5IGNhY2hlcyB0aGUgcmVzdWx0LgotICAgIGlmICghY3VycmVudENvbnRl
bnRUcmFuc2Zvcm1hdGlvbigpLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgaW1hZ2VCdWZmZXIuY2xl
YXIoKTsKLX0KLQotSW50U2l6ZSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyb3VuZGVkSW1hZ2VCdWZm
ZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShzdGF0
aWNfY2FzdDxpbnQ+KGxyb3VuZGYoc2l6ZS53aWR0aCgpKSksIHN0YXRpY19jYXN0PGludD4obHJv
dW5kZihzaXplLmhlaWdodCgpKSkpOwotfQotCi1GbG9hdFJlY3QgU1ZHSW1hZ2VCdWZmZXJUb29s
czo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0KQotewotICAg
IEFTU0VSVChyZW5kZXJlcik7Ci0KLSAgICBjb25zdCBSZW5kZXJTVkdSb290KiBzdmdSb290ID0g
U1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KHJlbmRlcmVyKTsKLSAgICBGbG9h
dFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVGFyZ2V0UmVjdDsKLSAg
ICBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LmludGVyc2VjdChzdmdSb290LT5jb250ZW50Qm94
UmVjdCgpKTsKLSAgICByZXR1cm4gY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdDsKLX0KLQotfQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0ltYWdl
QnVmZmVyVG9vbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1
ZmZlclRvb2xzLmgJKHJldmlzaW9uIDc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW1h
Z2VCdWZmZXJUb29scy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gICAg
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotKi8KLQotI2lmbmRlZiBTVkdJbWFnZUJ1ZmZlclRvb2xzX2gKLSNkZWZpbmUgU1ZH
SW1hZ2VCdWZmZXJUb29sc19oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgRmxv
YXRTaXplOwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgUmVuZGVyT2JqZWN0OwotCi1j
bGFzcyBTVkdJbWFnZUJ1ZmZlclRvb2xzIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgYm9vbCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIGFic29s
dXRlVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0
LCBPd25QdHI8SW1hZ2VCdWZmZXI+JiwgQ29sb3JTcGFjZSk7Ci0gICAgc3RhdGljIHZvaWQgcmVu
ZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBSZW5kZXJPYmplY3QqLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICBzdGF0aWMgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFn
ZUJ1ZmZlcj4mKTsKLQotICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9P
dXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKGNvbnN0IFJlbmRlck9iamVjdCosIEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBl
ZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0
IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0KTsKLSAgICBzdGF0aWMgSW50U2l6ZSByb3Vu
ZGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotCi1wcml2YXRlOgotICAgIFNW
R0ltYWdlQnVmZmVyVG9vbHMoKSB7IH0KLSAgICB+U1ZHSW1hZ2VCdWZmZXJUb29scygpIHsgfQot
fTsKLQotfQotCi0jZW5kaWYKLSNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHTWFy
a2VyRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR01hcmtlckRhdGEu
aAkocmV2aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTM0ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQot
I2lmbmRlZiBTVkdNYXJrZXJEYXRhX2gKLSNkZWZpbmUgU1ZHTWFya2VyRGF0YV9oCi0KLSNpZiBF
TkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIlBhdGgu
aCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIFJlbmRlclNWR1Jlc291cmNlTWFya2VyOwotCi1jbGFzcyBTVkdNYXJrZXJEYXRhIHsK
LXB1YmxpYzoKLSAgICBlbnVtIFR5cGUgewotICAgICAgICBVbmtub3duID0gMCwKLSAgICAgICAg
U3RhcnQsCi0gICAgICAgIE1pZCwKLSAgICAgICAgRW5kCi0gICAgfTsKLQotICAgIFNWR01hcmtl
ckRhdGEoY29uc3QgVHlwZSYgdHlwZSA9IFVua25vd24sIFJlbmRlclNWR1Jlc291cmNlTWFya2Vy
KiBtYXJrZXIgPSAwKQotICAgICAgICA6IG1fdHlwZSh0eXBlKQotICAgICAgICAsIG1fbWFya2Vy
KG1hcmtlcikKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludCBvcmlnaW4oKSBjb25zdCB7
IHJldHVybiBtX29yaWdpbjsgfQotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXIo
KSBjb25zdCB7IHJldHVybiBtX21hcmtlcjsgfQotCi0gICAgZmxvYXQgY3VycmVudEFuZ2xlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbnNsb3BlQ2hhbmdlID0gbV9pbnNsb3Bl
UG9pbnRzWzFdIC0gbV9pbnNsb3BlUG9pbnRzWzBdOwotICAgICAgICBGbG9hdFNpemUgb3V0c2xv
cGVDaGFuZ2UgPSBtX291dHNsb3BlUG9pbnRzWzFdIC0gbV9vdXRzbG9wZVBvaW50c1swXTsKLQot
ICAgICAgICBkb3VibGUgaW5zbG9wZSA9IHJhZDJkZWcoYXRhbjIoaW5zbG9wZUNoYW5nZS5oZWln
aHQoKSwgaW5zbG9wZUNoYW5nZS53aWR0aCgpKSk7Ci0gICAgICAgIGRvdWJsZSBvdXRzbG9wZSA9
IHJhZDJkZWcoYXRhbjIob3V0c2xvcGVDaGFuZ2UuaGVpZ2h0KCksIG91dHNsb3BlQ2hhbmdlLndp
ZHRoKCkpKTsKLQotICAgICAgICBkb3VibGUgYW5nbGUgPSAwOwotICAgICAgICBzd2l0Y2ggKG1f
dHlwZSkgewotICAgICAgICBjYXNlIFN0YXJ0OgotICAgICAgICAgICAgYW5nbGUgPSBvdXRzbG9w
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1pZDoKLSAgICAgICAgICAgIGFu
Z2xlID0gKGluc2xvcGUgKyBvdXRzbG9wZSkgLyAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRW5kOgotICAgICAgICAgICAgYW5nbGUgPSBpbnNsb3BlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoYW5nbGUpOwotICAgIH0KLQotICAgIHZvaWQgdXBkYXRlVHlwZUFu
ZE1hcmtlcihjb25zdCBUeXBlJiB0eXBlLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2Vy
KQotICAgIHsKLSAgICAgICAgbV90eXBlID0gdHlwZTsKLSAgICAgICAgbV9tYXJrZXIgPSBtYXJr
ZXI7Ci0gICAgfQotCi0gICAgdm9pZCB1cGRhdGVPdXRzbG9wZShjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkKLSAgICB7Ci0gICAgICAgIG1fb3V0c2xvcGVQb2ludHNbMF0gPSBtX29yaWdpbjsKLSAg
ICAgICAgbV9vdXRzbG9wZVBvaW50c1sxXSA9IHBvaW50OwotICAgIH0KLQotICAgIHZvaWQgdXBk
YXRlTWFya2VyRGF0YUZvclBhdGhFbGVtZW50KGNvbnN0IFBhdGhFbGVtZW50KiBlbGVtZW50KQot
ICAgIHsKLSAgICAgICAgRmxvYXRQb2ludCogcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOwotCi0g
ICAgICAgIHN3aXRjaCAoZWxlbWVudC0+dHlwZSkgewotICAgICAgICBjYXNlIFBhdGhFbGVtZW50
QWRkUXVhZEN1cnZlVG9Qb2ludDoKLSAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMxMTUgKFBhdGhFbGVtZW50QWRkUXVhZEN1cnZl
VG9Qb2ludCBub3QgaGFuZGxlZCBmb3IgPG1hcmtlcj4pCi0gICAgICAgICAgICBtX29yaWdpbiA9
IHBvaW50c1sxXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBhdGhFbGVtZW50
QWRkQ3VydmVUb1BvaW50OgotICAgICAgICAgICAgbV9pbnNsb3BlUG9pbnRzWzBdID0gcG9pbnRz
WzFdOwotICAgICAgICAgICAgbV9pbnNsb3BlUG9pbnRzWzFdID0gcG9pbnRzWzJdOwotICAgICAg
ICAgICAgbV9vcmlnaW4gPSBwb2ludHNbMl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBQYXRoRWxlbWVudE1vdmVUb1BvaW50OgotICAgICAgICAgICAgbV9zdWJwYXRoU3RhcnQg
PSBwb2ludHNbMF07Ci0gICAgICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludDoKLSAg
ICAgICAgICAgIHVwZGF0ZUluc2xvcGUocG9pbnRzWzBdKTsKLSAgICAgICAgICAgIG1fb3JpZ2lu
ID0gcG9pbnRzWzBdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGF0aEVsZW1l
bnRDbG9zZVN1YnBhdGg6Ci0gICAgICAgICAgICB1cGRhdGVJbnNsb3BlKHBvaW50c1swXSk7Ci0g
ICAgICAgICAgICBtX29yaWdpbiA9IG1fc3VicGF0aFN0YXJ0OwotICAgICAgICAgICAgbV9zdWJw
YXRoU3RhcnQgPSBGbG9hdFBvaW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgdm9pZCB1cGRhdGVJbnNsb3BlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotICAgIHsKLSAg
ICAgICAgbV9pbnNsb3BlUG9pbnRzWzBdID0gbV9vcmlnaW47Ci0gICAgICAgIG1faW5zbG9wZVBv
aW50c1sxXSA9IHBvaW50OwotICAgIH0KLQotICAgIFR5cGUgbV90eXBlOwotICAgIFJlbmRlclNW
R1Jlc291cmNlTWFya2VyKiBtX21hcmtlcjsKLSAgICBGbG9hdFBvaW50IG1fb3JpZ2luOwotICAg
IEZsb2F0UG9pbnQgbV9zdWJwYXRoU3RhcnQ7Ci0gICAgRmxvYXRQb2ludCBtX2luc2xvcGVQb2lu
dHNbMl07Ci0gICAgRmxvYXRQb2ludCBtX291dHNsb3BlUG9pbnRzWzJdOwotfTsKLQotfQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFNWRykKLSNlbmRpZiAvLyBTVkdNYXJrZXJEYXRhX2gKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uY3BwCShyZXZpc2lvbiA3NTI3MikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA1LCAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA5IEdvb2dsZSwgSW5jLgotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdNYXJrZXJMYXlv
dXRJbmZvLmgiCi0KLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVNWR01hcmtlckxheW91dEluZm86OlNWR01hcmtlckxheW91dElu
Zm8oKQotICAgIDogbV9taWRNYXJrZXIoMCkKLSAgICAsIG1fZWxlbWVudEluZGV4KDApCi0gICAg
LCBtX3N0cm9rZVdpZHRoKDApCi17Ci19Ci0KLVNWR01hcmtlckxheW91dEluZm86On5TVkdNYXJr
ZXJMYXlvdXRJbmZvKCkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NTdGFydEFu
ZE1pZE1hcmtlcnModm9pZCogaW5mb1B0ciwgY29uc3QgUGF0aEVsZW1lbnQqIGVsZW1lbnQpCi17
Ci0gICAgU1ZHTWFya2VyTGF5b3V0SW5mbyYgaW5mbyA9ICpyZWludGVycHJldF9jYXN0PFNWR01h
cmtlckxheW91dEluZm8qPihpbmZvUHRyKTsKLSAgICBTVkdNYXJrZXJEYXRhJiBtYXJrZXJEYXRh
ID0gaW5mby5tYXJrZXJEYXRhKCk7Ci0gICAgaW50JiBlbGVtZW50SW5kZXggPSBpbmZvLmVsZW1l
bnRJbmRleCgpOwotCi0gICAgLy8gRmlyc3QgdXBkYXRlIHRoZSBvdXRzbG9wZSBmb3IgdGhlIHBy
ZXZpb3VzIGVsZW1lbnQKLSAgICBtYXJrZXJEYXRhLnVwZGF0ZU91dHNsb3BlKGVsZW1lbnQtPnBv
aW50c1swXSk7Ci0KLSAgICAvLyBEcmF3IHRoZSBtYXJrZXIgZm9yIHRoZSBwcmV2aW91cyBlbGVt
ZW50Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlciA9IG1hcmtlckRhdGEubWFy
a2VyKCk7Ci0gICAgaWYgKGVsZW1lbnRJbmRleCA+IDAgJiYgbWFya2VyKQotICAgICAgICBpbmZv
LmFkZExheW91dGVkTWFya2VyKG1hcmtlciwgbWFya2VyRGF0YS5vcmlnaW4oKSwgbWFya2VyRGF0
YS5jdXJyZW50QW5nbGUoKSk7Ci0KLSAgICAvLyBVcGRhdGUgb3VyIG1hcmtlciBkYXRhIGZvciB0
aGlzIGVsZW1lbnQKLSAgICBtYXJrZXJEYXRhLnVwZGF0ZU1hcmtlckRhdGFGb3JQYXRoRWxlbWVu
dChlbGVtZW50KTsKLQotICAgIC8vIEFmdGVyIGRyYXdpbmcgdGhlIHN0YXJ0IG1hcmtlciwgc3dp
dGNoIHRvIGRyYXdpbmcgbWlkIG1hcmtlcnMKLSAgICBpZiAoZWxlbWVudEluZGV4ID09IDEpCi0g
ICAgICAgIG1hcmtlckRhdGEudXBkYXRlVHlwZUFuZE1hcmtlcihTVkdNYXJrZXJEYXRhOjpNaWQs
IGluZm8ubWlkTWFya2VyKCkpOwotCi0gICAgKytlbGVtZW50SW5kZXg7Ci19Ci0KLUZsb2F0UmVj
dCBTVkdNYXJrZXJMYXlvdXRJbmZvOjpjYWxjdWxhdGVCb3VuZGFyaWVzKFJlbmRlclNWR1Jlc291
cmNlTWFya2VyKiBzdGFydE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1pZE1hcmtl
ciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIGVuZE1hcmtlciwgZmxvYXQgc3Ryb2tlV2lkdGgs
IGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgbV9sYXlvdXQuY2xlYXIoKTsKLSAgICBtX21pZE1h
cmtlciA9IG1pZE1hcmtlcjsKLSAgICBtX3N0cm9rZVdpZHRoID0gc3Ryb2tlV2lkdGg7Ci0gICAg
bV9lbGVtZW50SW5kZXggPSAwOwotICAgIG1fbWFya2VyRGF0YSA9IFNWR01hcmtlckRhdGEoU1ZH
TWFya2VyRGF0YTo6U3RhcnQsIHN0YXJ0TWFya2VyKTsKLSAgICBwYXRoLmFwcGx5KHRoaXMsIHBy
b2Nlc3NTdGFydEFuZE1pZE1hcmtlcnMpOwotCi0gICAgaWYgKGVuZE1hcmtlcikgewotICAgICAg
ICBtX21hcmtlckRhdGEudXBkYXRlVHlwZUFuZE1hcmtlcihTVkdNYXJrZXJEYXRhOjpFbmQsIGVu
ZE1hcmtlcik7Ci0gICAgICAgIGFkZExheW91dGVkTWFya2VyKGVuZE1hcmtlciwgbV9tYXJrZXJE
YXRhLm9yaWdpbigpLCBtX21hcmtlckRhdGEuY3VycmVudEFuZ2xlKCkpOwotICAgIH0KLQotICAg
IGlmIChtX2xheW91dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQot
ICAgIFZlY3RvcjxNYXJrZXJMYXlvdXQ+OjppdGVyYXRvciBpdCA9IG1fbGF5b3V0LmJlZ2luKCk7
Ci0gICAgVmVjdG9yPE1hcmtlckxheW91dD46Oml0ZXJhdG9yIGVuZCA9IG1fbGF5b3V0LmVuZCgp
OwotCi0gICAgRmxvYXRSZWN0IGJvdW5kczsKLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIE1hcmtlckxheW91dCYgbGF5b3V0ID0gKml0OwotCi0gICAgICAgIFJlbmRlclNW
R1Jlc291cmNlTWFya2VyKiBtYXJrZXJDb250ZW50ID0gbGF5b3V0Lm1hcmtlcjsKLSAgICAgICAg
QVNTRVJUKG1hcmtlckNvbnRlbnQpOwotCi0gICAgICAgIGJvdW5kcy51bml0ZShtYXJrZXJDb250
ZW50LT5tYXJrZXJCb3VuZGFyaWVzKGxheW91dC5tYXRyaXgpKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gYm91bmRzOwotfQotCi12b2lkIFNWR01hcmtlckxheW91dEluZm86OmRyYXdNYXJrZXJzKFBh
aW50SW5mbyYgcGFpbnRJbmZvKQotewotICAgIGlmIChtX2xheW91dC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxNYXJrZXJMYXlvdXQ+OjppdGVyYXRvciBpdCA9IG1f
bGF5b3V0LmJlZ2luKCk7Ci0gICAgVmVjdG9yPE1hcmtlckxheW91dD46Oml0ZXJhdG9yIGVuZCA9
IG1fbGF5b3V0LmVuZCgpOwotCi0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBNYXJrZXJMYXlvdXQmIGxheW91dCA9ICppdDsKLSAgICAgICAgbGF5b3V0Lm1hcmtlci0+ZHJh
dyhwYWludEluZm8sIGxheW91dC5tYXRyaXgpOwotICAgIH0KLX0KLQotdm9pZCBTVkdNYXJrZXJM
YXlvdXRJbmZvOjphZGRMYXlvdXRlZE1hcmtlcihSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFy
a2VyLCBjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlKQotewotICAgIEFTU0VS
VChtYXJrZXIpOwotICAgIG1fbGF5b3V0LmFwcGVuZChNYXJrZXJMYXlvdXQobWFya2VyLCBtYXJr
ZXItPm1hcmtlclRyYW5zZm9ybWF0aW9uKG9yaWdpbiwgYW5nbGUsIG1fc3Ryb2tlV2lkdGgpKSk7
Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHTWFya2VyTGF5b3V0SW5mby5oCShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1NWR01hcmtlckxheW91dEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NCArMCwwIEBA
Ci0vKgotICAgIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgU1ZHTWFya2VyTGF5b3V0SW5mb19oCi0j
ZGVmaW5lIFNWR01hcmtlckxheW91dEluZm9faAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTVkdNYXJrZXJEYXRhLmgiCi0jaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGF0aDsK
LWNsYXNzIFJlbmRlclNWR1Jlc291cmNlTWFya2VyOwotCi1zdHJ1Y3QgTWFya2VyTGF5b3V0IHsK
LSAgICBNYXJrZXJMYXlvdXQoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck9iaiA9IDAs
IEFmZmluZVRyYW5zZm9ybSBtYXRyaXhPYmogPSBBZmZpbmVUcmFuc2Zvcm0oKSkKLSAgICAgICAg
OiBtYXJrZXIobWFya2VyT2JqKQotICAgICAgICAsIG1hdHJpeChtYXRyaXhPYmopCi0gICAgewot
ICAgICAgICBBU1NFUlQobWFya2VyKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlciogbWFya2VyOwotICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7Ci19OwotCi1jbGFzcyBT
VkdNYXJrZXJMYXlvdXRJbmZvIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBT
VkdNYXJrZXJMYXlvdXRJbmZvKCk7Ci0gICAgflNWR01hcmtlckxheW91dEluZm8oKTsKLQotICAg
IEZsb2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBz
dGFydE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1pZE1hcmtlciwgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIqIGVuZE1hcmtlciwgZmxvYXQgc3Ryb2tlV2lkdGgsIGNvbnN0IFBhdGgm
KTsKLSAgICB2b2lkIGRyYXdNYXJrZXJzKFBhaW50SW5mbyYpOwotCi0gICAgLy8gVXNlZCBieSBz
dGF0aWMgaW5saW5lIGhlbHBlciBmdW5jdGlvbnMgaW4gU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAK
LSAgICBTVkdNYXJrZXJEYXRhJiBtYXJrZXJEYXRhKCkgeyByZXR1cm4gbV9tYXJrZXJEYXRhOyB9
Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1pZE1hcmtlcigpIGNvbnN0IHsgcmV0dXJu
IG1fbWlkTWFya2VyOyB9Ci0gICAgaW50JiBlbGVtZW50SW5kZXgoKSB7IHJldHVybiBtX2VsZW1l
bnRJbmRleDsgfQotICAgIHZvaWQgYWRkTGF5b3V0ZWRNYXJrZXIoUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIqLCBjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlKTsKLQotcHJpdmF0
ZToKLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbV9taWRNYXJrZXI7Ci0KLSAgICAvLyBV
c2VkIHdoaWxlIGxheW91dGluZyBtYXJrZXJzCi0gICAgaW50IG1fZWxlbWVudEluZGV4OwotICAg
IFNWR01hcmtlckRhdGEgbV9tYXJrZXJEYXRhOwotICAgIGZsb2F0IG1fc3Ryb2tlV2lkdGg7Ci0K
LSAgICAvLyBIb2xkcyB0aGUgZmluYWwgY29tcHV0ZWQgcmVzdWx0Ci0gICAgVmVjdG9yPE1hcmtl
ckxheW91dD4gbV9sYXlvdXQ7Ci19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkocmV2aXNpb24gNzUyNzIpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwz
NTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgotICogICAgICAgICAgIChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgotICogICAgICAgICAgIChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+Ci0gKiAgICAgICAgICAgKEMpIDIwMDkgR29vZ2xlLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogICAgICAgICAgIChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLQotI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiTm9k
ZVJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJSZW5k
ZXJTVkdQYXRoLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgiCi0jaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCi0j
aW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgot
I2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCi0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW50UmVjdCBTVkdSZW5kZXJTdXBwb3J0OjpjbGlw
cGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpCi17Ci0gICAgLy8gUmV0dXJuIGVhcmx5IGZv
ciBhbnkgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgYWN0dWFsbHkgcGFpbnQKLSAgICBpZiAob2JqZWN0
LT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSAmJiAhb2JqZWN0LT5lbmNsb3NpbmdM
YXllcigpLT5oYXNWaXNpYmxlQ29udGVudCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwot
Ci0gICAgLy8gUGFzcyBvdXIgbG9jYWwgcGFpbnQgcmVjdCB0byBjb21wdXRlUmVjdEZvclJlcGFp
bnQoKSB3aGljaCB3aWxsCi0gICAgLy8gbWFwIHRvIHBhcmVudCBjb29yZHMgYW5kIHJlY3Vyc2Ug
dXAgdGhlIHBhcmVudCBjaGFpbi4KLSAgICBJbnRSZWN0IHJlcGFpbnRSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChvYmplY3QtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotICAgIG9i
amVjdC0+Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHJlcGFpbnRSZWN0
KTsKLSAgICByZXR1cm4gcmVwYWludFJlY3Q7Ci19Ci0KLXZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6
Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4
ZWQpCi17Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gb2JqZWN0LT5zdHls
ZSgpLT5zdmdTdHlsZSgpOwotICAgIGlmIChjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBzdmdT
dHlsZS0+c2hhZG93KCkpCi0gICAgICAgIHNoYWRvdy0+YWRqdXN0UmVjdEZvclNoYWRvdyhyZXBh
aW50UmVjdCk7Ci0KLSAgICAvLyBUcmFuc2xhdGUgdG8gY29vcmRzIGluIG91ciBwYXJlbnQgcmVu
ZGVyZXIsIGFuZCB0aGVuIGNhbGwgY29tcHV0ZVJlY3RGb3JSZXBhaW50IG9uIG91ciBwYXJlbnQK
LSAgICByZXBhaW50UmVjdCA9IG9iamVjdC0+bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLm1hcFJl
Y3QocmVwYWludFJlY3QpOwotICAgIG9iamVjdC0+cGFyZW50KCktPmNvbXB1dGVSZWN0Rm9yUmVw
YWludChyZXBhaW50Q29udGFpbmVyLCByZXBhaW50UmVjdCwgZml4ZWQpOwotfQotCi12b2lkIFNW
R1JlbmRlclN1cHBvcnQ6Om1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBv
YmplY3QsIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVk
ICwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpCi17
Ci0gICAgQVNTRVJUKCFmaXhlZCk7IC8vIFdlIHNob3VsZCBoYXZlIG5vIGZpeGVkIGNvbnRlbnQg
aW4gdGhlIFNWRyByZW5kZXJpbmcgdHJlZS4KLSAgICBBU1NFUlQodXNlVHJhbnNmb3Jtcyk7IC8v
IE1hcHBpbmcgYSBwb2ludCB0aHJvdWdoIFNWRyB3L28gcmVzcGVjdGluZyB0cmFuc2Zvcm1zIGlz
IHVzZWxlc3MuCi0gICAgdHJhbnNmb3JtU3RhdGUuYXBwbHlUcmFuc2Zvcm0ob2JqZWN0LT5sb2Nh
bFRvUGFyZW50VHJhbnNmb3JtKCkpOwotICAgIG9iamVjdC0+cGFyZW50KCktPm1hcExvY2FsVG9D
b250YWluZXIocmVwYWludENvbnRhaW5lciwgZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9y
bVN0YXRlKTsKLX0KLQotYm9vbCBTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdD
b250ZW50KFJlbmRlck9iamVjdCogb2JqZWN0LCBQYWludEluZm8mIHBhaW50SW5mbykKLXsKLSAg
ICBBU1NFUlQob2JqZWN0KTsKLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5
bGUoKTsKLSAgICBBU1NFUlQoc3R5bGUpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2
Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7Ci0gICAgQVNTRVJUKHN2Z1N0eWxlKTsKLQotICAg
IC8vIFNldHVwIHRyYW5zcGFyZW5jeSBsYXllcnMgYmVmb3JlIHNldHRpbmcgdXAgU1ZHIHJlc291
cmNlcyEKLSAgICBmbG9hdCBvcGFjaXR5ID0gc3R5bGUtPm9wYWNpdHkoKTsKLSAgICBjb25zdCBT
aGFkb3dEYXRhKiBzaGFkb3cgPSBzdmdTdHlsZS0+c2hhZG93KCk7Ci0gICAgaWYgKG9wYWNpdHkg
PCAxIHx8IHNoYWRvdykgewotICAgICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3QgPSBvYmplY3Qt
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7Ci0KLSAgICAgICAgaWYgKG9wYWNpdHkg
PCAxKSB7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChyZXBhaW50UmVjdCk7
Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihv
cGFjaXR5KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzaGFkb3cpIHsKLSAgICAgICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT5jbGlwKHJlcGFpbnRSZWN0KTsKLSAgICAgICAgICAgIHBhaW50
SW5mby5jb250ZXh0LT5zZXRTaGFkb3coSW50U2l6ZShzaGFkb3ctPngoKSwgc2hhZG93LT55KCkp
LCBzaGFkb3ctPmJsdXIoKSwgc2hhZG93LT5jb2xvcigpLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsK
LSAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdS
ZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KG9iamVjdCk7Ci0g
ICAgaWYgKCFyZXNvdXJjZXMpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKFJlbmRl
clNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIgPSByZXNvdXJjZXMtPm1hc2tlcigpKSB7Ci0gICAg
ICAgIGlmICghbWFza2VyLT5hcHBseVJlc291cmNlKG9iamVjdCwgc3R5bGUsIHBhaW50SW5mby5j
b250ZXh0LCBBcHBseVRvRGVmYXVsdE1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSByZXNv
dXJjZXMtPmNsaXBwZXIoKSkgewotICAgICAgICBpZiAoIWNsaXBwZXItPmFwcGx5UmVzb3VyY2Uo
b2JqZWN0LCBzdHlsZSwgcGFpbnRJbmZvLmNvbnRleHQsIEFwcGx5VG9EZWZhdWx0TW9kZSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxFKEZJTFRFUlMpCi0g
ICAgaWYgKFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSByZXNvdXJjZXMtPmZpbHRl
cigpKSB7Ci0gICAgICAgIGlmICghZmlsdGVyLT5hcHBseVJlc291cmNlKG9iamVjdCwgc3R5bGUs
IHBhaW50SW5mby5jb250ZXh0LCBBcHBseVRvRGVmYXVsdE1vZGUpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
U1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqIG9i
amVjdCwgUGFpbnRJbmZvJiBwYWludEluZm8sIEdyYXBoaWNzQ29udGV4dCogc2F2ZWRDb250ZXh0
KQotewotI2lmICFFTkFCTEUoRklMVEVSUykKLSAgICBVTlVTRURfUEFSQU0oc2F2ZWRDb250ZXh0
KTsKLSNlbmRpZgotCi0gICAgQVNTRVJUKG9iamVjdCk7Ci0KLSAgICBjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdTdHlsZSgpOwotICAgIEFT
U0VSVChzdmdTdHlsZSk7Ci0KLSNpZiBFTkFCTEUoRklMVEVSUykKLSAgICBTVkdSZXNvdXJjZXMq
IHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJP
YmplY3Qob2JqZWN0KTsKLSAgICBpZiAocmVzb3VyY2VzKSB7Ci0gICAgICAgIGlmIChSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkgewotICAgICAg
ICAgICAgZmlsdGVyLT5wb3N0QXBwbHlSZXNvdXJjZShvYmplY3QsIHBhaW50SW5mby5jb250ZXh0
LCBBcHBseVRvRGVmYXVsdE1vZGUsIC8qIHBhdGggKi8wKTsKLSAgICAgICAgICAgIHBhaW50SW5m
by5jb250ZXh0ID0gc2F2ZWRDb250ZXh0OwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBpZiAoc3R5bGUtPm9wYWNpdHkoKSA8IDEpCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5l
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0gICAgaWYgKHN2Z1N0eWxlLT5zaGFkb3coKSkKLSAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci19Ci0KLXZv
aWQgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMoY29uc3Qg
UmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIEZs
b2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5nQm94
KQotewotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gY29udGFpbmVyLT5maXJzdENo
aWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKSB7Ci0gICAg
ICAgIGlmIChjdXJyZW50LT5pc1NWR0hpZGRlbkNvbnRhaW5lcigpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0gPSBjdXJy
ZW50LT5sb2NhbFRvUGFyZW50VHJhbnNmb3JtKCk7Ci0gICAgICAgIGlmICh0cmFuc2Zvcm0uaXNJ
ZGVudGl0eSgpKSB7Ci0gICAgICAgICAgICBvYmplY3RCb3VuZGluZ0JveC51bml0ZShjdXJyZW50
LT5vYmplY3RCb3VuZGluZ0JveCgpKTsKLSAgICAgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVu
aXRlKGN1cnJlbnQtPnN0cm9rZUJvdW5kaW5nQm94KCkpOwotICAgICAgICAgICAgcmVwYWludEJv
dW5kaW5nQm94LnVuaXRlKGN1cnJlbnQtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb2JqZWN0Qm91bmRpbmdCb3gudW5pdGUo
dHJhbnNmb3JtLm1hcFJlY3QoY3VycmVudC0+b2JqZWN0Qm91bmRpbmdCb3goKSkpOwotICAgICAg
ICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5pdGUodHJhbnNmb3JtLm1hcFJlY3QoY3VycmVudC0+
c3Ryb2tlQm91bmRpbmdCb3goKSkpOwotICAgICAgICAgICAgcmVwYWludEJvdW5kaW5nQm94LnVu
aXRlKHRyYW5zZm9ybS5tYXBSZWN0KGN1cnJlbnQtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBTVkdSZW5kZXJTdXBwb3J0Ojpw
YWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiBsb2NhbFJlcGFp
bnRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVHJhbnNmb3JtLCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbykKLXsKLSAgICBpZiAobG9jYWxUcmFuc2Zvcm0uaXNJZGVudGl0eSgp
KQotICAgICAgICByZXR1cm4gbG9jYWxSZXBhaW50UmVjdC5pbnRlcnNlY3RzKHBhaW50SW5mby5y
ZWN0KTsKLQotICAgIHJldHVybiBsb2NhbFRyYW5zZm9ybS5tYXBSZWN0KGxvY2FsUmVwYWludFJl
Y3QpLmludGVyc2VjdHMocGFpbnRJbmZvLnJlY3QpOwotfQotCi1jb25zdCBSZW5kZXJTVkdSb290
KiBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVHJlZVJvb3RPYmplY3QoY29uc3QgUmVuZGVyT2JqZWN0
KiBzdGFydCkKLXsKLSAgICB3aGlsZSAoc3RhcnQgJiYgIXN0YXJ0LT5pc1NWR1Jvb3QoKSkKLSAg
ICAgICAgc3RhcnQgPSBzdGFydC0+cGFyZW50KCk7Ci0KLSAgICBBU1NFUlQoc3RhcnQpOwotICAg
IEFTU0VSVChzdGFydC0+aXNTVkdSb290KCkpOwotICAgIHJldHVybiB0b1JlbmRlclNWR1Jvb3Qo
c3RhcnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZVJlc291cmNlc09mQ2hp
bGRyZW4oUmVuZGVyT2JqZWN0KiBzdGFydCkKLXsKLSAgICBBU1NFUlQoIXN0YXJ0LT5uZWVkc0xh
eW91dCgpKTsKLSAgICBpZiAoU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXND
YWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHN0YXJ0KSkKLSAgICAgICAgcmVz
b3VyY2VzLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUoc3RhcnQsIGZhbHNlKTsKLQotICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBpbnZhbGlkYXRlUmVzb3VyY2VzT2ZDaGls
ZHJlbihjaGlsZCk7Ci19Ci0KLXZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4o
UmVuZGVyT2JqZWN0KiBzdGFydCwgYm9vbCBzZWxmTmVlZHNMYXlvdXQpCi17Ci0gICAgYm9vbCBs
YXlvdXRTaXplQ2hhbmdlZCA9IGZpbmRUcmVlUm9vdE9iamVjdChzdGFydCktPmlzTGF5b3V0U2l6
ZUNoYW5nZWQoKTsKLSAgICBIYXNoU2V0PFJlbmRlck9iamVjdCo+IG5vdGxheW91dGVkT2JqZWN0
czsKLQotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHN0YXJ0LT5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGJvb2wgbmVl
ZHNMYXlvdXQgPSBzZWxmTmVlZHNMYXlvdXQ7Ci0KLSAgICAgICAgaWYgKGxheW91dFNpemVDaGFu
Z2VkKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHNlbGZOZWVkc0xheW91dCBpcyBmYWxzZSBhbmQg
dGhlIGxheW91dCBzaXplIGNoYW5nZWQsIHdlIGhhdmUgdG8gY2hlY2sgd2hldGhlciB0aGlzIGNo
aWxkIHVzZXMgcmVsYXRpdmUgbGVuZ3RocwotICAgICAgICAgICAgaWYgKFNWR0VsZW1lbnQqIGVs
ZW1lbnQgPSBjaGlsZC0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSA/IHN0YXRpY19jYXN0PFNWR0Vs
ZW1lbnQqPihjaGlsZC0+bm9kZSgpKSA6IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVu
dC0+aXNTdHlsZWQoKSAmJiBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCkt
Pmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhl
IGxheW91dCBzaXplIGNoYW5nZWQgYW5kIHdoZW4gdXNpbmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwg
dGhlIFJlbmRlclNWR1BhdGggdG8gdXBkYXRlIGl0cyBQYXRoIG9iamVjdAotICAgICAgICAgICAg
ICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHUGF0aCgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
dG9SZW5kZXJTVkdQYXRoKGNoaWxkKS0+c2V0TmVlZHNQYXRoVXBkYXRlKCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgbmVlZHNMYXlvdXQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZWVkc0xheW91dCkgewotICAgICAg
ICAgICAgY2hpbGQtPnNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKLSAgICAgICAgICAgIGNo
aWxkLT5sYXlvdXQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+
bmVlZHNMYXlvdXQoKSkKLSAgICAgICAgICAgICAgICBjaGlsZC0+bGF5b3V0KCk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChsYXlvdXRTaXplQ2hhbmdlZCkKLSAgICAgICAgICAgICAgICBub3RsYXlv
dXRlZE9iamVjdHMuYWRkKGNoaWxkKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVCghY2hp
bGQtPm5lZWRzTGF5b3V0KCkpOwotICAgIH0KLQotICAgIGlmICghbGF5b3V0U2l6ZUNoYW5nZWQp
IHsKLSAgICAgICAgQVNTRVJUKG5vdGxheW91dGVkT2JqZWN0cy5pc0VtcHR5KCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGxheW91dCBzaXplIGNoYW5nZWQsIGlu
dmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiBhbGwgY2hpbGRyZW4gdGhhdCBkaWRuJ3QgZ28gdGhy
b3VnaCB0aGUgbGF5b3V0KCkgY29kZSBwYXRoLgotICAgIEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj46
Oml0ZXJhdG9yIGVuZCA9IG5vdGxheW91dGVkT2JqZWN0cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hT
ZXQ8UmVuZGVyT2JqZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbm90bGF5b3V0ZWRPYmplY3RzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaW52YWxpZGF0ZVJlc291cmNlc09mQ2hpbGRy
ZW4oKml0KTsKLX0KLQotYm9vbCBTVkdSZW5kZXJTdXBwb3J0Ojppc092ZXJmbG93SGlkZGVuKGNv
bnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIC8vIFNWRyBkb2Vzbid0IHN1cHBvcnQg
aW5kZXBlbmRlbnQgeC95IG92ZXJmbG93Ci0gICAgQVNTRVJUKG9iamVjdC0+c3R5bGUoKS0+b3Zl
cmZsb3dYKCkgPT0gb2JqZWN0LT5zdHlsZSgpLT5vdmVyZmxvd1koKSk7Ci0KLSAgICAvLyBPU0NS
T0xMIGlzIG5ldmVyIHNldCBmb3IgU1ZHIC0gc2VlIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJl
bmRlclN0eWxlCi0gICAgQVNTRVJUKG9iamVjdC0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgIT0gT1ND
Uk9MTCk7Ci0KLSAgICAvLyBSZW5kZXJTVkdSb290IHNob3VsZCBuZXZlciBxdWVyeSBmb3Igb3Zl
cmZsb3cgc3RhdGUgLSBpdCBzaG91bGQgYWx3YXlzIGNsaXAgaXRzZWxmIHRvIHRoZSBpbml0aWFs
IHZpZXdwb3J0IHNpemUuCi0gICAgQVNTRVJUKCFvYmplY3QtPmlzUm9vdCgpKTsKLQotICAgIHJl
dHVybiBvYmplY3QtPnN0eWxlKCktPm92ZXJmbG93WCgpID09IE9ISURERU47Ci19Ci0KLXZvaWQg
U1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0LCBGbG9hdFJlY3QmIHJlcGFpbnRSZWN0KQotewotICAgIEFT
U0VSVChvYmplY3QpOwotCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgp
OwotICAgIEFTU0VSVChzdHlsZSk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5
bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICBBU1NFUlQoc3ZnU3R5bGUpOwotCi0gICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4ob2JqZWN0KTsK
LSAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRS
ZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QocmVuZGVyZXIpOwotICAgIGlmICghcmVzb3VyY2VzKSB7
Ci0gICAgICAgIGlmIChjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBzdmdTdHlsZS0+c2hhZG93
KCkpCi0gICAgICAgICAgICBzaGFkb3ctPmFkanVzdFJlY3RGb3JTaGFkb3cocmVwYWludFJlY3Qp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAgaWYg
KFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSByZXNvdXJjZXMtPmZpbHRlcigpKQot
ICAgICAgICByZXBhaW50UmVjdCA9IGZpbHRlci0+cmVzb3VyY2VCb3VuZGluZ0JveChyZW5kZXJl
cik7Ci0jZW5kaWYKLQotICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIg
PSByZXNvdXJjZXMtPmNsaXBwZXIoKSkKLSAgICAgICAgcmVwYWludFJlY3QuaW50ZXJzZWN0KGNs
aXBwZXItPnJlc291cmNlQm91bmRpbmdCb3gocmVuZGVyZXIpKTsKLQotICAgIGlmIChSZW5kZXJT
VkdSZXNvdXJjZU1hc2tlciogbWFza2VyID0gcmVzb3VyY2VzLT5tYXNrZXIoKSkKLSAgICAgICAg
cmVwYWludFJlY3QuaW50ZXJzZWN0KG1hc2tlci0+cmVzb3VyY2VCb3VuZGluZ0JveChyZW5kZXJl
cikpOwotCi0gICAgaWYgKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9IHN2Z1N0eWxlLT5zaGFk
b3coKSkKLSAgICAgICAgc2hhZG93LT5hZGp1c3RSZWN0Rm9yU2hhZG93KHJlcGFpbnRSZWN0KTsK
LX0KLQotYm9vbCBTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICBBU1NFUlQob2Jq
ZWN0KTsKLQotICAgIC8vIFdlIGp1c3QgdGFrZSBjbGlwcGVycyBpbnRvIGFjY291bnQgdG8gZGV0
ZXJtaW5lIGlmIGEgcG9pbnQgaXMgb24gdGhlIG5vZGUuIFRoZSBTcGVjaWZpY2F0aW9uIG1heQot
ICAgIC8vIGNoYW5nZSBsYXRlciBhbmQgd2UgYWxzbyBuZWVkIHRvIGNoZWNrIG1hc2tlcnMuCi0g
ICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVz
b3VyY2VzRm9yUmVuZGVyT2JqZWN0KG9iamVjdCk7Ci0gICAgaWYgKCFyZXNvdXJjZXMpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciogY2xp
cHBlciA9IHJlc291cmNlcy0+Y2xpcHBlcigpKQotICAgICAgICByZXR1cm4gY2xpcHBlci0+aGl0
VGVzdENsaXBDb250ZW50KG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKSwgcG9pbnQpOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VT
dHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0eWxl
KiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvbnRl
eHQpOwotICAgIEFTU0VSVChzdHlsZSk7Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgQVNTRVJU
KG9iamVjdC0+bm9kZSgpKTsKLSAgICBBU1NFUlQob2JqZWN0LT5ub2RlKCktPmlzU1ZHRWxlbWVu
dCgpKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdT
dHlsZSgpOwotICAgIEFTU0VSVChzdmdTdHlsZSk7Ci0KLSAgICBTVkdFbGVtZW50KiBsZW5ndGhD
b250ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG9iamVjdC0+bm9kZSgpKTsKLSAgICBj
b250ZXh0LT5zZXRTdHJva2VUaGlja25lc3Moc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUo
bGVuZ3RoQ29udGV4dCkpOwotICAgIGNvbnRleHQtPnNldExpbmVDYXAoc3ZnU3R5bGUtPmNhcFN0
eWxlKCkpOwotICAgIGNvbnRleHQtPnNldExpbmVKb2luKHN2Z1N0eWxlLT5qb2luU3R5bGUoKSk7
Ci0gICAgaWYgKHN2Z1N0eWxlLT5qb2luU3R5bGUoKSA9PSBNaXRlckpvaW4pCi0gICAgICAgIGNv
bnRleHQtPnNldE1pdGVyTGltaXQoc3ZnU3R5bGUtPnN0cm9rZU1pdGVyTGltaXQoKSk7Ci0KLSAg
ICBjb25zdCBWZWN0b3I8U1ZHTGVuZ3RoPiYgZGFzaGVzID0gc3ZnU3R5bGUtPnN0cm9rZURhc2hB
cnJheSgpOwotICAgIGlmIChkYXNoZXMuaXNFbXB0eSgpKQotICAgICAgICBjb250ZXh0LT5zZXRT
dHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIERhc2hBcnJheSBk
YXNoQXJyYXk7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGg+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBkYXNoZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFNWR0xlbmd0aD46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gZGFzaGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgICAgIGRhc2hBcnJheS5hcHBlbmQoKCppdCkudmFsdWUobGVuZ3RoQ29udGV4dCkpOwotCi0g
ICAgICAgIGNvbnRleHQtPnNldExpbmVEYXNoKGRhc2hBcnJheSwgc3ZnU3R5bGUtPnN0cm9rZURh
c2hPZmZzZXQoKS52YWx1ZShsZW5ndGhDb250ZXh0KSk7Ci0gICAgfQotfQotCi19Ci0KLSNlbmRp
ZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaAkocmV2aXNpb24gNzUyNzIp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsODQgKzAsMCBAQAotLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KLSAqICAgICAgICAgICAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KLSAqICAgICAgICAgICAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgU1ZHUmVuZGVyU3VwcG9y
dF9oCi0jZGVmaW5lIFNWR1JlbmRlclN1cHBvcnRfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNs
dWRlICJQYWludEluZm8uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFBv
aW50OwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFzcyBSZW5kZXJC
b3hNb2RlbE9iamVjdDsKLWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclN0eWxlOwot
Y2xhc3MgUmVuZGVyU1ZHUm9vdDsKLWNsYXNzIFRyYW5zZm9ybVN0YXRlOwotCi0vLyBTVkdSZW5k
ZXJlclN1cHBvcnQgaXMgYSBoZWxwZXIgY2xhc3Mgc2hhcmluZyBjb2RlIGJldHdlZW4gYWxsIFNW
RyByZW5kZXJlcnMuCi1jbGFzcyBTVkdSZW5kZXJTdXBwb3J0IHsKLXB1YmxpYzoKLSAgICAvLyBV
c2VkIGJ5IGFsbCBTVkcgcmVuZGVyZXJzIHdobyBhcHBseSBjbGlwL2ZpbHRlci9ldGMuIHJlc291
cmNlcyB0byB0aGUgcmVuZGVyZXIgY29udGVudAotICAgIHN0YXRpYyBib29sIHByZXBhcmVUb1Jl
bmRlclNWR0NvbnRlbnQoUmVuZGVyT2JqZWN0KiwgUGFpbnRJbmZvJik7Ci0gICAgc3RhdGljIHZv
aWQgZmluaXNoUmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqLCBQYWludEluZm8mLCBHcmFw
aGljc0NvbnRleHQqIHNhdmVkQ29udGV4dCk7Ci0KLSAgICAvLyBTaGFyZXMgY2hpbGQgbGF5b3V0
aW5nIGNvZGUgYmV0d2VlbiBSZW5kZXJTVkdSb290L1JlbmRlclNWRyhIaWRkZW4pQ29udGFpbmVy
Ci0gICAgc3RhdGljIHZvaWQgbGF5b3V0Q2hpbGRyZW4oUmVuZGVyT2JqZWN0KiwgYm9vbCBzZWxm
TmVlZHNMYXlvdXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGRldGVybWluaW5nIHdoZXRl
ciBvdmVyZmxvdyBpcyBoaWRkZW4KLSAgICBzdGF0aWMgYm9vbCBpc092ZXJmbG93SGlkZGVuKGNv
bnN0IFJlbmRlck9iamVjdCopOwotCi0gICAgLy8gQ2FsY3VsYXRlcyB0aGUgcmVwYWludFJlY3Qg
aW4gY29tYmluYXRpb24gd2l0aCBmaWx0ZXIsIGNsaXBwZXIgYW5kIG1hc2tlciBpbiBsb2NhbCBj
b29yZGluYXRlcy4KLSAgICBzdGF0aWMgdm9pZCBpbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNv
dXJjZXMoY29uc3QgUmVuZGVyT2JqZWN0KiwgRmxvYXRSZWN0Jik7Ci0KLSAgICAvLyBEZXRlcm1p
bmVzIHdoZXRoZXIgdGhlIHBhc3NlZCBwb2ludCBsaWVzIGluIGEgY2xpcHBpbmcgYXJlYQotICAg
IHN0YXRpYyBib29sIHBvaW50SW5DbGlwcGluZ0FyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgRmxv
YXRQb2ludCYpOwotCi0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94
ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRp
bmdCb3gsIEZsb2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJv
dW5kaW5nQm94KTsKLSAgICBzdGF0aWMgYm9vbCBwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiBsb2NhbFJlcGFpbnRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGxvY2FsVHJhbnNmb3JtLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbyk7Ci0KLSAgICAv
LyBJbXBvcnRhbnQgZnVuY3Rpb25zIHVzZWQgYnkgbmVhcmx5IGFsbCBTVkcgcmVuZGVyZXJzIGNl
bnRyYWxpemluZyBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9ucyAvIHJlcGFpbnQgcmVjdCBjYWxj
dWxhdGlvbnMKLSAgICBzdGF0aWMgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWlu
dChSZW5kZXJPYmplY3QqLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7
Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlck9iamVjdCosIFJl
bmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhl
ZCk7Ci0gICAgc3RhdGljIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmpl
Y3QqLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCB1c2VUcmFu
c2Zvcm1zLCBib29sIGZpeGVkLCBUcmFuc2Zvcm1TdGF0ZSYpOwotCi0gICAgLy8gU2hhcmVkIGJl
dHdlZW4gU1ZHIHJlbmRlcmVycyBhbmQgcmVzb3VyY2VzLgotICAgIHN0YXRpYyB2b2lkIGFwcGx5
U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgUmVuZGVyU3R5bGUq
LCBjb25zdCBSZW5kZXJPYmplY3QqKTsKLQotICAgIC8vIEZJWE1FOiBUaGVzZSBtZXRob2RzIGRv
IG5vdCBiZWxvbmcgaGVyZS4KLSAgICBzdGF0aWMgY29uc3QgUmVuZGVyU1ZHUm9vdCogZmluZFRy
ZWVSb290T2JqZWN0KGNvbnN0IFJlbmRlck9iamVjdCogc3RhcnQpOwotCi1wcml2YXRlOgotICAg
IC8vIFRoaXMgY2xhc3MgaXMgbm90IGNvbnN0cnVjdGFibGUuCi0gICAgU1ZHUmVuZGVyU3VwcG9y
dCgpOwotICAgIH5TVkdSZW5kZXJTdXBwb3J0KCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQotI2VuZGlmIC8vIFNWR1JlbmRlclN1cHBvcnRf
aApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlz
aW9uIDc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNzQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
ICAgICAgICAgIChDKSAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiAgICAgICAgICAg
KEMpIDIwMDYgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1
ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIK
LSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCi0jaW5j
bHVkZSAiTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiTm9kZVJlbmRlclN0
eWxlLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotI2luY2x1ZGUgIlBhdHRlcm5BdHRyaWJ1dGVzLmgi
Ci0jaW5jbHVkZSAiUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiUmVuZGVy
SW1hZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKLSNpbmNsdWRlICJSZW5k
ZXJTVkdHcmFkaWVudFN0b3AuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdJbWFnZS5oIgotI2luY2x1
ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCi0j
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Lmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oIgotI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCIKLSNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgotI2luY2x1
ZGUgIlJlbmRlclNWR1RleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5j
bHVkZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0VsbGlwc2VFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgotI2luY2x1ZGUgIlNWR0xpbmVFbGVtZW50
LmgiCi0jaW5jbHVkZSAiU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKLSNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1BhdGhQ
YXJzZXJGYWN0b3J5LmgiCi0jaW5jbHVkZSAiU1ZHUGF0dGVybkVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJTVkdQb2ludExpc3QuaCIKLSNpbmNsdWRlICJTVkdQb2x5RWxlbWVudC5oIgotI2luY2x1ZGUg
IlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1JlY3RFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiU1ZHUm9vdElubGluZUJveC5oIgotI2luY2x1ZGUgIlNWR1N0b3BFbGVtZW50
LmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotCi0jaW5jbHVkZSA8bWF0aC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8qKiBjbGFzcyArIGlvbWFuaXAgdG8gaGVscCBzdHJl
YW1pbmcgbGlzdCBzZXBhcmF0b3JzLCBpLmUuICIsICIgaW4gc3RyaW5nICJhLCBiLCBjLCBkIgot
ICogQ2FuIGJlIHVzZWQgaW4gY2FzZXMgd2hlcmUgeW91IGRvbid0IGtub3cgd2hpY2ggaXRlbSBp
biB0aGUgbGlzdCBpcyB0aGUgZmlyc3QKLSAqIG9uZSB0byBiZSBwcmludGVkLCBidXQgc3RpbGwg
d2FudCB0byBhdm9pZCBzdHJpbmdzIGxpa2UgIiwgYiwgYyIuCi0gKi8KLWNsYXNzIFRleHRTdHJl
YW1TZXBhcmF0b3IgewotcHVibGljOgotICAgIFRleHRTdHJlYW1TZXBhcmF0b3IoY29uc3QgU3Ry
aW5nJiBzKQotICAgICAgICA6IG1fc2VwYXJhdG9yKHMpCi0gICAgICAgICwgbV9uZWVkVG9TZXBh
cmF0ZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGZyaWVuZCBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBUZXh0U3RyZWFtU2VwYXJhdG9yJik7Ci0KLSAg
ICBTdHJpbmcgbV9zZXBhcmF0b3I7Ci0gICAgYm9vbCBtX25lZWRUb1NlcGFyYXRlOwotfTsKLQot
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVGV4dFN0cmVhbVNlcGFyYXRv
ciYgc2VwKQotewotICAgIGlmIChzZXAubV9uZWVkVG9TZXBhcmF0ZSkKLSAgICAgICAgdHMgPDwg
c2VwLm1fc2VwYXJhdG9yOwotICAgIGVsc2UKLSAgICAgICAgc2VwLm1fbmVlZFRvU2VwYXJhdGUg
PSB0cnVlOwotICAgIHJldHVybiB0czsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBl
Pgotc3RhdGljIHZvaWQgd3JpdGVOYW1lVmFsdWVQYWlyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBj
aGFyKiBuYW1lLCBWYWx1ZVR5cGUgdmFsdWUpCi17Ci0gICAgdHMgPDwgIiBbIiA8PCBuYW1lIDw8
ICI9IiA8PCB2YWx1ZSA8PCAiXSI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZT4K
LXN0YXRpYyB2b2lkIHdyaXRlTmFtZUFuZFF1b3RlZFZhbHVlKFRleHRTdHJlYW0mIHRzLCBjb25z
dCBjaGFyKiBuYW1lLCBWYWx1ZVR5cGUgdmFsdWUpCi17Ci0gICAgdHMgPDwgIiBbIiA8PCBuYW1l
IDw8ICI9XCIiIDw8IHZhbHVlIDw8ICJcIl0iOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZUlmTm90
RW1wdHkoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHdyaXRlTmFtZVZhbHVl
UGFpcih0cywgbmFtZSwgdmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+
Ci1zdGF0aWMgdm9pZCB3cml0ZUlmTm90RGVmYXVsdChUZXh0U3RyZWFtJiB0cywgY29uc3QgY2hh
ciogbmFtZSwgVmFsdWVUeXBlIHZhbHVlLCBWYWx1ZVR5cGUgZGVmYXVsdFZhbHVlKQotewotICAg
IGlmICh2YWx1ZSAhPSBkZWZhdWx0VmFsdWUpCi0gICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0
cywgbmFtZSwgdmFsdWUpOwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGbG9hdFJlY3QgJnIpCi17Ci0gICAgdHMgPDwgImF0ICgiOyAKLSAgICBpZiAo
aGFzRnJhY3Rpb25zKHIueCgpKSkgCi0gICAgICAgIHRzIDw8IHIueCgpOwotICAgIGVsc2UgCi0g
ICAgICAgIHRzIDw8IGludChyLngoKSk7Ci0gICAgdHMgPDwgIiwiOwotICAgIGlmIChoYXNGcmFj
dGlvbnMoci55KCkpKSAKLSAgICAgICAgdHMgPDwgci55KCk7Ci0gICAgZWxzZSAKLSAgICAgICAg
dHMgPDwgaW50KHIueSgpKTsKLSAgICB0cyA8PCAiKSBzaXplICI7Ci0gICAgaWYgKGhhc0ZyYWN0
aW9ucyhyLndpZHRoKCkpKSAKLSAgICAgICAgdHMgPDwgci53aWR0aCgpOyAKLSAgICBlbHNlIAot
ICAgICAgICB0cyA8PCBpbnQoci53aWR0aCgpKTsgCi0gICAgdHMgPDwgIngiOwotICAgIGlmICho
YXNGcmFjdGlvbnMoci5oZWlnaHQoKSkpIAotICAgICAgICB0cyA8PCByLmhlaWdodCgpOwotICAg
IGVsc2UgCi0gICAgICAgIHRzIDw8IGludChyLmhlaWdodCgpKTsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIGlmICh0cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQot
ICAgICAgICB0cyA8PCAiaWRlbnRpdHkiOwotICAgIGVsc2UKLSAgICAgICAgdHMgPDwgInttPSgo
IgotICAgICAgICAgICA8PCB0cmFuc2Zvcm0uYSgpIDw8ICIsIiA8PCB0cmFuc2Zvcm0uYigpCi0g
ICAgICAgICAgIDw8ICIpKCIKLSAgICAgICAgICAgPDwgdHJhbnNmb3JtLmMoKSA8PCAiLCIgPDwg
dHJhbnNmb3JtLmQoKQotICAgICAgICAgICA8PCAiKSkgdD0oIgotICAgICAgICAgICA8PCB0cmFu
c2Zvcm0uZSgpIDw8ICIsIiA8PCB0cmFuc2Zvcm0uZigpCi0gICAgICAgICAgIDw8ICIpfSI7Ci0K
LSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBXaW5kUnVsZSBydWxlKQotewotICAgIHN3aXRjaCAocnVsZSkgewot
ICAgIGNhc2UgUlVMRV9OT05aRVJPOgotICAgICAgICB0cyA8PCAiTk9OLVpFUk8iOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFJVTEVfRVZFTk9ERDoKLSAgICAgICAgdHMgPDwgIkVWRU4tT0RE
IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRzOwotfQotCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU1ZHVW5pdFR5cGVz
OjpTVkdVbml0VHlwZSYgdW5pdFR5cGUpCi17Ci0gICAgc3dpdGNoICh1bml0VHlwZSkgewotICAg
IGNhc2UgU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX1VOS05PV046Ci0gICAgICAgIHRzIDw8
ICJ1bmtub3duIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdVbml0VHlwZXM6OlNWR19V
TklUX1RZUEVfVVNFUlNQQUNFT05VU0U6Ci0gICAgICAgIHRzIDw8ICJ1c2VyU3BhY2VPblVzZSI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YOgotICAgICAgICB0cyA8PCAib2JqZWN0Qm91bmRpbmdCb3giOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTVkdNYXJrZXJFbGVtZW50OjpT
VkdNYXJrZXJVbml0c1R5cGUmIG1hcmtlclVuaXQpCi17Ci0gICAgc3dpdGNoIChtYXJrZXJVbml0
KSB7Ci0gICAgY2FzZSBTVkdNYXJrZXJFbGVtZW50OjpTVkdfTUFSS0VSVU5JVFNfVU5LTk9XTjoK
LSAgICAgICAgdHMgPDwgInVua25vd24iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR01h
cmtlckVsZW1lbnQ6OlNWR19NQVJLRVJVTklUU19VU0VSU1BBQ0VPTlVTRToKLSAgICAgICAgdHMg
PDwgInVzZXJTcGFjZU9uVXNlIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdNYXJrZXJF
bGVtZW50OjpTVkdfTUFSS0VSVU5JVFNfU1RST0tFV0lEVEg6Ci0gICAgICAgIHRzIDw8ICJzdHJv
a2VXaWR0aCI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0czsKLX0KLQot
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3ImIGMpCi17
Ci0gICAgcmV0dXJuIHRzIDw8IGMubmFtZSgpOwotfQotCi0vLyBGSVhNRTogTWF5YmUgdGhpcyBz
aG91bGQgYmUgaW4gS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcAotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERhc2hBcnJheSYgYSkKLXsKLSAgICB0
cyA8PCAieyI7Ci0gICAgRGFzaEFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhLmVuZCgpOwot
ICAgIGZvciAoRGFzaEFycmF5Ojpjb25zdF9pdGVyYXRvciBpdCA9IGEuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdCAhPSBhLmJlZ2luKCkpCi0gICAgICAgICAgICB0
cyA8PCAiLCAiOwotICAgICAgICB0cyA8PCAqaXQ7Ci0gICAgfQotICAgIHRzIDw8ICJ9IjsKLSAg
ICByZXR1cm4gdHM7Ci19Ci0KLS8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBiZSBpbiBHcmFw
aGljc1R5cGVzLmNwcAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIExpbmVDYXAgc3R5bGUpCi17Ci0gICAgc3dpdGNoIChzdHlsZSkgewotICAgICAgICBjYXNl
IEJ1dHRDYXA6Ci0gICAgICAgICAgICB0cyA8PCAiQlVUVCI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBSb3VuZENhcDoKLSAgICAgICAgICAgIHRzIDw8ICJST1VORCI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTcXVhcmVDYXA6Ci0gICAgICAgICAgICB0cyA8
PCAiU1FVQVJFIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19
Ci0KLS8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBiZSBpbiBHcmFwaGljc1R5cGVzLmNwcAot
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVKb2luIHN0
eWxlKQotewotICAgIHN3aXRjaCAoc3R5bGUpIHsKLSAgICAgICAgY2FzZSBNaXRlckpvaW46Ci0g
ICAgICAgICAgICB0cyA8PCAiTUlURVIiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgUm91bmRKb2luOgotICAgICAgICAgICAgdHMgPDwgIlJPVU5EIjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEJldmVsSm9pbjoKLSAgICAgICAgICAgIHRzIDw8ICJCRVZFTCI7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOwotfQotCi0vLyBGSVhN
RTogTWF5YmUgdGhpcyBzaG91bGQgYmUgaW4gR3JhZGllbnQuY3BwCi1zdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgR3JhZGllbnRTcHJlYWRNZXRob2QgbW9kZSkK
LXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIFNwcmVhZE1ldGhvZFBhZDoKLSAgICAg
ICAgdHMgPDwgIlBBRCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVw
ZWF0OgotICAgICAgICB0cyA8PCAiUkVQRUFUIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBT
cHJlYWRNZXRob2RSZWZsZWN0OgotICAgICAgICB0cyA8PCAiUkVGTEVDVCI7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0czsKLX0KLQotc3RhdGljIHZvaWQgd3JpdGVTVkdQ
YWludGluZ1Jlc291cmNlKFRleHRTdHJlYW0mIHRzLCBSZW5kZXJTVkdSZXNvdXJjZSogcmVzb3Vy
Y2UpCi17Ci0gICAgaWYgKHJlc291cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBTb2xpZENvbG9yUmVz
b3VyY2VUeXBlKSB7Ci0gICAgICAgIHRzIDw8ICJbdHlwZT1TT0xJRF0gW2NvbG9yPSIgPDwgc3Rh
dGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKj4ocmVzb3VyY2UpLT5jb2xvcigp
IDw8ICJdIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEFsbCBvdGhlciByZXNv
dXJjZXMgZGVyaXZlIGZyb20gUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIKLSAgICBSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lciogY29udGFpbmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIqPihyZXNvdXJjZSk7Ci0gICAgTm9kZSogbm9kZSA9IGNvbnRhaW5lci0+
bm9kZSgpOwotICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+aXNTVkdFbGVtZW50
KCkpOwotCi0gICAgaWYgKHJlc291cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBQYXR0ZXJuUmVzb3Vy
Y2VUeXBlKQotICAgICAgICB0cyA8PCAiW3R5cGU9UEFUVEVSTl0iOwotICAgIGVsc2UgaWYgKHJl
c291cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBMaW5lYXJHcmFkaWVudFJlc291cmNlVHlwZSkKLSAg
ICAgICAgdHMgPDwgIlt0eXBlPUxJTkVBUi1HUkFESUVOVF0iOwotICAgIGVsc2UgaWYgKHJlc291
cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBSYWRpYWxHcmFkaWVudFJlc291cmNlVHlwZSkKLSAgICAg
ICAgdHMgPDwgIlt0eXBlPVJBRElBTC1HUkFESUVOVF0iOwotCi0gICAgdHMgPDwgIiBbaWQ9XCIi
IDw8IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKS0+Z2V0SWRBdHRyaWJ1dGUoKSA8PCAi
XCJdIjsKLX0KLQotc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvYmplY3QpCi17Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0g
b2JqZWN0LnN0eWxlKCk7Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5
bGUtPnN2Z1N0eWxlKCk7Ci0KLSAgICBpZiAoIW9iamVjdC5sb2NhbFRyYW5zZm9ybSgpLmlzSWRl
bnRpdHkoKSkKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAidHJhbnNmb3JtIiwgb2Jq
ZWN0LmxvY2FsVHJhbnNmb3JtKCkpOwotICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAiaW1hZ2Ug
cmVuZGVyaW5nIiwgc3ZnU3R5bGUtPmltYWdlUmVuZGVyaW5nKCksIFNWR1JlbmRlclN0eWxlOjpp
bml0aWFsSW1hZ2VSZW5kZXJpbmcoKSk7Ci0gICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFj
aXR5Iiwgc3R5bGUtPm9wYWNpdHkoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxPcGFjaXR5KCkpOwot
ICAgIGlmIChvYmplY3QuaXNTVkdQYXRoKCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyU1ZHUGF0
aCYgcGF0aCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1BhdGgmPihvYmplY3QpOwotICAg
ICAgICBBU1NFUlQocGF0aC5ub2RlKCkpOwotICAgICAgICBBU1NFUlQocGF0aC5ub2RlKCktPmlz
U1ZHRWxlbWVudCgpKTsKLQotICAgICAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgICAgICBp
ZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdS
ZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PFJlbmRlclNWR1BhdGgq
PigmcGF0aCksIHBhdGguc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpIHsKLSAgICAgICAgICAgIFRl
eHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwotICAgICAgICAgICAgdHMgPDwgIiBbc3Ryb2tlPXsi
IDw8IHM7Ci0gICAgICAgICAgICB3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UodHMsIHN0cm9rZVBh
aW50aW5nUmVzb3VyY2UpOwotCi0gICAgICAgICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhdGgubm9kZSgpKTsKLSAgICAgICAgICAgIGRvdWJsZSBk
YXNoT2Zmc2V0ID0gc3ZnU3R5bGUtPnN0cm9rZURhc2hPZmZzZXQoKS52YWx1ZShlbGVtZW50KTsK
LSAgICAgICAgICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgp
LnZhbHVlKGVsZW1lbnQpOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD4mIGRh
c2hlcyA9IHN2Z1N0eWxlLT5zdHJva2VEYXNoQXJyYXkoKTsKLQotICAgICAgICAgICAgRGFzaEFy
cmF5IGRhc2hBcnJheTsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGg+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBkYXNoZXMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKFZlY3RvcjxT
VkdMZW5ndGg+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhc2hlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICAgICAgZGFzaEFycmF5LmFwcGVuZCgoKml0KS52YWx1ZShlbGVt
ZW50KSk7Ci0KLSAgICAgICAgICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAib3BhY2l0eSIsIHN2
Z1N0eWxlLT5zdHJva2VPcGFjaXR5KCksIDEuMGYpOwotICAgICAgICAgICAgd3JpdGVJZk5vdERl
ZmF1bHQodHMsICJzdHJva2Ugd2lkdGgiLCBzdHJva2VXaWR0aCwgMS4wKTsKLSAgICAgICAgICAg
IHdyaXRlSWZOb3REZWZhdWx0KHRzLCAibWl0ZXIgbGltaXQiLCBzdmdTdHlsZS0+c3Ryb2tlTWl0
ZXJMaW1pdCgpLCA0LjBmKTsKLSAgICAgICAgICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAibGlu
ZSBjYXAiLCBzdmdTdHlsZS0+Y2FwU3R5bGUoKSwgQnV0dENhcCk7Ci0gICAgICAgICAgICB3cml0
ZUlmTm90RGVmYXVsdCh0cywgImxpbmUgam9pbiIsIHN2Z1N0eWxlLT5qb2luU3R5bGUoKSwgTWl0
ZXJKb2luKTsKLSAgICAgICAgICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAiZGFzaCBvZmZzZXQi
LCBkYXNoT2Zmc2V0LCAwLjApOwotICAgICAgICAgICAgaWYgKCFkYXNoQXJyYXkuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImRhc2ggYXJyYXkiLCBk
YXNoQXJyYXkpOwotCi0gICAgICAgICAgICB0cyA8PCAifV0iOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNW
R1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PFJlbmRlclNWR1BhdGgq
PigmcGF0aCksIHBhdGguc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpIHsKLSAgICAgICAgICAgIFRl
eHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwotICAgICAgICAgICAgdHMgPDwgIiBbZmlsbD17IiA8
PCBzOwotICAgICAgICAgICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNlKHRzLCBmaWxsUGFpbnRp
bmdSZXNvdXJjZSk7Ci0KLSAgICAgICAgICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAib3BhY2l0
eSIsIHN2Z1N0eWxlLT5maWxsT3BhY2l0eSgpLCAxLjBmKTsKLSAgICAgICAgICAgIHdyaXRlSWZO
b3REZWZhdWx0KHRzLCAiZmlsbCBydWxlIiwgc3ZnU3R5bGUtPmZpbGxSdWxlKCksIFJVTEVfTk9O
WkVSTyk7Ci0gICAgICAgICAgICB0cyA8PCAifV0iOwotICAgICAgICB9Ci0gICAgICAgIHdyaXRl
SWZOb3REZWZhdWx0KHRzLCAiY2xpcCBydWxlIiwgc3ZnU3R5bGUtPmNsaXBSdWxlKCksIFJVTEVf
Tk9OWkVSTyk7Ci0gICAgfQotCi0gICAgd3JpdGVJZk5vdEVtcHR5KHRzLCAic3RhcnQgbWFya2Vy
Iiwgc3ZnU3R5bGUtPm1hcmtlclN0YXJ0UmVzb3VyY2UoKSk7Ci0gICAgd3JpdGVJZk5vdEVtcHR5
KHRzLCAibWlkZGxlIG1hcmtlciIsIHN2Z1N0eWxlLT5tYXJrZXJNaWRSZXNvdXJjZSgpKTsKLSAg
ICB3cml0ZUlmTm90RW1wdHkodHMsICJlbmQgbWFya2VyIiwgc3ZnU3R5bGUtPm1hcmtlckVuZFJl
c291cmNlKCkpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgd3JpdGVQb3NpdGlvbkFuZFN0eWxl
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKLXsKLSAgICB0cyA8
PCAiICIgPDwgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QmPihvYmplY3QpLmFic29sdXRlQ2xpcHBl
ZE92ZXJmbG93UmVjdCgpOwotICAgIHdyaXRlU3R5bGUodHMsIG9iamVjdCk7Ci0gICAgcmV0dXJu
IHRzOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgUmVuZGVyU1ZHUGF0aCYgcGF0aCkKLXsKLSAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUo
dHMsIHBhdGgpOwotCi0gICAgQVNTRVJUKHBhdGgubm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7Ci0g
ICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXRo
Lm5vZGUoKSk7Ci0KLSAgICBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmVj
dFRhZykpIHsKLSAgICAgICAgU1ZHUmVjdEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdSZWN0RWxlbWVudCo+KHN2Z0VsZW1lbnQpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIo
dHMsICJ4IiwgZWxlbWVudC0+eCgpLnZhbHVlKGVsZW1lbnQpKTsKLSAgICAgICAgd3JpdGVOYW1l
VmFsdWVQYWlyKHRzLCAieSIsIGVsZW1lbnQtPnkoKS52YWx1ZShlbGVtZW50KSk7Ci0gICAgICAg
IHdyaXRlTmFtZVZhbHVlUGFpcih0cywgIndpZHRoIiwgZWxlbWVudC0+d2lkdGgoKS52YWx1ZShl
bGVtZW50KSk7Ci0gICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImhlaWdodCIsIGVsZW1l
bnQtPmhlaWdodCgpLnZhbHVlKGVsZW1lbnQpKTsKLSAgICB9IGVsc2UgaWYgKHN2Z0VsZW1lbnQt
Pmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmxpbmVUYWcpKSB7Ci0gICAgICAgIFNWR0xpbmVFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHTGluZUVsZW1lbnQqPihzdmdFbGVtZW50KTsKLSAg
ICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAieDEiLCBlbGVtZW50LT54MSgpLnZhbHVlKGVs
ZW1lbnQpKTsKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAieTEiLCBlbGVtZW50LT55
MSgpLnZhbHVlKGVsZW1lbnQpKTsKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAieDIi
LCBlbGVtZW50LT54MigpLnZhbHVlKGVsZW1lbnQpKTsKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQ
YWlyKHRzLCAieTIiLCBlbGVtZW50LT55MigpLnZhbHVlKGVsZW1lbnQpKTsKLSAgICB9IGVsc2Ug
aWYgKHN2Z0VsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmVsbGlwc2VUYWcpKSB7Ci0gICAg
ICAgIFNWR0VsbGlwc2VFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxsaXBzZUVs
ZW1lbnQqPihzdmdFbGVtZW50KTsKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiY3gi
LCBlbGVtZW50LT5jeCgpLnZhbHVlKGVsZW1lbnQpKTsKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQ
YWlyKHRzLCAiY3kiLCBlbGVtZW50LT5jeSgpLnZhbHVlKGVsZW1lbnQpKTsKLSAgICAgICAgd3Jp
dGVOYW1lVmFsdWVQYWlyKHRzLCAicngiLCBlbGVtZW50LT5yeCgpLnZhbHVlKGVsZW1lbnQpKTsK
LSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAicnkiLCBlbGVtZW50LT5yeSgpLnZhbHVl
KGVsZW1lbnQpKTsKLSAgICB9IGVsc2UgaWYgKHN2Z0VsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OmNpcmNsZVRhZykpIHsKLSAgICAgICAgU1ZHQ2lyY2xlRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PFNWR0NpcmNsZUVsZW1lbnQqPihzdmdFbGVtZW50KTsKLSAgICAgICAgd3JpdGVO
YW1lVmFsdWVQYWlyKHRzLCAiY3giLCBlbGVtZW50LT5jeCgpLnZhbHVlKGVsZW1lbnQpKTsKLSAg
ICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiY3kiLCBlbGVtZW50LT5jeSgpLnZhbHVlKGVs
ZW1lbnQpKTsKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiciIsIGVsZW1lbnQtPnIo
KS52YWx1ZShlbGVtZW50KSk7Ci0gICAgfSBlbHNlIGlmIChzdmdFbGVtZW50LT5oYXNUYWdOYW1l
KFNWR05hbWVzOjpwb2x5Z29uVGFnKSB8fCBzdmdFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVz
Ojpwb2x5bGluZVRhZykpIHsKLSAgICAgICAgU1ZHUG9seUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxTVkdQb2x5RWxlbWVudCo+KHN2Z0VsZW1lbnQpOwotICAgICAgICB3cml0ZU5hbWVB
bmRRdW90ZWRWYWx1ZSh0cywgInBvaW50cyIsIGVsZW1lbnQtPnBvaW50TGlzdCgpLnZhbHVlQXNT
dHJpbmcoKSk7Ci0gICAgfSBlbHNlIGlmIChzdmdFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVz
OjpwYXRoVGFnKSkgewotICAgICAgICBTVkdQYXRoRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR1BhdGhFbGVtZW50Kj4oc3ZnRWxlbWVudCk7Ci0gICAgICAgIFN0cmluZyBwYXRoU3Ry
aW5nOwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN3aXRjaCB0byBVbmFsdGVyZWRQYXJz
aW5nIGhlcmUgLSB0aGlzIHdpbGwgYWZmZWN0IHRoZSBwYXRoIGR1bXBpbmcgb3V0cHV0IG9mIGRv
emVucyBvZiB0ZXN0cy4KLSAgICAgICAgU1ZHUGF0aFBhcnNlckZhY3Rvcnk6OnNlbGYoKS0+YnVp
bGRTdHJpbmdGcm9tQnl0ZVN0cmVhbShlbGVtZW50LT5wYXRoQnl0ZVN0cmVhbSgpLCBwYXRoU3Ry
aW5nLCBOb3JtYWxpemVkUGFyc2luZyk7Ci0gICAgICAgIHdyaXRlTmFtZUFuZFF1b3RlZFZhbHVl
KHRzLCAiZGF0YSIsIHBhdGhTdHJpbmcpOwotICAgIH0gZWxzZQotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdSb290JiByb290KQotewotICAg
IHJldHVybiB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMsIHJvb3QpOwotfQotCi1zdGF0aWMgdm9p
ZCB3cml0ZVJlbmRlclNWR1RleHRCb3goVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlckJsb2Nr
JiB0ZXh0KQotewotICAgIFNWR1Jvb3RJbmxpbmVCb3gqIGJveCA9IHN0YXRpY19jYXN0PFNWR1Jv
b3RJbmxpbmVCb3gqPih0ZXh0LmZpcnN0Um9vdEJveCgpKTsKLSAgICBpZiAoIWJveCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdHMgPDwgIiBhdCAoIiA8PCB0ZXh0LngoKSA8PCAiLCIgPDwgdGV4
dC55KCkgPDwgIikgc2l6ZSAiIDw8IGJveC0+bG9naWNhbFdpZHRoKCkgPDwgIngiIDw8IGJveC0+
bG9naWNhbEhlaWdodCgpOwotICAgIAotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBoYWNrLCBv
bmNlIHRoZSBuZXcgdGV4dCBsYXlvdXQgZW5naW5lIGlzIGNvbXBsZXRseSBsYW5kZWQuIFdlIHdh
bnQgdG8gcHJlc2VydmUgdGhlIG9sZCBsYXlvdXQgdGVzdCByZXN1bHRzIGZvciBub3cuCi0gICAg
dHMgPDwgIiBjb250YWlucyAxIGNodW5rKHMpIjsKLQotICAgIGlmICh0ZXh0LnBhcmVudCgpICYm
ICh0ZXh0LnBhcmVudCgpLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlDb2xvcikgIT0gdGV4dC5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlDb2xvcikpKQotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJjb2xvciIsIHRleHQu
c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLm5hbWUoKSk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZVNWR0lubGluZVRleHRCb3goVGV4dFN0cmVh
bSYgdHMsIFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGludCBpbmRlbnQpCi17Ci0gICAgVmVj
dG9yPFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50cyA9IHRleHRCb3gtPnRleHRGcmFnbWVudHMo
KTsKLSAgICBpZiAoZnJhZ21lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0
KHRleHRCb3gtPnRleHRSZW5kZXJlcigpKTsKLSAgICBBU1NFUlQodGV4dFJlbmRlcmVyKTsKLQot
ICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHRleHRSZW5kZXJlci0+c3R5bGUo
KS0+c3ZnU3R5bGUoKTsKLSAgICBTdHJpbmcgdGV4dCA9IHRleHRCb3gtPnRleHRSZW5kZXJlcigp
LT50ZXh0KCk7Ci0KLSAgICB1bnNpZ25lZCBmcmFnbWVudHNTaXplID0gZnJhZ21lbnRzLnNpemUo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnRzU2l6ZTsgKytpKSB7Ci0g
ICAgICAgIFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVudHMuYXQoaSk7Ci0gICAg
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKLQotICAgICAgICB1bnNpZ25lZCBzdGFy
dE9mZnNldCA9IGZyYWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldDsKLSAgICAgICAgdW5zaWduZWQg
ZW5kT2Zmc2V0ID0gZnJhZ21lbnQucG9zaXRpb25MaXN0T2Zmc2V0ICsgZnJhZ21lbnQubGVuZ3Ro
OwotCi0gICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBoYWNrLCBvbmNlIHRoZSBuZXcgdGV4
dCBsYXlvdXQgZW5naW5lIGlzIGNvbXBsZXRseSBsYW5kZWQuIFdlIHdhbnQgdG8gcHJlc2VydmUg
dGhlIG9sZCBsYXlvdXQgdGVzdCByZXN1bHRzIGZvciBub3cuCi0gICAgICAgIHRzIDw8ICJjaHVu
ayAxICI7Ci0gICAgICAgIEVUZXh0QW5jaG9yIGFuY2hvciA9IHN2Z1N0eWxlLT50ZXh0QW5jaG9y
KCk7Ci0gICAgICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBzdmdTdHlsZS0+aXNWZXJ0aWNhbFdy
aXRpbmdNb2RlKCk7Ci0gICAgICAgIGlmIChhbmNob3IgPT0gVEFfTUlERExFKSB7Ci0gICAgICAg
ICAgICB0cyA8PCAiKG1pZGRsZSBhbmNob3IiOwotICAgICAgICAgICAgaWYgKGlzVmVydGljYWxU
ZXh0KQotICAgICAgICAgICAgICAgIHRzIDw8ICIsIHZlcnRpY2FsIjsKLSAgICAgICAgICAgIHRz
IDw8ICIpICI7Ci0gICAgICAgIH0gZWxzZSBpZiAoYW5jaG9yID09IFRBX0VORCkgewotICAgICAg
ICAgICAgdHMgPDwgIihlbmQgYW5jaG9yIjsKLSAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4
dCkKLSAgICAgICAgICAgICAgICB0cyA8PCAiLCB2ZXJ0aWNhbCI7Ci0gICAgICAgICAgICB0cyA8
PCAiKSAiOwotICAgICAgICB9IGVsc2UgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAg
dHMgPDwgIih2ZXJ0aWNhbCkgIjsKLSAgICAgICAgc3RhcnRPZmZzZXQgLT0gdGV4dEJveC0+c3Rh
cnQoKTsKLSAgICAgICAgZW5kT2Zmc2V0IC09IHRleHRCb3gtPnN0YXJ0KCk7Ci0gICAgICAgIC8v
IDwvaGFjaz4KLQotICAgICAgICB0cyA8PCAidGV4dCBydW4gIiA8PCBpICsgMSA8PCAiIGF0ICgi
IDw8IGZyYWdtZW50LnggPDwgIiwiIDw8IGZyYWdtZW50LnkgPDwgIikiOwotICAgICAgICB0cyA8
PCAiIHN0YXJ0T2Zmc2V0ICIgPDwgc3RhcnRPZmZzZXQgPDwgIiBlbmRPZmZzZXQgIiA8PCBlbmRP
ZmZzZXQ7Ci0gICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgIHRzIDw8ICIg
aGVpZ2h0ICIgPDwgZnJhZ21lbnQuaGVpZ2h0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0
cyA8PCAiIHdpZHRoICIgPDwgZnJhZ21lbnQud2lkdGg7Ci0KLSAgICAgICAgaWYgKCF0ZXh0Qm94
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgfHwgdGV4dEJveC0+bV9kaXJPdmVycmlkZSkgewot
ICAgICAgICAgICAgdHMgPDwgKHRleHRCb3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/ICIg
TFRSIiA6ICIgUlRMIik7Ci0gICAgICAgICAgICBpZiAodGV4dEJveC0+bV9kaXJPdmVycmlkZSkK
LSAgICAgICAgICAgICAgICB0cyA8PCAiIG92ZXJyaWRlIjsKLSAgICAgICAgfQotCi0gICAgICAg
IHRzIDw8ICI6ICIgPDwgcXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKHRleHQuc3Vic3RyaW5n
KGZyYWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldCwgZnJhZ21lbnQubGVuZ3RoKSkgPDwgIlxuIjsK
LSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZVNWR0lubGluZVRleHRCb3hlcyhU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyVGV4dCYgdGV4dCwgaW50IGluZGVudCkKLXsKLSAg
ICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IHRleHQuZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94
ID0gYm94LT5uZXh0VGV4dEJveCgpKQotICAgICAgICB3cml0ZVNWR0lubGluZVRleHRCb3godHMs
IHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihib3gpLCBpbmRlbnQpOwotfQotCi1zdGF0
aWMgdm9pZCB3cml0ZVN0YW5kYXJkUHJlZml4KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJP
YmplY3QmIG9iamVjdCwgaW50IGluZGVudCkKLXsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50
KTsKLSAgICB0cyA8PCBvYmplY3QucmVuZGVyTmFtZSgpOwotCi0gICAgaWYgKG9iamVjdC5ub2Rl
KCkpCi0gICAgICAgIHRzIDw8ICIgeyIgPDwgb2JqZWN0Lm5vZGUoKS0+bm9kZU5hbWUoKSA8PCAi
fSI7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlQ2hpbGRyZW4oVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFJlbmRlck9iamVjdCYgb2JqZWN0LCBpbnQgaW5kZW50KQotewotICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IG9iamVjdC5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKQotICAgICAgICB3cml0ZSh0cywgKmNoaWxkLCBpbmRlbnQgKyAxKTsKLX0K
LQotc3RhdGljIGlubGluZSBTdHJpbmcgYm91bmRpbmdCb3hNb2RlU3RyaW5nKGJvb2wgYm91bmRp
bmdCb3hNb2RlKQotewotICAgIHJldHVybiBib3VuZGluZ0JveE1vZGUgPyAib2JqZWN0Qm91bmRp
bmdCb3giIDogInVzZXJTcGFjZU9uVXNlIjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRl
Q29tbW9uR3JhZGllbnRQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBHcmFkaWVudFNwcmVhZE1l
dGhvZCBzcHJlYWRNZXRob2QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRUcmFuc2Zv
cm0sIGJvb2wgYm91bmRpbmdCb3hNb2RlKQotewotICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywg
ImdyYWRpZW50VW5pdHMiLCBib3VuZGluZ0JveE1vZGVTdHJpbmcoYm91bmRpbmdCb3hNb2RlKSk7
Ci0KLSAgICBpZiAoc3ByZWFkTWV0aG9kICE9IFNwcmVhZE1ldGhvZFBhZCkKLSAgICAgICAgdHMg
PDwgIiBbc3ByZWFkTWV0aG9kPSIgPDwgc3ByZWFkTWV0aG9kIDw8ICJdIjsKLQotICAgIGlmICgh
Z3JhZGllbnRUcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQotICAgICAgICB0cyA8PCAiIFtncmFkaWVu
dFRyYW5zZm9ybT0iIDw8IGdyYWRpZW50VHJhbnNmb3JtIDw8ICJdIjsKLX0KLQotdm9pZCB3cml0
ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3Qm
IG9iamVjdCwgaW50IGluZGVudCkKLXsKLSAgICB3cml0ZVN0YW5kYXJkUHJlZml4KHRzLCBvYmpl
Y3QsIGluZGVudCk7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG9iamVjdC5ub2RlKCkpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWQgPSBlbGVtZW50
LT5nZXRJZEF0dHJpYnV0ZSgpOwotICAgIHdyaXRlTmFtZUFuZFF1b3RlZFZhbHVlKHRzLCAiaWQi
LCBpZCk7ICAgIAotCi0gICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHJlc291cmNlID0g
Y29uc3RfY2FzdDxSZW5kZXJPYmplY3QmPihvYmplY3QpLnRvUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIoKTsKLSAgICBBU1NFUlQocmVzb3VyY2UpOwotCi0gICAgaWYgKHJlc291cmNlLT5yZXNv
dXJjZVR5cGUoKSA9PSBNYXNrZXJSZXNvdXJjZVR5cGUpIHsKLSAgICAgICAgUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXIqIG1hc2tlciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1Jlc291cmNlTWFza2Vy
Kj4ocmVzb3VyY2UpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJtYXNrVW5pdHMi
LCBtYXNrZXItPm1hc2tVbml0cygpKTsKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAi
bWFza0NvbnRlbnRVbml0cyIsIG1hc2tlci0+bWFza0NvbnRlbnRVbml0cygpKTsKLSAgICAgICAg
dHMgPDwgIlxuIjsKLSNpZiBFTkFCTEUoRklMVEVSUykKLSAgICB9IGVsc2UgaWYgKHJlc291cmNl
LT5yZXNvdXJjZVR5cGUoKSA9PSBGaWx0ZXJSZXNvdXJjZVR5cGUpIHsKLSAgICAgICAgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyKj4ocmVzb3VyY2UpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJmaWx0
ZXJVbml0cyIsIGZpbHRlci0+ZmlsdGVyVW5pdHMoKSk7Ci0gICAgICAgIHdyaXRlTmFtZVZhbHVl
UGFpcih0cywgInByaW1pdGl2ZVVuaXRzIiwgZmlsdGVyLT5wcmltaXRpdmVVbml0cygpKTsKLSAg
ICAgICAgdHMgPDwgIlxuIjsKLSAgICAgICAgLy8gQ3JlYXRpbmcgYSBwbGFjZWhvbGRlciBmaWx0
ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBidWlsZGVyLgotICAgICAgICBGbG9hdFJlY3QgZHVt
bXlSZWN0OwotICAgICAgICBSZWZQdHI8U1ZHRmlsdGVyPiBkdW1teUZpbHRlciA9IFNWR0ZpbHRl
cjo6Y3JlYXRlKEFmZmluZVRyYW5zZm9ybSgpLCBkdW1teVJlY3QsIGR1bW15UmVjdCwgZHVtbXlS
ZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKFJlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZGVy
ID0gZmlsdGVyLT5idWlsZFByaW1pdGl2ZXMoZHVtbXlGaWx0ZXIuZ2V0KCkpKSB7Ci0gICAgICAg
ICAgICBpZiAoRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gYnVpbGRlci0+bGFzdEVmZmVjdCgp
KQotICAgICAgICAgICAgICAgIGxhc3RFZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMs
IGluZGVudCArIDEpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9IGVsc2UgaWYgKHJlc291cmNl
LT5yZXNvdXJjZVR5cGUoKSA9PSBDbGlwcGVyUmVzb3VyY2VUeXBlKSB7Ci0gICAgICAgIFJlbmRl
clNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBlciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcio+KHJlc291cmNlKTsKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAi
Y2xpcFBhdGhVbml0cyIsIGNsaXBwZXItPmNsaXBQYXRoVW5pdHMoKSk7Ci0gICAgICAgIHRzIDw8
ICJcbiI7Ci0gICAgfSBlbHNlIGlmIChyZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gTWFya2Vy
UmVzb3VyY2VUeXBlKSB7Ci0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXIg
PSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcio+KHJlc291cmNlKTsKLSAgICAg
ICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAibWFya2VyVW5pdHMiLCBtYXJrZXItPm1hcmtlclVu
aXRzKCkpOwotICAgICAgICB0cyA8PCAiIFtyZWYgYXQgIiA8PCBtYXJrZXItPnJlZmVyZW5jZVBv
aW50KCkgPDwgIl0iOwotICAgICAgICB0cyA8PCAiIFthbmdsZT0iOwotICAgICAgICBpZiAobWFy
a2VyLT5hbmdsZSgpID09IC0xKQotICAgICAgICAgICAgdHMgPDwgImF1dG8iIDw8ICJdXG4iOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cyA8PCBtYXJrZXItPmFuZ2xlKCkgPDwgIl1cbiI7
Ci0gICAgfSBlbHNlIGlmIChyZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gUGF0dGVyblJlc291
cmNlVHlwZSkgewotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4qIHBhdHRlcm4gPSBz
dGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4qPihyZXNvdXJjZSk7Ci0KLSAgICAg
ICAgLy8gRHVtcCBmaW5hbCByZXN1bHRzIHRoYXQgYXJlIHVzZWQgZm9yIHJlbmRlcmluZy4gTm8g
dXNlIGluIGFza2luZyBTVkdQYXR0ZXJuRWxlbWVudCBmb3IgaXRzIHBhdHRlcm5Vbml0cygpLCBh
cyBpdCBtYXkKLSAgICAgICAgLy8gbGluayB0byBvdGhlciBwYXR0ZXJucyB1c2luZyB4bGluazpo
cmVmLCB3ZSBuZWVkIHRvIGJ1aWxkIHRoZSBmdWxsIGluaGVyaXRhbmNlIGNoYWluLCBha2EuIGNv
bGxlY3RQYXR0ZXJuUHJvcGVydGllcygpCi0gICAgICAgIFBhdHRlcm5BdHRyaWJ1dGVzIGF0dHJp
YnV0ZXM7Ci0gICAgICAgIHN0YXRpY19jYXN0PFNWR1BhdHRlcm5FbGVtZW50Kj4ocGF0dGVybi0+
bm9kZSgpKS0+Y29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotCi0gICAgICAg
IHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInBhdHRlcm5Vbml0cyIsIGJvdW5kaW5nQm94TW9kZVN0
cmluZyhhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKSk7Ci0gICAgICAgIHdyaXRlTmFtZVZh
bHVlUGFpcih0cywgInBhdHRlcm5Db250ZW50VW5pdHMiLCBib3VuZGluZ0JveE1vZGVTdHJpbmco
YXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGVDb250ZW50KCkpKTsKLQotICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtID0gYXR0cmlidXRlcy5wYXR0ZXJuVHJhbnNmb3JtKCk7Ci0gICAg
ICAgIGlmICghdHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgW3Bh
dHRlcm5UcmFuc2Zvcm09IiA8PCB0cmFuc2Zvcm0gPDwgIl0iOwotICAgICAgICB0cyA8PCAiXG4i
OwotICAgIH0gZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IExpbmVhckdyYWRp
ZW50UmVzb3VyY2VUeXBlKSB7Ci0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGll
bnQqIGdyYWRpZW50ID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVu
dCo+KHJlc291cmNlKTsKLQotICAgICAgICAvLyBEdW1wIGZpbmFsIHJlc3VsdHMgdGhhdCBhcmUg
dXNlZCBmb3IgcmVuZGVyaW5nLiBObyB1c2UgaW4gYXNraW5nIFNWR0dyYWRpZW50RWxlbWVudCBm
b3IgaXRzIGdyYWRpZW50VW5pdHMoKSwgYXMgaXQgbWF5Ci0gICAgICAgIC8vIGxpbmsgdG8gb3Ro
ZXIgZ3JhZGllbnRzIHVzaW5nIHhsaW5rOmhyZWYsIHdlIG5lZWQgdG8gYnVpbGQgdGhlIGZ1bGwg
aW5oZXJpdGFuY2UgY2hhaW4sIGFrYS4gY29sbGVjdEdyYWRpZW50UHJvcGVydGllcygpCi0gICAg
ICAgIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCogbGluZWFyR3JhZGllbnRFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnQtPm5vZGUoKSk7Ci0K
LSAgICAgICAgTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7Ci0gICAgICAgIGxp
bmVhckdyYWRpZW50RWxlbWVudC0+Y29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhhdHRyaWJ1dGVz
KTsKLSAgICAgICAgd3JpdGVDb21tb25HcmFkaWVudFByb3BlcnRpZXModHMsIGF0dHJpYnV0ZXMu
c3ByZWFkTWV0aG9kKCksIGF0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKSwgYXR0cmlidXRl
cy5ib3VuZGluZ0JveE1vZGUoKSk7Ci0KLSAgICAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50Owot
ICAgICAgICBGbG9hdFBvaW50IGVuZFBvaW50OwotICAgICAgICBsaW5lYXJHcmFkaWVudEVsZW1l
bnQtPmNhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRzKGF0dHJpYnV0ZXMsIHN0YXJ0UG9pbnQsIGVuZFBv
aW50KTsKLQotICAgICAgICB0cyA8PCAiIFtzdGFydD0iIDw8IHN0YXJ0UG9pbnQgPDwgIl0gW2Vu
ZD0iIDw8IGVuZFBvaW50IDw8ICJdXG4iOwotICAgIH0gIGVsc2UgaWYgKHJlc291cmNlLT5yZXNv
dXJjZVR5cGUoKSA9PSBSYWRpYWxHcmFkaWVudFJlc291cmNlVHlwZSkgewotICAgICAgICBSZW5k
ZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50KiBncmFkaWVudCA9IHN0YXRpY19jYXN0PFJlbmRl
clNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQqPihyZXNvdXJjZSk7Ci0KLSAgICAgICAgLy8gRHVt
cCBmaW5hbCByZXN1bHRzIHRoYXQgYXJlIHVzZWQgZm9yIHJlbmRlcmluZy4gTm8gdXNlIGluIGFz
a2luZyBTVkdHcmFkaWVudEVsZW1lbnQgZm9yIGl0cyBncmFkaWVudFVuaXRzKCksIGFzIGl0IG1h
eQotICAgICAgICAvLyBsaW5rIHRvIG90aGVyIGdyYWRpZW50cyB1c2luZyB4bGluazpocmVmLCB3
ZSBuZWVkIHRvIGJ1aWxkIHRoZSBmdWxsIGluaGVyaXRhbmNlIGNoYWluLCBha2EuIGNvbGxlY3RH
cmFkaWVudFByb3BlcnRpZXMoKQotICAgICAgICBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQqIHJh
ZGlhbEdyYWRpZW50RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1JhZGlhbEdyYWRpZW50RWxlbWVu
dCo+KGdyYWRpZW50LT5ub2RlKCkpOwotCi0gICAgICAgIFJhZGlhbEdyYWRpZW50QXR0cmlidXRl
cyBhdHRyaWJ1dGVzOwotICAgICAgICByYWRpYWxHcmFkaWVudEVsZW1lbnQtPmNvbGxlY3RHcmFk
aWVudEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7Ci0gICAgICAgIHdyaXRlQ29tbW9uR3JhZGllbnRQ
cm9wZXJ0aWVzKHRzLCBhdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpLCBhdHRyaWJ1dGVzLmdyYWRp
ZW50VHJhbnNmb3JtKCksIGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpOwotCi0gICAgICAg
IEZsb2F0UG9pbnQgZm9jYWxQb2ludDsKLSAgICAgICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludDsK
LSAgICAgICAgZmxvYXQgcmFkaXVzOwotICAgICAgICByYWRpYWxHcmFkaWVudEVsZW1lbnQtPmNh
bGN1bGF0ZUZvY2FsQ2VudGVyUG9pbnRzQW5kUmFkaXVzKGF0dHJpYnV0ZXMsIGZvY2FsUG9pbnQs
IGNlbnRlclBvaW50LCByYWRpdXMpOwotCi0gICAgICAgIHRzIDw8ICIgW2NlbnRlcj0iIDw8IGNl
bnRlclBvaW50IDw8ICJdIFtmb2NhbD0iIDw8IGZvY2FsUG9pbnQgPDwgIl0gW3JhZGl1cz0iIDw8
IHJhZGl1cyA8PCAiXVxuIjsKLSAgICB9IGVsc2UKLSAgICAgICAgdHMgPDwgIlxuIjsKLSAgICB3
cml0ZUNoaWxkcmVuKHRzLCBvYmplY3QsIGluZGVudCk7Ci19Ci0KLXZvaWQgd3JpdGVTVkdDb250
YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgY29udGFpbmVyLCBpbnQg
aW5kZW50KQotewotICAgIC8vIEN1cnJlbnRseSBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZSBoYXMgbm8gbWVhbmluZ2Z1bCBvdXRwdXQuCi0gICAgaWYgKGNvbnRhaW5lci5pc1NWR1Jl
c291cmNlRmlsdGVyUHJpbWl0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB3cml0ZVN0YW5k
YXJkUHJlZml4KHRzLCBjb250YWluZXIsIGluZGVudCk7Ci0gICAgd3JpdGVQb3NpdGlvbkFuZFN0
eWxlKHRzLCBjb250YWluZXIpOwotICAgIHRzIDw8ICJcbiI7Ci0gICAgd3JpdGVSZXNvdXJjZXMo
dHMsIGNvbnRhaW5lciwgaW5kZW50KTsKLSAgICB3cml0ZUNoaWxkcmVuKHRzLCBjb250YWluZXIs
IGluZGVudCk7Ci19Ci0KLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNW
R1Jvb3QmIHJvb3QsIGludCBpbmRlbnQpCi17Ci0gICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywg
cm9vdCwgaW5kZW50KTsKLSAgICB0cyA8PCByb290IDw8ICJcbiI7Ci0gICAgd3JpdGVDaGlsZHJl
bih0cywgcm9vdCwgaW5kZW50KTsKLX0KLQotdm9pZCB3cml0ZVNWR1RleHQoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFJlbmRlckJsb2NrJiB0ZXh0LCBpbnQgaW5kZW50KQotewotICAgIHdyaXRlU3Rh
bmRhcmRQcmVmaXgodHMsIHRleHQsIGluZGVudCk7Ci0gICAgd3JpdGVSZW5kZXJTVkdUZXh0Qm94
KHRzLCB0ZXh0KTsKLSAgICB0cyA8PCAiXG4iOwotICAgIHdyaXRlUmVzb3VyY2VzKHRzLCB0ZXh0
LCBpbmRlbnQpOwotICAgIHdyaXRlQ2hpbGRyZW4odHMsIHRleHQsIGluZGVudCk7Ci19Ci0KLXZv
aWQgd3JpdGVTVkdJbmxpbmVUZXh0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJUZXh0JiB0
ZXh0LCBpbnQgaW5kZW50KQotewotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHRleHQsIGlu
ZGVudCk7Ci0KLSAgICAvLyBXaHkgbm90IGp1c3QgbGluZXNCb3VuZGluZ0JveCgpPwotICAgIHRz
IDw8ICIgIiA8PCBGbG9hdFJlY3QodGV4dC5maXJzdFJ1bk9yaWdpbigpLCB0ZXh0LmxpbmVzQm91
bmRpbmdCb3goKS5zaXplKCkpIDw8ICJcbiI7Ci0gICAgd3JpdGVSZXNvdXJjZXModHMsIHRleHQs
IGluZGVudCk7Ci0gICAgd3JpdGVTVkdJbmxpbmVUZXh0Qm94ZXModHMsIHRleHQsIGluZGVudCk7
Ci19Ci0KLXZvaWQgd3JpdGVTVkdJbWFnZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZH
SW1hZ2UmIGltYWdlLCBpbnQgaW5kZW50KQotewotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMs
IGltYWdlLCBpbmRlbnQpOwotICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywgaW1hZ2UpOwot
ICAgIHRzIDw8ICJcbiI7Ci0gICAgd3JpdGVSZXNvdXJjZXModHMsIGltYWdlLCBpbmRlbnQpOwot
fQotCi12b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRo
LCBpbnQgaW5kZW50KQotewotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHBhdGgsIGluZGVu
dCk7Ci0gICAgdHMgPDwgcGF0aCA8PCAiXG4iOwotICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBwYXRo
LCBpbmRlbnQpOwotfQotCi12b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0mIHRz
LCBjb25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AmIHN0b3AsIGludCBpbmRlbnQpCi17Ci0gICAg
d3JpdGVTdGFuZGFyZFByZWZpeCh0cywgc3RvcCwgaW5kZW50KTsKLQotICAgIFNWR1N0b3BFbGVt
ZW50KiBzdG9wRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0b3BFbGVtZW50Kj4oc3RvcC5ub2Rl
KCkpOwotICAgIEFTU0VSVChzdG9wRWxlbWVudCk7Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBzdG9wLnN0eWxlKCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
dHMgPDwgIiBbb2Zmc2V0PSIgPDwgc3RvcEVsZW1lbnQtPm9mZnNldCgpIDw8ICJdIFtjb2xvcj0i
IDw8IHN0b3BFbGVtZW50LT5zdG9wQ29sb3JJbmNsdWRpbmdPcGFjaXR5KCkgPDwgIl1cbiI7Ci19
Ci0KLXZvaWQgd3JpdGVSZXNvdXJjZXMoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVj
dCYgb2JqZWN0LCBpbnQgaW5kZW50KQotewotICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9
IG9iamVjdC5zdHlsZSgpOwotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0
eWxlLT5zdmdTdHlsZSgpOwotCi0gICAgLy8gRklYTUU6IFdlIHdhbnQgdG8gdXNlIFNWR1Jlc291
cmNlc0NhY2hlIHRvIGRldGVybWluZSB3aGljaCByZXNvdXJjZXMgYXJlIHByZXNlbnQsIGluc3Rl
YWQgb2YgcXVlcmluZyB0aGUgcmVzb3VyY2UgPC0+IGlkIGNhY2hlLgotICAgIC8vIEZvciBub3cg
bGVhdmUgdGhlIERSVCBvdXRwdXQgYXMgaXMsIGJ1dCBsYXRlciBvbiB3ZSBzaG91bGQgY2hhbmdl
IHRoaXMgc28gY3ljbGVzIGFyZSBwcm9wZXJseSBpZ25vcmVkIGluIHRoZSBEUlQgb3V0cHV0Lgot
ICAgIFJlbmRlck9iamVjdCYgcmVuZGVyZXIgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCY+KG9i
amVjdCk7Ci0gICAgaWYgKCFzdmdTdHlsZS0+bWFza2VyUmVzb3VyY2UoKS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIgPSBnZXRSZW5kZXJT
VkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI+KG9iamVjdC5kb2N1bWVudCgp
LCBzdmdTdHlsZS0+bWFza2VyUmVzb3VyY2UoKSkpIHsKLSAgICAgICAgICAgIHdyaXRlSW5kZW50
KHRzLCBpbmRlbnQpOwotICAgICAgICAgICAgdHMgPDwgIiAiOwotICAgICAgICAgICAgd3JpdGVO
YW1lQW5kUXVvdGVkVmFsdWUodHMsICJtYXNrZXIiLCBzdmdTdHlsZS0+bWFza2VyUmVzb3VyY2Uo
KSk7Ci0gICAgICAgICAgICB0cyA8PCAiICI7Ci0gICAgICAgICAgICB3cml0ZVN0YW5kYXJkUHJl
Zml4KHRzLCAqbWFza2VyLCAwKTsKLSAgICAgICAgICAgIHRzIDw8ICIgIiA8PCBtYXNrZXItPnJl
c291cmNlQm91bmRpbmdCb3goJnJlbmRlcmVyKSA8PCAiXG4iOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGlmICghc3ZnU3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkgewotICAgICAg
ICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gZ2V0UmVuZGVyU1ZHUmVz
b3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcj4ob2JqZWN0LmRvY3VtZW50KCksIHN2
Z1N0eWxlLT5jbGlwcGVyUmVzb3VyY2UoKSkpIHsKLSAgICAgICAgICAgIHdyaXRlSW5kZW50KHRz
LCBpbmRlbnQpOwotICAgICAgICAgICAgdHMgPDwgIiAiOwotICAgICAgICAgICAgd3JpdGVOYW1l
QW5kUXVvdGVkVmFsdWUodHMsICJjbGlwUGF0aCIsIHN2Z1N0eWxlLT5jbGlwcGVyUmVzb3VyY2Uo
KSk7Ci0gICAgICAgICAgICB0cyA8PCAiICI7Ci0gICAgICAgICAgICB3cml0ZVN0YW5kYXJkUHJl
Zml4KHRzLCAqY2xpcHBlciwgMCk7Ci0gICAgICAgICAgICB0cyA8PCAiICIgPDwgY2xpcHBlci0+
cmVzb3VyY2VCb3VuZGluZ0JveCgmcmVuZGVyZXIpIDw8ICJcbiI7Ci0gICAgICAgIH0KLSAgICB9
Ci0jaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAgaWYgKCFzdmdTdHlsZS0+ZmlsdGVyUmVzb3VyY2Uo
KS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiBmaWx0
ZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KG9i
amVjdC5kb2N1bWVudCgpLCBzdmdTdHlsZS0+ZmlsdGVyUmVzb3VyY2UoKSkpIHsKLSAgICAgICAg
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgICAgICAgICAgdHMgPDwgIiAiOwotICAg
ICAgICAgICAgd3JpdGVOYW1lQW5kUXVvdGVkVmFsdWUodHMsICJmaWx0ZXIiLCBzdmdTdHlsZS0+
ZmlsdGVyUmVzb3VyY2UoKSk7Ci0gICAgICAgICAgICB0cyA8PCAiICI7Ci0gICAgICAgICAgICB3
cml0ZVN0YW5kYXJkUHJlZml4KHRzLCAqZmlsdGVyLCAwKTsKLSAgICAgICAgICAgIHRzIDw8ICIg
IiA8PCBmaWx0ZXItPnJlc291cmNlQm91bmRpbmdCb3goJnJlbmRlcmVyKSA8PCAiXG4iOwotICAg
ICAgICB9Ci0gICAgfQotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5oCShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRy
ZWVBc1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIFNWR1JlbmRlclRyZWVBc1RleHRfaAotI2RlZmluZSBTVkdSZW5kZXJU
cmVlQXNUZXh0X2gKLQotI2lmIEVOQUJMRShTVkcpCi0KLSNpbmNsdWRlICJUZXh0U3RyZWFtLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIENvbG9yOwotICAgIGNsYXNzIEZs
b2F0UmVjdDsKLSAgICBjbGFzcyBGbG9hdFNpemU7Ci0gICAgY2xhc3MgTm9kZTsKLSAgICBjbGFz
cyBSZW5kZXJCbG9jazsKLSAgICBjbGFzcyBSZW5kZXJJbWFnZTsKLSAgICBjbGFzcyBSZW5kZXJP
YmplY3Q7Ci0gICAgY2xhc3MgUmVuZGVyU1ZHR3JhZGllbnRTdG9wOwotICAgIGNsYXNzIFJlbmRl
clNWR0ltYWdlOwotICAgIGNsYXNzIFJlbmRlclNWR1BhdGg7Ci0gICAgY2xhc3MgUmVuZGVyU1ZH
Um9vdDsKLSAgICBjbGFzcyBSZW5kZXJUZXh0OwotICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsK
LSAgICBjbGFzcyBTVkdVbml0VHlwZXM7Ci0KLS8vIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBtYWlu
IFJlbmRlclRyZWVBc1RleHQgY29kZQotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVu
ZGVyU1ZHUGF0aCYsIGludCBpbmRlbnQpOwotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3Qg
UmVuZGVyU1ZHUm9vdCYsIGludCBpbmRlbnQpOwotdm9pZCB3cml0ZVNWR0dyYWRpZW50U3RvcChU
ZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHR3JhZGllbnRTdG9wJiwgaW50IGluZGVudCk7Ci12
b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlck9i
amVjdCYsIGludCBpbmRlbnQpOwotdm9pZCB3cml0ZVNWR0NvbnRhaW5lcihUZXh0U3RyZWFtJiwg
Y29uc3QgUmVuZGVyT2JqZWN0JiwgaW50IGluZGVudCk7Ci12b2lkIHdyaXRlU1ZHSW1hZ2UoVGV4
dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0ltYWdlJiwgaW50IGluZGVudCk7Ci12b2lkIHdyaXRl
U1ZHSW5saW5lVGV4dChUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyVGV4dCYsIGludCBpbmRlbnQp
Owotdm9pZCB3cml0ZVNWR1RleHQoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlckJsb2NrJiwgaW50
IGluZGVudCk7Ci12b2lkIHdyaXRlUmVzb3VyY2VzKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJP
YmplY3QmLCBpbnQgaW5kZW50KTsKLQotLy8gaGVscGVyIG9wZXJhdG9ycyBkZWZpbmVkIHVzZWQg
aW4gdmFyaW91cyBjbGFzc2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0cmVlLgotVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci1UZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBDb2xvciYpOwotVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0KLS8vIGhlbHBlciBv
cGVyYXRvcnMgc3BlY2lmaWMgdG8gZHVtcGluZyB0aGUgcmVuZGVyIHRyZWUuIHRoZXNlIGFyZSB1
c2VkIGluIHZhcmlvdXMgY2xhc3NlcyB0byBkdW1wIHRoZSByZW5kZXIgdHJlZQotLy8gdGhlc2Ug
Y291bGQgYmUgZGVmaW5lZCBpbiBzZXBhcmF0ZSBuYW1lc3BhY2UgdG8gYXZvaWQgbWF0Y2hpbmcg
dGhlc2UgZ2VuZXJpYyBzaWduYXR1cmVzIHVuaW50ZW50aW9uYWxseS4KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgSXRlbT4KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFZlY3RvcjxJdGVtKj4mIHYpCi17Ci0gICAgdHMgPDwgIlsiOwotCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgdHMgPDwgKnZbaV07Ci0gICAg
ICAgIGlmIChpIDwgdi5zaXplKCkgLSAxKQotICAgICAgICAgICAgdHMgPDwgIiwgIjsKLSAgICB9
Ci0KLSAgICB0cyA8PCAiXSI7Ci0gICAgcmV0dXJuIHRzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBQb2ludGVyPgotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgUG9pbnRl
ciogdCkKLXsKLSAgICB0cyA8PCByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0KTsKLSAgICBy
ZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShTVkcpCi0KLSNlbmRpZiAvLyBTVkdSZW5kZXJUcmVlQXNUZXh0X2gKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1NWR1Jlc291cmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHUmVzb3VyY2VzLmNwcAkocmV2aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdSZXNvdXJjZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY4NCArMCwwIEBACi0vKgot
ICAgIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTVkdSZXNv
dXJjZXMuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKLSNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
TWFza2VyLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0dy
YWRpZW50RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHUGFp
bnQuaCIKLSNpbmNsdWRlICJTVkdQYXR0ZXJuRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1JlbmRl
clN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotU1ZHUmVzb3VyY2VzOjpTVkdSZXNvdXJjZXMoKQotICAgIDogbV9jbGlwcGVyRmls
dGVyTWFza2VyRGF0YSgwKQotICAgICwgbV9tYXJrZXJEYXRhKDApCi0gICAgLCBtX2ZpbGxTdHJv
a2VEYXRhKDApCi0gICAgLCBtX2xpbmtlZFJlc291cmNlKDApCi17Ci19Ci0KLXN0YXRpYyBIYXNo
U2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xpcHBlckZpbHRlck1hc2tlclRhZ3MoKQotewotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4sIHNfdGFnTGlz
dCwgKCkpOwotICAgIGlmIChzX3RhZ0xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vICJjb250
YWluZXIgZWxlbWVudHMiOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9pbnRyby5odG1sI1Rl
cm1Db250YWluZXJFbGVtZW50Ci0gICAgICAgIC8vICJncmFwaGljcyBlbGVtZW50cyIgOiBodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcxMS9pbnRyby5odG1sI1Rlcm1HcmFwaGljc0VsZW1lbnQKLSAg
ICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6YVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwot
ICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpjaXJjbGVUYWcubG9jYWxOYW1lKCkuaW1w
bCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6ZWxsaXBzZVRhZy5sb2NhbE5h
bWUoKS5pbXBsKCkpOwotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpnbHlwaFRhZy5s
b2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpnVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6Omlt
YWdlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFt
ZXM6OmxpbmVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChT
VkdOYW1lczo6bWFya2VyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlz
dC5hZGQoU1ZHTmFtZXM6Om1hc2tUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190
YWdMaXN0LmFkZChTVkdOYW1lczo6bWlzc2luZ19nbHlwaFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkp
OwotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpwYXRoVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnBvbHlnb25UYWcubG9jYWxO
YW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6cG9seWxpbmVU
YWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6
cmVjdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05h
bWVzOjpzdmdUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChT
VkdOYW1lczo6dGV4dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBzX3RhZ0xpc3Qu
YWRkKFNWR05hbWVzOjp1c2VUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLQotICAgICAgICAvLyBO
b3QgbGlzdGVkIGluIHRoZSBkZWZpbml0aW9ucyBpcyB0aGUgY2xpcFBhdGggZWxlbWVudCwgdGhl
IFNWRyBzcGVjIHNheXMgdGhvdWdoOgotICAgICAgICAvLyBUaGUgImNsaXBQYXRoIiBlbGVtZW50
IG9yIGFueSBvZiBpdHMgY2hpbGRyZW4gY2FuIHNwZWNpZnkgcHJvcGVydHkgImNsaXAtcGF0aCIu
Ci0gICAgICAgIC8vIFNvIHdlIGhhdmUgdG8gYWRkIGNsaXBQYXRoVGFnIGhlcmUsIG90aGVyd2hp
c2UgY2xpcC1wYXRoIG9uIGNsaXBQYXRoIHdpbGwgZmFpbC4KLSAgICAgICAgLy8gKEFscmVhZHkg
bWFpbGVkIFNWRyBXRywgd2FpdGluZyBmb3IgYSBzb2x1dGlvbikKLSAgICAgICAgc190YWdMaXN0
LmFkZChTVkdOYW1lczo6Y2xpcFBhdGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLQotICAgICAg
ICAvLyBOb3QgbGlzdGVkIGluIHRoZSBkZWZpbml0aW9ucyBhcmUgdGhlIHRleHQgY29udGVudCBl
bGVtZW50cywgdGhvdWdoIGZpbHRlci9jbGlwcGVyL21hc2tlciBvbiB0c3Bhbi90ZXh0Ly4uIGlz
IGFsbG93ZWQuCi0gICAgICAgIC8vIChBbHJlYWR5IG1haWxlZCBTVkcgV0csIHdhaXRpbmcgZm9y
IGEgc29sdXRpb24pCi0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmFsdEdseXBoVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnRl
eHRQYXRoVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZH
TmFtZXM6OnRyZWZUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFk
ZChTVkdOYW1lczo6dHNwYW5UYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLQotICAgICAgICAvLyBF
bGVtZW50cyB0aGF0IHdlIGlnbm9yZSwgYXMgaXQgZG9lc24ndCBtYWtlIGFueSBzZW5zZS4KLSAg
ICAgICAgLy8gZGVmcywgcGF0dGVybiwgc3dpdGNoIChGSVhNRTogTWFpbCBTVkcgV0cgYWJvdXQg
dGhlc2UpCi0gICAgICAgIC8vIHN5bWJvbCAoaXMgY29udmVydGVkIHRvIGEgc3ZnIGVsZW1lbnQs
IHdoZW4gcmVmZXJlbmNlZCBieSB1c2UsIHdlIGNhbiBzYWZlbHkgaWdub3JlIGl0LikKLSAgICB9
Ci0KLSAgICByZXR1cm4gc190YWdMaXN0OwotfQotCi1zdGF0aWMgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4mIG1hcmtlclRhZ3MoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNl
dDxBdG9taWNTdHJpbmdJbXBsKj4sIHNfdGFnTGlzdCwgKCkpOwotICAgIGlmIChzX3RhZ0xpc3Qu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmxpbmVUYWcubG9j
YWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6cGF0aFRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpw
b2x5Z29uVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZH
TmFtZXM6OnBvbHlsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHNfdGFnTGlzdDsKLX0KLQotc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBm
aWxsQW5kU3Ryb2tlVGFncygpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiwgc190YWdMaXN0LCAoKSk7Ci0gICAgaWYgKHNfdGFnTGlzdC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6YWx0R2x5cGhUYWcubG9j
YWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6Y2lyY2xl
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6
OmVsbGlwc2VUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChT
VkdOYW1lczo6bGluZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBzX3RhZ0xpc3Qu
YWRkKFNWR05hbWVzOjpwYXRoVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFn
TGlzdC5hZGQoU1ZHTmFtZXM6OnBvbHlnb25UYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAg
ICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6cG9seWxpbmVUYWcubG9jYWxOYW1lKCkuaW1wbCgp
KTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6cmVjdFRhZy5sb2NhbE5hbWUoKS5p
bXBsKCkpOwotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjp0ZXh0VGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnRleHRQYXRoVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnRy
ZWZUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1l
czo6dHNwYW5UYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc190
YWdMaXN0OwotfQotCi1zdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNoYWluYWJs
ZVJlc291cmNlVGFncygpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PEF0b21p
Y1N0cmluZ0ltcGwqPiwgc190YWdMaXN0LCAoKSk7Ci0gICAgaWYgKHNfdGFnTGlzdC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6bGluZWFyR3JhZGllbnRUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6Zmls
dGVyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFt
ZXM6OnBhdHRlcm5UYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFk
ZChTVkdOYW1lczo6cmFkaWFsR3JhZGllbnRUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gc190YWdMaXN0OwotfQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyB0YXJn
ZXRSZWZlcmVuY2VGcm9tUmVzb3VyY2UoU1ZHRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBTdHJp
bmcgdGFyZ2V0OwotICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpwYXR0ZXJu
VGFnKSkKLSAgICAgICAgdGFyZ2V0ID0gc3RhdGljX2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQqPihl
bGVtZW50KS0+aHJlZigpOwotICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OmxpbmVhckdyYWRpZW50VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpy
YWRpYWxHcmFkaWVudFRhZykpCi0gICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PFNWR0dyYWRp
ZW50RWxlbWVudCo+KGVsZW1lbnQpLT5ocmVmKCk7Ci0jaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAg
ZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmlsdGVyVGFnKSkKLSAgICAg
ICAgdGFyZ2V0ID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyRWxlbWVudCo+KGVsZW1lbnQpLT5ocmVm
KCk7Ci0jZW5kaWYKLSAgICBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0g
ICAgcmV0dXJuIFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KHRhcmdldCk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHBhaW50aW5nUmVzb3VyY2VGcm9t
U1ZHUGFpbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBTVkdQYWludCogcGFpbnQsIEF0b21pY1N0cmlu
ZyYgaWQsIGJvb2wmIGhhc1BlbmRpbmdSZXNvdXJjZSkKLXsKLSAgICBBU1NFUlQocGFpbnQpOwot
Ci0gICAgU1ZHUGFpbnQ6OlNWR1BhaW50VHlwZSBwYWludFR5cGUgPSBwYWludC0+cGFpbnRUeXBl
KCk7Ci0gICAgaWYgKHBhaW50VHlwZSAhPSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUkkgJiYg
cGFpbnRUeXBlICE9IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1VSSV9SR0JDT0xPUikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBpZCA9IFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KHBhaW50
LT51cmkoKSk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGNvbnRhaW5lciA9IGdl
dFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyQnlJZChkb2N1bWVudCwgaWQpOwotICAgIGlmICgh
Y29udGFpbmVyKSB7Ci0gICAgICAgIGhhc1BlbmRpbmdSZXNvdXJjZSA9IHRydWU7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5
cGUgPSBjb250YWluZXItPnJlc291cmNlVHlwZSgpOwotICAgIGlmIChyZXNvdXJjZVR5cGUgIT0g
UGF0dGVyblJlc291cmNlVHlwZSAmJiByZXNvdXJjZVR5cGUgIT0gTGluZWFyR3JhZGllbnRSZXNv
dXJjZVR5cGUgJiYgcmVzb3VyY2VUeXBlICE9IFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBlKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjb250YWluZXI7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgdm9pZCByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShTVkdEb2N1bWVudEV4dGVuc2lvbnMq
IGV4dGVuc2lvbnMsIGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNWR0VsZW1lbnQqIGVsZW1lbnQp
Ci17Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIGlmICghZWxlbWVudC0+aXNTdHlsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZXh0ZW5zaW9ucy0+YWRkUGVuZGluZ1Jlc291cmNlKGlk
LCBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCkpOwotfQotCi1ib29sIFNW
R1Jlc291cmNlczo6YnVpbGRDYWNoZWRSZXNvdXJjZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICBBU1NFUlQob2JqZWN0KTsK
LSAgICBBU1NFUlQoc3R5bGUpOwotCi0gICAgTm9kZSogbm9kZSA9IG9iamVjdC0+bm9kZSgpOwot
ICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+aXNTVkdFbGVtZW50KCkpOwotCi0g
ICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKTsK
LSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG9iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICBBU1NFUlQoZG9jdW1lbnQpOwot
Ci0gICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25zID0gZG9jdW1lbnQtPmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKTsKLSAgICBBU1NFUlQoZXh0ZW5zaW9ucyk7Ci0KLSAgICBBdG9taWNT
dHJpbmdJbXBsKiB0YWdOYW1lSW1wbCA9IGVsZW1lbnQtPnRhZ1FOYW1lKCkubG9jYWxOYW1lKCku
aW1wbCgpOwotICAgIGlmICghdGFnTmFtZUltcGwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGJvb2wgZm91bmRSZXNvdXJjZXMgPSBmYWxzZTsKLSAgICBpZiAoY2xpcHBlckZpbHRlck1h
c2tlclRhZ3MoKS5jb250YWlucyh0YWdOYW1lSW1wbCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLT5o
YXNDbGlwcGVyKCkpIHsKLSAgICAgICAgICAgIEF0b21pY1N0cmluZyBpZChzdHlsZS0+Y2xpcHBl
clJlc291cmNlKCkpOwotICAgICAgICAgICAgaWYgKHNldENsaXBwZXIoZ2V0UmVuZGVyU1ZHUmVz
b3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcj4oZG9jdW1lbnQsIGlkKSkpCi0gICAg
ICAgICAgICAgICAgZm91bmRSZXNvdXJjZXMgPSB0cnVlOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKGV4dGVuc2lvbnMsIGlkLCBlbGVt
ZW50KTsKLSAgICAgICAgfQotCi0jaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAgICAgIGlmIChzdHls
ZS0+aGFzRmlsdGVyKCkpIHsKLSAgICAgICAgICAgIEF0b21pY1N0cmluZyBpZChzdHlsZS0+Zmls
dGVyUmVzb3VyY2UoKSk7Ci0gICAgICAgICAgICBpZiAoc2V0RmlsdGVyKGdldFJlbmRlclNWR1Jl
c291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcj4oZG9jdW1lbnQsIGlkKSkpCi0gICAg
ICAgICAgICAgICAgZm91bmRSZXNvdXJjZXMgPSB0cnVlOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKGV4dGVuc2lvbnMsIGlkLCBlbGVt
ZW50KTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgaWYgKHN0eWxlLT5oYXNNYXNrZXIo
KSkgewotICAgICAgICAgICAgQXRvbWljU3RyaW5nIGlkKHN0eWxlLT5tYXNrZXJSZXNvdXJjZSgp
KTsKLSAgICAgICAgICAgIGlmIChzZXRNYXNrZXIoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJl
bmRlclNWR1Jlc291cmNlTWFza2VyPihkb2N1bWVudCwgaWQpKSkKLSAgICAgICAgICAgICAgICBm
b3VuZFJlc291cmNlcyA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
cmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UoZXh0ZW5zaW9ucywgaWQsIGVsZW1lbnQpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKG1hcmtlclRhZ3MoKS5jb250YWlucyh0YWdOYW1lSW1wbCkg
JiYgc3R5bGUtPmhhc01hcmtlcnMoKSkgewotICAgICAgICBBdG9taWNTdHJpbmcgbWFya2VyU3Rh
cnRJZChzdHlsZS0+bWFya2VyU3RhcnRSZXNvdXJjZSgpKTsKLSAgICAgICAgaWYgKHNldE1hcmtl
clN0YXJ0KGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcj4o
ZG9jdW1lbnQsIG1hcmtlclN0YXJ0SWQpKSkKLSAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0g
dHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2Uo
ZXh0ZW5zaW9ucywgbWFya2VyU3RhcnRJZCwgZWxlbWVudCk7Ci0KLSAgICAgICAgQXRvbWljU3Ry
aW5nIG1hcmtlck1pZElkKHN0eWxlLT5tYXJrZXJNaWRSZXNvdXJjZSgpKTsKLSAgICAgICAgaWYg
KHNldE1hcmtlck1pZChnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXI+KGRvY3VtZW50LCBtYXJrZXJNaWRJZCkpKQotICAgICAgICAgICAgZm91bmRSZXNvdXJj
ZXMgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNv
dXJjZShleHRlbnNpb25zLCBtYXJrZXJNaWRJZCwgZWxlbWVudCk7Ci0KLSAgICAgICAgQXRvbWlj
U3RyaW5nIG1hcmtlckVuZElkKHN0eWxlLT5tYXJrZXJFbmRSZXNvdXJjZSgpKTsKLSAgICAgICAg
aWYgKHNldE1hcmtlckVuZChnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXI+KGRvY3VtZW50LCBtYXJrZXJFbmRJZCkpKQotICAgICAgICAgICAgZm91bmRSZXNv
dXJjZXMgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZWdpc3RlclBlbmRpbmdS
ZXNvdXJjZShleHRlbnNpb25zLCBtYXJrZXJFbmRJZCwgZWxlbWVudCk7Ci0gICAgfQotCi0gICAg
aWYgKGZpbGxBbmRTdHJva2VUYWdzKCkuY29udGFpbnModGFnTmFtZUltcGwpKSB7Ci0gICAgICAg
IGlmIChzdHlsZS0+aGFzRmlsbCgpKSB7Ci0gICAgICAgICAgICBib29sIGhhc1BlbmRpbmdSZXNv
dXJjZSA9IGZhbHNlOwotICAgICAgICAgICAgQXRvbWljU3RyaW5nIGlkOwotICAgICAgICAgICAg
aWYgKHNldEZpbGwocGFpbnRpbmdSZXNvdXJjZUZyb21TVkdQYWludChkb2N1bWVudCwgc3R5bGUt
PmZpbGxQYWludCgpLCBpZCwgaGFzUGVuZGluZ1Jlc291cmNlKSkpCi0gICAgICAgICAgICAgICAg
Zm91bmRSZXNvdXJjZXMgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAoaGFzUGVuZGluZ1Jl
c291cmNlKQotICAgICAgICAgICAgICAgIHJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKGV4dGVuc2lv
bnMsIGlkLCBlbGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdHlsZS0+aGFzU3Ry
b2tlKCkpIHsKLSAgICAgICAgICAgIGJvb2wgaGFzUGVuZGluZ1Jlc291cmNlID0gZmFsc2U7Ci0g
ICAgICAgICAgICBBdG9taWNTdHJpbmcgaWQ7Ci0gICAgICAgICAgICBpZiAoc2V0U3Ryb2tlKHBh
aW50aW5nUmVzb3VyY2VGcm9tU1ZHUGFpbnQoZG9jdW1lbnQsIHN0eWxlLT5zdHJva2VQYWludCgp
LCBpZCwgaGFzUGVuZGluZ1Jlc291cmNlKSkpCi0gICAgICAgICAgICAgICAgZm91bmRSZXNvdXJj
ZXMgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAoaGFzUGVuZGluZ1Jlc291cmNlKQotICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKGV4dGVuc2lvbnMsIGlkLCBlbGVt
ZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjaGFpbmFibGVSZXNvdXJjZVRhZ3Mo
KS5jb250YWlucyh0YWdOYW1lSW1wbCkpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGlkKHRhcmdl
dFJlZmVyZW5jZUZyb21SZXNvdXJjZShlbGVtZW50KSk7Ci0gICAgICAgIGlmIChzZXRMaW5rZWRS
ZXNvdXJjZShnZXRSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lckJ5SWQoZG9jdW1lbnQsIGlkKSkp
Ci0gICAgICAgICAgICBmb3VuZFJlc291cmNlcyA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKGV4dGVuc2lvbnMsIGlkLCBlbGVtZW50KTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZm91bmRSZXNvdXJjZXM7Ci19Ci0KLXZvaWQgU1ZHUmVzb3Vy
Y2VzOjpyZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGJvb2wgbWFy
a0ZvckludmFsaWRhdGlvbikgY29uc3QKLXsKLSAgICBpZiAoIW1fY2xpcHBlckZpbHRlck1hc2tl
ckRhdGEgJiYgIW1fbWFya2VyRGF0YSAmJiAhbV9maWxsU3Ryb2tlRGF0YSAmJiAhbV9saW5rZWRS
ZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fbGlua2VkUmVzb3VyY2UpIHsK
LSAgICAgICAgQVNTRVJUKCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKTsKLSAgICAgICAgQVNT
RVJUKCFtX21hcmtlckRhdGEpOwotICAgICAgICBBU1NFUlQoIW1fZmlsbFN0cm9rZURhdGEpOwot
ICAgICAgICBtX2xpbmtlZFJlc291cmNlLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0LCBt
YXJrRm9ySW52YWxpZGF0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICht
X2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKSB7Ci0gICAgICAgIGlmIChtX2NsaXBwZXJGaWx0ZXJN
YXNrZXJEYXRhLT5jbGlwcGVyKQotICAgICAgICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0
YS0+Y2xpcHBlci0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKG9iamVjdCwgbWFya0ZvckludmFsaWRh
dGlvbik7Ci0jaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAgICAgIGlmIChtX2NsaXBwZXJGaWx0ZXJN
YXNrZXJEYXRhLT5maWx0ZXIpCi0gICAgICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRh
LT5maWx0ZXItPnJlbW92ZUNsaWVudEZyb21DYWNoZShvYmplY3QsIG1hcmtGb3JJbnZhbGlkYXRp
b24pOwotI2VuZGlmCi0gICAgICAgIGlmIChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNr
ZXIpCi0gICAgICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXItPnJlbW92
ZUNsaWVudEZyb21DYWNoZShvYmplY3QsIG1hcmtGb3JJbnZhbGlkYXRpb24pOwotICAgIH0KLQot
ICAgIGlmIChtX21hcmtlckRhdGEpIHsKLSAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2Vy
U3RhcnQpCi0gICAgICAgICAgICBtX21hcmtlckRhdGEtPm1hcmtlclN0YXJ0LT5yZW1vdmVDbGll
bnRGcm9tQ2FjaGUob2JqZWN0LCBtYXJrRm9ySW52YWxpZGF0aW9uKTsKLSAgICAgICAgaWYgKG1f
bWFya2VyRGF0YS0+bWFya2VyTWlkKQotICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJN
aWQtPnJlbW92ZUNsaWVudEZyb21DYWNoZShvYmplY3QsIG1hcmtGb3JJbnZhbGlkYXRpb24pOwot
ICAgICAgICBpZiAobV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQpCi0gICAgICAgICAgICBtX21hcmtl
ckRhdGEtPm1hcmtlckVuZC0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKG9iamVjdCwgbWFya0Zvcklu
dmFsaWRhdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKG1fZmlsbFN0cm9rZURhdGEpIHsKLSAgICAg
ICAgaWYgKG1fZmlsbFN0cm9rZURhdGEtPmZpbGwpCi0gICAgICAgICAgICBtX2ZpbGxTdHJva2VE
YXRhLT5maWxsLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0LCBtYXJrRm9ySW52YWxpZGF0
aW9uKTsKLSAgICAgICAgaWYgKG1fZmlsbFN0cm9rZURhdGEtPnN0cm9rZSkKLSAgICAgICAgICAg
IG1fZmlsbFN0cm9rZURhdGEtPnN0cm9rZS0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKG9iamVjdCwg
bWFya0ZvckludmFsaWRhdGlvbik7Ci0gICAgfQotfQotCi12b2lkIFNWR1Jlc291cmNlczo6cmVz
b3VyY2VEZXN0cm95ZWQoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHJlc291cmNlKQotewot
ICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0gICAgaWYgKCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRh
ICYmICFtX21hcmtlckRhdGEgJiYgIW1fZmlsbFN0cm9rZURhdGEgJiYgIW1fbGlua2VkUmVzb3Vy
Y2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2xpbmtlZFJlc291cmNlID09IHJlc291
cmNlKSB7Ci0gICAgICAgIEFTU0VSVCghbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSk7Ci0gICAg
ICAgIEFTU0VSVCghbV9tYXJrZXJEYXRhKTsKLSAgICAgICAgQVNTRVJUKCFtX2ZpbGxTdHJva2VE
YXRhKTsKLSAgICAgICAgbV9saW5rZWRSZXNvdXJjZS0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNo
ZSgpOwotICAgICAgICBtX2xpbmtlZFJlc291cmNlID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHN3aXRjaCAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpKSB7Ci0gICAgY2FzZSBN
YXNrZXJSZXNvdXJjZVR5cGU6Ci0gICAgICAgIGlmICghbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0
YSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2Vy
RGF0YS0+bWFza2VyID09IHJlc291cmNlKSB7Ci0gICAgICAgICAgICBtX2NsaXBwZXJGaWx0ZXJN
YXNrZXJEYXRhLT5tYXNrZXItPnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoKTsKLSAgICAgICAg
ICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tlciA9IDA7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNYXJrZXJSZXNvdXJjZVR5cGU6Ci0gICAgICAgIGlmICgh
bV9tYXJrZXJEYXRhKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChtX21hcmtlckRh
dGEtPm1hcmtlclN0YXJ0ID09IHJlc291cmNlKSB7Ci0gICAgICAgICAgICBtX21hcmtlckRhdGEt
Pm1hcmtlclN0YXJ0LT5yZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7Ci0gICAgICAgICAgICBt
X21hcmtlckRhdGEtPm1hcmtlclN0YXJ0ID0gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9t
YXJrZXJEYXRhLT5tYXJrZXJNaWQgPT0gcmVzb3VyY2UpIHsKLSAgICAgICAgICAgIG1fbWFya2Vy
RGF0YS0+bWFya2VyTWlkLT5yZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7Ci0gICAgICAgICAg
ICBtX21hcmtlckRhdGEtPm1hcmtlck1pZCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1f
bWFya2VyRGF0YS0+bWFya2VyRW5kID09IHJlc291cmNlKSB7Ci0gICAgICAgICAgICBtX21hcmtl
ckRhdGEtPm1hcmtlckVuZC0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOwotICAgICAgICAg
ICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUGF0dGVyblJlc291cmNlVHlwZToKLSAgICBjYXNlIExpbmVhckdyYWRpZW50
UmVzb3VyY2VUeXBlOgotICAgIGNhc2UgUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGU6Ci0gICAg
ICAgIGlmICghbV9maWxsU3Ryb2tlRGF0YSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBp
ZiAobV9maWxsU3Ryb2tlRGF0YS0+ZmlsbCA9PSByZXNvdXJjZSkgewotICAgICAgICAgICAgbV9m
aWxsU3Ryb2tlRGF0YS0+ZmlsbC0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOwotICAgICAg
ICAgICAgbV9maWxsU3Ryb2tlRGF0YS0+ZmlsbCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZmlsbFN0cm9rZURhdGEtPnN0cm9rZSA9PSByZXNvdXJjZSkgewotICAgICAgICAgICAgbV9m
aWxsU3Ryb2tlRGF0YS0+c3Ryb2tlLT5yZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7Ci0gICAg
ICAgICAgICBtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UgPSAwOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRmlsdGVyUmVzb3VyY2VUeXBlOgotI2lmIEVOQUJMRShGSUxURVJT
KQotICAgICAgICBpZiAoIW1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgaWYgKG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlciA9PSBy
ZXNvdXJjZSkgewotICAgICAgICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVy
LT5yZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7Ci0gICAgICAgICAgICBtX2NsaXBwZXJGaWx0
ZXJNYXNrZXJEYXRhLT5maWx0ZXIgPSAwOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICBjYXNlIENsaXBw
ZXJSZXNvdXJjZVR5cGU6Ci0gICAgICAgIGlmICghbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSkK
LSAgICAgICAgICAgIGJyZWFrOyAKLSAgICAgICAgaWYgKG1fY2xpcHBlckZpbHRlck1hc2tlckRh
dGEtPmNsaXBwZXIgPT0gcmVzb3VyY2UpIHsKLSAgICAgICAgICAgIG1fY2xpcHBlckZpbHRlck1h
c2tlckRhdGEtPmNsaXBwZXItPnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoKTsKLSAgICAgICAg
ICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmNsaXBwZXIgPSAwOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgU29saWRDb2xvclJlc291cmNlVHlwZToKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lkIFNWR1Jlc291cmNlczo6YnVp
bGRTZXRPZlJlc291cmNlcyhIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj4mIHNl
dCkKLXsKLSAgICBpZiAoIW1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEgJiYgIW1fbWFya2VyRGF0
YSAmJiAhbV9maWxsU3Ryb2tlRGF0YSAmJiAhbV9saW5rZWRSZXNvdXJjZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1fbGlua2VkUmVzb3VyY2UpIHsKLSAgICAgICAgQVNTRVJUKCFtX2Ns
aXBwZXJGaWx0ZXJNYXNrZXJEYXRhKTsKLSAgICAgICAgQVNTRVJUKCFtX21hcmtlckRhdGEpOwot
ICAgICAgICBBU1NFUlQoIW1fZmlsbFN0cm9rZURhdGEpOwotICAgICAgICBzZXQuYWRkKG1fbGlu
a2VkUmVzb3VyY2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fY2xpcHBl
ckZpbHRlck1hc2tlckRhdGEpIHsKLSAgICAgICAgaWYgKG1fY2xpcHBlckZpbHRlck1hc2tlckRh
dGEtPmNsaXBwZXIpCi0gICAgICAgICAgICBzZXQuYWRkKG1fY2xpcHBlckZpbHRlck1hc2tlckRh
dGEtPmNsaXBwZXIpOwotI2lmIEVOQUJMRShGSUxURVJTKQotICAgICAgICBpZiAobV9jbGlwcGVy
RmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyKQotICAgICAgICAgICAgc2V0LmFkZChtX2NsaXBwZXJG
aWx0ZXJNYXNrZXJEYXRhLT5maWx0ZXIpOwotI2VuZGlmCi0gICAgICAgIGlmIChtX2NsaXBwZXJG
aWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXIpCi0gICAgICAgICAgICBzZXQuYWRkKG1fY2xpcHBlckZp
bHRlck1hc2tlckRhdGEtPm1hc2tlcik7Ci0gICAgfQotCi0gICAgaWYgKG1fbWFya2VyRGF0YSkg
ewotICAgICAgICBpZiAobV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydCkKLSAgICAgICAgICAgIHNl
dC5hZGQobV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydCk7Ci0gICAgICAgIGlmIChtX21hcmtlckRh
dGEtPm1hcmtlck1pZCkKLSAgICAgICAgICAgIHNldC5hZGQobV9tYXJrZXJEYXRhLT5tYXJrZXJN
aWQpOwotICAgICAgICBpZiAobV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQpCi0gICAgICAgICAgICBz
ZXQuYWRkKG1fbWFya2VyRGF0YS0+bWFya2VyRW5kKTsKLSAgICB9Ci0KLSAgICBpZiAobV9maWxs
U3Ryb2tlRGF0YSkgewotICAgICAgICBpZiAobV9maWxsU3Ryb2tlRGF0YS0+ZmlsbCkKLSAgICAg
ICAgICAgIHNldC5hZGQobV9maWxsU3Ryb2tlRGF0YS0+ZmlsbCk7Ci0gICAgICAgIGlmIChtX2Zp
bGxTdHJva2VEYXRhLT5zdHJva2UpCi0gICAgICAgICAgICBzZXQuYWRkKG1fZmlsbFN0cm9rZURh
dGEtPnN0cm9rZSk7Ci0gICAgfQotfQotCi1ib29sIFNWR1Jlc291cmNlczo6c2V0Q2xpcHBlcihS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIpCi17Ci0gICAgaWYgKCFjbGlwcGVyKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoY2xpcHBlci0+cmVzb3VyY2VUeXBl
KCkgPT0gQ2xpcHBlclJlc291cmNlVHlwZSk7Ci0KLSAgICBpZiAoIW1fY2xpcHBlckZpbHRlck1h
c2tlckRhdGEpCi0gICAgICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEgPSBDbGlwcGVyRmls
dGVyTWFza2VyRGF0YTo6Y3JlYXRlKCk7Ci0KLSAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRh
LT5jbGlwcGVyID0gY2xpcHBlcjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTVkdSZXNv
dXJjZXM6OnJlc2V0Q2xpcHBlcigpCi17Ci0gICAgQVNTRVJUKG1fY2xpcHBlckZpbHRlck1hc2tl
ckRhdGEpOwotICAgIEFTU0VSVChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyKTsK
LSAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyID0gMDsKLX0KLQotI2lmIEVO
QUJMRShGSUxURVJTKQotYm9vbCBTVkdSZXNvdXJjZXM6OnNldEZpbHRlcihSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlciogZmlsdGVyKQotewotICAgIGlmICghZmlsdGVyKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBBU1NFUlQoZmlsdGVyLT5yZXNvdXJjZVR5cGUoKSA9PSBGaWx0ZXJSZXNv
dXJjZVR5cGUpOwotCi0gICAgaWYgKCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKQotICAgICAg
ICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhID0gQ2xpcHBlckZpbHRlck1hc2tlckRhdGE6OmNy
ZWF0ZSgpOwotCi0gICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyID0gZmlsdGVy
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNWR1Jlc291cmNlczo6cmVzZXRGaWx0ZXIo
KQotewotICAgIEFTU0VSVChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKTsKLSAgICBBU1NFUlQo
bV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyKTsKLSAgICBtX2NsaXBwZXJGaWx0ZXJN
YXNrZXJEYXRhLT5maWx0ZXIgPSAwOwotfQotI2VuZGlmCi0KLWJvb2wgU1ZHUmVzb3VyY2VzOjpz
ZXRNYXJrZXJTdGFydChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyU3RhcnQpCi17Ci0g
ICAgaWYgKCFtYXJrZXJTdGFydCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJU
KG1hcmtlclN0YXJ0LT5yZXNvdXJjZVR5cGUoKSA9PSBNYXJrZXJSZXNvdXJjZVR5cGUpOwotCi0g
ICAgaWYgKCFtX21hcmtlckRhdGEpCi0gICAgICAgIG1fbWFya2VyRGF0YSA9IE1hcmtlckRhdGE6
OmNyZWF0ZSgpOwotCi0gICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydCA9IG1hcmtlclN0YXJ0
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNWR1Jlc291cmNlczo6cmVzZXRNYXJrZXJT
dGFydCgpCi17Ci0gICAgQVNTRVJUKG1fbWFya2VyRGF0YSk7Ci0gICAgQVNTRVJUKG1fbWFya2Vy
RGF0YS0+bWFya2VyU3RhcnQpOwotICAgIG1fbWFya2VyRGF0YS0+bWFya2VyU3RhcnQgPSAwOwot
fQotCi1ib29sIFNWR1Jlc291cmNlczo6c2V0TWFya2VyTWlkKFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyKiBtYXJrZXJNaWQpCi17Ci0gICAgaWYgKCFtYXJrZXJNaWQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEFTU0VSVChtYXJrZXJNaWQtPnJlc291cmNlVHlwZSgpID09IE1hcmtlclJl
c291cmNlVHlwZSk7Ci0KLSAgICBpZiAoIW1fbWFya2VyRGF0YSkKLSAgICAgICAgbV9tYXJrZXJE
YXRhID0gTWFya2VyRGF0YTo6Y3JlYXRlKCk7Ci0KLSAgICBtX21hcmtlckRhdGEtPm1hcmtlck1p
ZCA9IG1hcmtlck1pZDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXM6
OnJlc2V0TWFya2VyTWlkKCkKLXsKLSAgICBBU1NFUlQobV9tYXJrZXJEYXRhKTsKLSAgICBBU1NF
UlQobV9tYXJrZXJEYXRhLT5tYXJrZXJNaWQpOwotICAgIG1fbWFya2VyRGF0YS0+bWFya2VyTWlk
ID0gMDsKLX0KLQotYm9vbCBTVkdSZXNvdXJjZXM6OnNldE1hcmtlckVuZChSZW5kZXJTVkdSZXNv
dXJjZU1hcmtlciogbWFya2VyRW5kKQotewotICAgIGlmICghbWFya2VyRW5kKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQobWFya2VyRW5kLT5yZXNvdXJjZVR5cGUoKSA9PSBN
YXJrZXJSZXNvdXJjZVR5cGUpOwotCi0gICAgaWYgKCFtX21hcmtlckRhdGEpCi0gICAgICAgIG1f
bWFya2VyRGF0YSA9IE1hcmtlckRhdGE6OmNyZWF0ZSgpOwotCi0gICAgbV9tYXJrZXJEYXRhLT5t
YXJrZXJFbmQgPSBtYXJrZXJFbmQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZHUmVz
b3VyY2VzOjpyZXNldE1hcmtlckVuZCgpCi17Ci0gICAgQVNTRVJUKG1fbWFya2VyRGF0YSk7Ci0g
ICAgQVNTRVJUKG1fbWFya2VyRGF0YS0+bWFya2VyRW5kKTsKLSAgICBtX21hcmtlckRhdGEtPm1h
cmtlckVuZCA9IDA7Ci19Ci0KLWJvb2wgU1ZHUmVzb3VyY2VzOjpzZXRNYXNrZXIoUmVuZGVyU1ZH
UmVzb3VyY2VNYXNrZXIqIG1hc2tlcikKLXsKLSAgICBpZiAoIW1hc2tlcikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKG1hc2tlci0+cmVzb3VyY2VUeXBlKCkgPT0gTWFza2Vy
UmVzb3VyY2VUeXBlKTsKLQotICAgIGlmICghbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSkKLSAg
ICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSA9IENsaXBwZXJGaWx0ZXJNYXNrZXJEYXRh
OjpjcmVhdGUoKTsKLQotICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tlciA9IG1h
c2tlcjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXM6OnJlc2V0TWFz
a2VyKCkKLXsKLSAgICBBU1NFUlQobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSk7Ci0gICAgQVNT
RVJUKG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tlcik7Ci0gICAgbV9jbGlwcGVyRmls
dGVyTWFza2VyRGF0YS0+bWFza2VyID0gMDsKLX0KLQotYm9vbCBTVkdSZXNvdXJjZXM6OnNldEZp
bGwoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGZpbGwpCi17Ci0gICAgaWYgKCFmaWxsKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoZmlsbC0+cmVzb3VyY2VUeXBlKCkg
PT0gUGF0dGVyblJlc291cmNlVHlwZQotICAgICAgICAgICB8fCBmaWxsLT5yZXNvdXJjZVR5cGUo
KSA9PSBMaW5lYXJHcmFkaWVudFJlc291cmNlVHlwZQotICAgICAgICAgICB8fCBmaWxsLT5yZXNv
dXJjZVR5cGUoKSA9PSBSYWRpYWxHcmFkaWVudFJlc291cmNlVHlwZSk7Ci0KLSAgICBpZiAoIW1f
ZmlsbFN0cm9rZURhdGEpCi0gICAgICAgIG1fZmlsbFN0cm9rZURhdGEgPSBGaWxsU3Ryb2tlRGF0
YTo6Y3JlYXRlKCk7Ci0KLSAgICBtX2ZpbGxTdHJva2VEYXRhLT5maWxsID0gZmlsbDsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXM6OnJlc2V0RmlsbCgpCi17Ci0gICAg
QVNTRVJUKG1fZmlsbFN0cm9rZURhdGEpOwotICAgIEFTU0VSVChtX2ZpbGxTdHJva2VEYXRhLT5m
aWxsKTsKLSAgICBtX2ZpbGxTdHJva2VEYXRhLT5maWxsID0gMDsKLX0KLQotYm9vbCBTVkdSZXNv
dXJjZXM6OnNldFN0cm9rZShSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogc3Ryb2tlKQotewot
ICAgIGlmICghc3Ryb2tlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoc3Ry
b2tlLT5yZXNvdXJjZVR5cGUoKSA9PSBQYXR0ZXJuUmVzb3VyY2VUeXBlCi0gICAgICAgICAgIHx8
IHN0cm9rZS0+cmVzb3VyY2VUeXBlKCkgPT0gTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGUKLSAg
ICAgICAgICAgfHwgc3Ryb2tlLT5yZXNvdXJjZVR5cGUoKSA9PSBSYWRpYWxHcmFkaWVudFJlc291
cmNlVHlwZSk7Ci0KLSAgICBpZiAoIW1fZmlsbFN0cm9rZURhdGEpCi0gICAgICAgIG1fZmlsbFN0
cm9rZURhdGEgPSBGaWxsU3Ryb2tlRGF0YTo6Y3JlYXRlKCk7Ci0KLSAgICBtX2ZpbGxTdHJva2VE
YXRhLT5zdHJva2UgPSBzdHJva2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZHUmVz
b3VyY2VzOjpyZXNldFN0cm9rZSgpCi17Ci0gICAgQVNTRVJUKG1fZmlsbFN0cm9rZURhdGEpOwot
ICAgIEFTU0VSVChtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UpOwotICAgIG1fZmlsbFN0cm9rZURh
dGEtPnN0cm9rZSA9IDA7Ci19Ci0KLWJvb2wgU1ZHUmVzb3VyY2VzOjpzZXRMaW5rZWRSZXNvdXJj
ZShSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogbGlua2VkUmVzb3VyY2UpCi17Ci0gICAgaWYg
KCFsaW5rZWRSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9saW5rZWRS
ZXNvdXJjZSA9IGxpbmtlZFJlc291cmNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNW
R1Jlc291cmNlczo6cmVzZXRMaW5rZWRSZXNvdXJjZSgpCi17Ci0gICAgQVNTRVJUKG1fbGlua2Vk
UmVzb3VyY2UpOwotICAgIG1fbGlua2VkUmVzb3VyY2UgPSAwOwotfQotCi0jaWZuZGVmIE5ERUJV
Rwotdm9pZCBTVkdSZXNvdXJjZXM6OmR1bXAoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17
Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgQVNTRVJUKG9iamVjdC0+bm9kZSgpKTsKLQotICAg
IGZwcmludGYoc3RkZXJyLCAiLT4gdGhpcz0lcCwgU1ZHUmVzb3VyY2VzKHJlbmRlcmVyPSVwLCBu
b2RlPSVwKVxuIiwgdGhpcywgb2JqZWN0LCBvYmplY3QtPm5vZGUoKSk7Ci0gICAgZnByaW50Zihz
dGRlcnIsICIgfCBET00gVHJlZTpcbiIpOwotICAgIG9iamVjdC0+bm9kZSgpLT5zaG93VHJlZUZv
clRoaXMoKTsKLQotICAgIGZwcmludGYoc3RkZXJyLCAiXG4gfCBMaXN0IG9mIHJlc291cmNlczpc
biIpOwotICAgIGlmIChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKSB7Ci0gICAgICAgIGlmIChS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJE
YXRhLT5jbGlwcGVyKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfC0+IENsaXBwZXIg
ICAgOiAlcCAobm9kZT0lcClcbiIsIGNsaXBwZXIsIGNsaXBwZXItPm5vZGUoKSk7Ci0jaWYgRU5B
QkxFKEZJTFRFUlMpCi0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVy
ID0gbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyKQotICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICIgfC0+IEZpbHRlciAgICAgOiAlcCAobm9kZT0lcClcbiIsIGZpbHRlciwgZmls
dGVyLT5ub2RlKCkpOwotI2VuZGlmCi0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hc2tl
ciogbWFza2VyID0gbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+bWFza2VyKQotICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIgfC0+IE1hc2tlciAgICAgOiAlcCAobm9kZT0lcClcbiIsIG1h
c2tlciwgbWFza2VyLT5ub2RlKCkpOwotICAgIH0KLQotICAgIGlmIChtX21hcmtlckRhdGEpIHsK
LSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9IG1fbWFy
a2VyRGF0YS0+bWFya2VyU3RhcnQpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiB8LT4g
TWFya2VyU3RhcnQ6ICVwIChub2RlPSVwKVxuIiwgbWFya2VyU3RhcnQsIG1hcmtlclN0YXJ0LT5u
b2RlKCkpOwotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck1pZCA9
IG1fbWFya2VyRGF0YS0+bWFya2VyTWlkKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIg
fC0+IE1hcmtlck1pZCAgOiAlcCAobm9kZT0lcClcbiIsIG1hcmtlck1pZCwgbWFya2VyTWlkLT5u
b2RlKCkpOwotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCA9
IG1fbWFya2VyRGF0YS0+bWFya2VyRW5kKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIg
fC0+IE1hcmtlckVuZCAgOiAlcCAobm9kZT0lcClcbiIsIG1hcmtlckVuZCwgbWFya2VyRW5kLT5u
b2RlKCkpOwotICAgIH0KLQotICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhKSB7Ci0gICAgICAgIGlm
IChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogZmlsbCA9IG1fZmlsbFN0cm9rZURhdGEtPmZp
bGwpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiB8LT4gRmlsbCAgICAgICA6ICVwIChu
b2RlPSVwKVxuIiwgZmlsbCwgZmlsbC0+bm9kZSgpKTsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyKiBzdHJva2UgPSBtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UpCi0gICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiB8LT4gU3Ryb2tlICAgICA6ICVwIChub2RlPSVwKVxu
Iiwgc3Ryb2tlLCBzdHJva2UtPm5vZGUoKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fbGlua2VkUmVz
b3VyY2UpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHwtPiB4bGluazpocmVmIDogJXAgKG5v
ZGU9JXApXG4iLCBtX2xpbmtlZFJlc291cmNlLCBtX2xpbmtlZFJlc291cmNlLT5ub2RlKCkpOwot
fQotI2VuZGlmCi0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNv
dXJjZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuaAko
cmV2aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZu
ZGVmIFNWR1Jlc291cmNlc19oCi0jZGVmaW5lIFNWR1Jlc291cmNlc19oCi0KLSNpZiBFTkFCTEUo
U1ZHKQotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBSZW5kZXJP
YmplY3Q7Ci1jbGFzcyBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI7Ci1jbGFzcyBSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lcjsKLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOwotY2xhc3Mg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI7Ci1jbGFzcyBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjsK
LWNsYXNzIFNWR1JlbmRlclN0eWxlOwotCi0vLyBIb2xkcyBhIHNldCBvZiByZXNvdXJjZXMgYXNz
b2NpYXRlZCB3aXRoIGEgUmVuZGVyT2JqZWN0Ci1jbGFzcyBTVkdSZXNvdXJjZXMgOiBwdWJsaWMg
Tm9uY29weWFibGUgewotcHVibGljOgotICAgIFNWR1Jlc291cmNlcygpOwotCi0gICAgYm9vbCBi
dWlsZENhY2hlZFJlc291cmNlcyhjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBTVkdSZW5kZXJT
dHlsZSopOwotCi0gICAgLy8gT3JkaW5hcnkgcmVzb3VyY2VzCi0gICAgUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyKiBjbGlwcGVyKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwcGVyRmlsdGVyTWFza2Vy
RGF0YSA/IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmNsaXBwZXIgOiAwOyB9Ci0jaWYgRU5B
QkxFKEZJTFRFUlMpCi0gICAgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEgPyBtX2NsaXBwZXJGaWx0ZXJNYXNr
ZXJEYXRhLT5maWx0ZXIgOiAwOyB9Ci0jZW5kaWYKLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
ciogbWFya2VyU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX21hcmtlckRhdGEgPyBtX21hcmtlckRh
dGEtPm1hcmtlclN0YXJ0IDogMDsgfQotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJr
ZXJNaWQoKSBjb25zdCB7IHJldHVybiBtX21hcmtlckRhdGEgPyBtX21hcmtlckRhdGEtPm1hcmtl
ck1pZCA6IDA7IH0KLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRW5kKCkgY29u
c3QgeyByZXR1cm4gbV9tYXJrZXJEYXRhID8gbV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQgOiAwOyB9
Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqIG1hc2tlcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2xpcHBlckZpbHRlck1hc2tlckRhdGEgPyBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNr
ZXIgOiAwOyB9Ci0KLSAgICAvLyBQYWludCBzZXJ2ZXJzCi0gICAgUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXIqIGZpbGwoKSBjb25zdCB7IHJldHVybiBtX2ZpbGxTdHJva2VEYXRhID8gbV9maWxs
U3Ryb2tlRGF0YS0+ZmlsbCA6IDA7IH0KLSAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciog
c3Ryb2tlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsU3Ryb2tlRGF0YSA/IG1fZmlsbFN0cm9rZURh
dGEtPnN0cm9rZSA6IDA7IH0KLQotICAgIC8vIENoYWluYWJsZSByZXNvdXJjZXMgLSBsaW5rZWQg
dGhyb3VnaCB4bGluazpocmVmCi0gICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGxpbmtl
ZFJlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9saW5rZWRSZXNvdXJjZTsgfQotCi0gICAgdm9p
ZCBidWlsZFNldE9mUmVzb3VyY2VzKEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIq
PiYpOwotCi0gICAgLy8gTWV0aG9kcyBvcGVyYXRpbmcgb24gYWxsIGNhY2hlZCByZXNvdXJjZXMK
LSAgICB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtG
b3JJbnZhbGlkYXRpb24gPSB0cnVlKSBjb25zdDsKLSAgICB2b2lkIHJlc291cmNlRGVzdHJveWVk
KFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKik7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9p
ZCBkdW1wKGNvbnN0IFJlbmRlck9iamVjdCopOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZnJp
ZW5kIGNsYXNzIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyOwotCi0gICAgLy8gT25seSB1c2VkIGJ5
IFNWR1Jlc291cmNlc0NhY2hlIGN5Y2xlIGRldGVjdGlvbiBsb2dpYwotICAgIHZvaWQgcmVzZXRD
bGlwcGVyKCk7Ci0jaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAgdm9pZCByZXNldEZpbHRlcigpOwot
I2VuZGlmCi0gICAgdm9pZCByZXNldE1hcmtlclN0YXJ0KCk7Ci0gICAgdm9pZCByZXNldE1hcmtl
ck1pZCgpOwotICAgIHZvaWQgcmVzZXRNYXJrZXJFbmQoKTsKLSAgICB2b2lkIHJlc2V0TWFza2Vy
KCk7Ci0gICAgdm9pZCByZXNldEZpbGwoKTsKLSAgICB2b2lkIHJlc2V0U3Ryb2tlKCk7Ci0gICAg
dm9pZCByZXNldExpbmtlZFJlc291cmNlKCk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBzZXRDbGlw
cGVyKFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciopOwotI2lmIEVOQUJMRShGSUxURVJTKQotICAg
IGJvb2wgc2V0RmlsdGVyKFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKik7Ci0jZW5kaWYKLSAgICBi
b29sIHNldE1hcmtlclN0YXJ0KFJlbmRlclNWR1Jlc291cmNlTWFya2VyKik7Ci0gICAgYm9vbCBz
ZXRNYXJrZXJNaWQoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqKTsKLSAgICBib29sIHNldE1hcmtl
ckVuZChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciopOwotICAgIGJvb2wgc2V0TWFza2VyKFJlbmRl
clNWR1Jlc291cmNlTWFza2VyKik7Ci0gICAgYm9vbCBzZXRGaWxsKFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyKik7Ci0gICAgYm9vbCBzZXRTdHJva2UoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIqKTsKLSAgICBib29sIHNldExpbmtlZFJlc291cmNlKFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyKik7Ci0KLSAgICAvLyBGcm9tIFNWRyAxLjEgMm5kIEVkaXRpb24KLSAgICAvLyBjbGlwcGVy
OiAnY29udGFpbmVyIGVsZW1lbnRzJyBhbmQgJ2dyYXBoaWNzIGVsZW1lbnRzJwotICAgIC8vIGZp
bHRlcjogICdjb250YWluZXIgZWxlbWVudHMnIGFuZCAnZ3JhcGhpY3MgZWxlbWVudHMnCi0gICAg
Ly8gbWFza2VyOiAgJ2NvbnRhaW5lciBlbGVtZW50cycgYW5kICdncmFwaGljcyBlbGVtZW50cycK
LSAgICAvLyAtPiBhLCBjaXJjbGUsIGRlZnMsIGVsbGlwc2UsIGdseXBoLCBnLCBpbWFnZSwgbGlu
ZSwgbWFya2VyLCBtYXNrLCBtaXNzaW5nLWdseXBoLCBwYXRoLCBwYXR0ZXJuLCBwb2x5Z29uLCBw
b2x5bGluZSwgcmVjdCwgc3ZnLCBzd2l0Y2gsIHN5bWJvbCwgdGV4dCwgdXNlCi0gICAgc3RydWN0
IENsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhIHsKLSAgICAgICAgQ2xpcHBlckZpbHRlck1hc2tlckRh
dGEoKQotICAgICAgICAgICAgOiBjbGlwcGVyKDApCi0jaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAg
ICAgICAgICAsIGZpbHRlcigwKQotI2VuZGlmCi0gICAgICAgICAgICAsIG1hc2tlcigwKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxDbGlwcGVyRmls
dGVyTWFza2VyRGF0YT4gY3JlYXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5l
dyBDbGlwcGVyRmlsdGVyTWFza2VyRGF0YTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlciogY2xpcHBlcjsKLSNpZiBFTkFCTEUoRklMVEVSUykKLSAgICAgICAg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlcjsKLSNlbmRpZgotICAgICAgICBSZW5kZXJT
VkdSZXNvdXJjZU1hc2tlciogbWFza2VyOwotICAgIH07Ci0KLSAgICAvLyBGcm9tIFNWRyAxLjEg
Mm5kIEVkaXRpb24KLSAgICAvLyBtYXJrZXI6IGxpbmUsIHBhdGgsIHBvbHlnb24sIHBvbHlsaW5l
Ci0gICAgc3RydWN0IE1hcmtlckRhdGEgewotICAgICAgICBNYXJrZXJEYXRhKCkKLSAgICAgICAg
ICAgIDogbWFya2VyU3RhcnQoMCkKLSAgICAgICAgICAgICwgbWFya2VyTWlkKDApCi0gICAgICAg
ICAgICAsIG1hcmtlckVuZCgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0
aWMgUGFzc093blB0cjxNYXJrZXJEYXRhPiBjcmVhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3IE1hcmtlckRhdGE7Ci0gICAgICAgIH0KLQotICAgICAgICBSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlciogbWFya2VyU3RhcnQ7Ci0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyKiBtYXJrZXJNaWQ7Ci0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJF
bmQ7Ci0gICAgfTsKLQotICAgIC8vIEZyb20gU1ZHIDEuMSAybmQgRWRpdGlvbgotICAgIC8vIGZp
bGw6ICAgICAgICdzaGFwZXMnIGFuZCAndGV4dCBjb250ZW50IGVsZW1lbnRzJwotICAgIC8vIHN0
cm9rZTogICAgICdzaGFwZXMnIGFuZCAndGV4dCBjb250ZW50IGVsZW1lbnRzJwotICAgIC8vIC0+
IGFsdEdseXBoLCBjaXJjbGUsIGVsbGlwc2UsIGxpbmUsIHBhdGgsIHBvbHlnb24sIHBvbHlsaW5l
LCByZWN0LCB0ZXh0LCB0ZXh0UGF0aCwgdHJlZiwgdHNwYW4KLSAgICBzdHJ1Y3QgRmlsbFN0cm9r
ZURhdGEgewotICAgICAgICBGaWxsU3Ryb2tlRGF0YSgpCi0gICAgICAgICAgICA6IGZpbGwoMCkK
LSAgICAgICAgICAgICwgc3Ryb2tlKDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAg
IHN0YXRpYyBQYXNzT3duUHRyPEZpbGxTdHJva2VEYXRhPiBjcmVhdGUoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IEZpbGxTdHJva2VEYXRhOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGZpbGw7Ci0gICAgICAgIFJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyKiBzdHJva2U7Ci0gICAgfTsKLQotICAgIE93blB0cjxDbGlwcGVyRmls
dGVyTWFza2VyRGF0YT4gbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YTsKLSAgICBPd25QdHI8TWFy
a2VyRGF0YT4gbV9tYXJrZXJEYXRhOwotICAgIE93blB0cjxGaWxsU3Ryb2tlRGF0YT4gbV9maWxs
U3Ryb2tlRGF0YTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogbV9saW5rZWRSZXNv
dXJjZTsKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1NWR1Jlc291cmNlc0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9T
VkdSZXNvdXJjZXNDYWNoZS5jcHAJKHJldmlzaW9uIDc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2NSArMCwwIEBA
Ci0vKgotICAgIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
VkdSZXNvdXJjZXNDYWNoZS5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5o
IgotI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlc0N5Y2xl
U29sdmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU1ZHUmVzb3VyY2VzQ2FjaGU6OlNW
R1Jlc291cmNlc0NhY2hlKCkKLXsKLX0KLQotU1ZHUmVzb3VyY2VzQ2FjaGU6On5TVkdSZXNvdXJj
ZXNDYWNoZSgpCi17Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1fY2FjaGUpOwotfQotCi12b2lkIFNW
R1Jlc291cmNlc0NhY2hlOjphZGRSZXNvdXJjZXNGcm9tUmVuZGVyT2JqZWN0KFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgQVNTRVJUKG9iamVj
dCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLSAgICBBU1NFUlQoIW1fY2FjaGUuY29udGFpbnMob2Jq
ZWN0KSk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3Zn
U3R5bGUoKTsKLSAgICBBU1NFUlQoc3ZnU3R5bGUpOwotCi0gICAgLy8gQnVpbGQgYSBsaXN0IG9m
IGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXNzZWQgUmVuZGVyT2JqZWN0Ci0g
ICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBuZXcgU1ZHUmVzb3VyY2VzOwotICAgIGlmICgh
cmVzb3VyY2VzLT5idWlsZENhY2hlZFJlc291cmNlcyhvYmplY3QsIHN2Z1N0eWxlKSkgewotICAg
ICAgICBkZWxldGUgcmVzb3VyY2VzOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
UHV0IG9iamVjdCBpbiBjYWNoZS4KLSAgICBtX2NhY2hlLnNldChvYmplY3QsIHJlc291cmNlcyk7
Ci0KLSAgICAvLyBSdW4gY3ljbGUtZGV0ZWN0aW9uIF9hZnRlcndhcmRzXywgc28gc2VsZi1yZWZl
cmVuY2VzIGNhbiBiZSBjYXVnaHQgYXMgd2VsbC4KLSAgICBTVkdSZXNvdXJjZXNDeWNsZVNvbHZl
ciBzb2x2ZXIob2JqZWN0LCByZXNvdXJjZXMpOwotICAgIHNvbHZlci5yZXNvbHZlQ3ljbGVzKCk7
Ci0KLSAgICAvLyBXYWxrIHJlc291cmNlcyBhbmQgcmVnaXN0ZXIgdGhlIHJlbmRlciBvYmplY3Qg
YXQgZWFjaCByZXNvdXJjZXMuCi0gICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
cio+IHJlc291cmNlU2V0OwotICAgIHJlc291cmNlcy0+YnVpbGRTZXRPZlJlc291cmNlcyhyZXNv
dXJjZVNldCk7Ci0KLSAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0
ZXJhdG9yIGVuZCA9IHJlc291cmNlU2V0LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IHJlc291cmNlU2V0LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmFkZENsaWVudChvYmplY3QpOwotfQot
Ci12b2lkIFNWR1Jlc291cmNlc0NhY2hlOjpyZW1vdmVSZXNvdXJjZXNGcm9tUmVuZGVyT2JqZWN0
KFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIGlmICghbV9jYWNoZS5jb250YWlucyhvYmpl
Y3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IG1f
Y2FjaGUuZ2V0KG9iamVjdCk7Ci0KLSAgICAvLyBXYWxrIHJlc291cmNlcyBhbmQgcmVnaXN0ZXIg
dGhlIHJlbmRlciBvYmplY3QgYXQgZWFjaCByZXNvdXJjZXMuCi0gICAgSGFzaFNldDxSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcio+IHJlc291cmNlU2V0OwotICAgIHJlc291cmNlcy0+YnVpbGRT
ZXRPZlJlc291cmNlcyhyZXNvdXJjZVNldCk7Ci0KLSAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGVuZCA9IHJlc291cmNlU2V0LmVuZCgpOwotICAgIGZv
ciAoSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IHJl
c291cmNlU2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnJlbW92
ZUNsaWVudChvYmplY3QpOwotCi0gICAgZGVsZXRlIG1fY2FjaGUudGFrZShvYmplY3QpOwotfQot
Ci1zdGF0aWMgaW5saW5lIFNWR1Jlc291cmNlc0NhY2hlKiByZXNvdXJjZXNDYWNoZUZyb21SZW5k
ZXJPYmplY3QoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLXsKLSAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSByZW5kZXJlci0+ZG9jdW1lbnQoKTsKLSAgICBBU1NFUlQoZG9jdW1lbnQpOwotCi0gICAg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25zID0gZG9jdW1lbnQtPmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKTsKLSAgICBBU1NFUlQoZXh0ZW5zaW9ucyk7Ci0KLSAgICBTVkdSZXNvdXJjZXND
YWNoZSogY2FjaGUgPSBleHRlbnNpb25zLT5yZXNvdXJjZXNDYWNoZSgpOwotICAgIEFTU0VSVChj
YWNoZSk7Ci0KLSAgICByZXR1cm4gY2FjaGU7Ci19Ci0KLVNWR1Jlc291cmNlcyogU1ZHUmVzb3Vy
Y2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQotewotICAgIEFTU0VSVChyZW5kZXJlcik7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGUq
IGNhY2hlID0gcmVzb3VyY2VzQ2FjaGVGcm9tUmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKLSAgICBp
ZiAoIWNhY2hlLT5tX2NhY2hlLmNvbnRhaW5zKHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gY2FjaGUtPm1fY2FjaGUuZ2V0KHJlbmRlcmVyKTsKLX0KLQotdm9pZCBT
VkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVj
dCkKLXsKLSAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpj
YWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3Qob2JqZWN0KTsKLSAgICBpZiAoIXJlc291cmNl
cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVzb3VyY2VzLT5yZW1vdmVDbGllbnRGcm9tQ2Fj
aGUob2JqZWN0KTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFu
Z2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBS
ZW5kZXJTdHlsZSogbmV3U3R5bGUpCi17Ci0gICAgQVNTRVJUKHJlbmRlcmVyKTsKLSAgICBpZiAo
ZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VFcXVhbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xp
ZW50VXBkYXRlZEZyb21FbGVtZW50KHJlbmRlcmVyLCBuZXdTdHlsZSk7Ci0gICAgUmVuZGVyU1ZH
UmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5k
ZXJlciwgZmFsc2UpOwotfQotIAotdm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50VXBkYXRl
ZEZyb21FbGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBu
ZXdTdHlsZSkKLXsKLSAgICBBU1NFUlQocmVuZGVyZXIpOwotICAgIEFTU0VSVChyZW5kZXJlci0+
cGFyZW50KCkpOwotCi0gICAgU1ZHUmVzb3VyY2VzQ2FjaGUqIGNhY2hlID0gcmVzb3VyY2VzQ2Fj
aGVGcm9tUmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKLSAgICBjYWNoZS0+cmVtb3ZlUmVzb3VyY2Vz
RnJvbVJlbmRlck9iamVjdChyZW5kZXJlcik7Ci0gICAgY2FjaGUtPmFkZFJlc291cmNlc0Zyb21S
ZW5kZXJPYmplY3QocmVuZGVyZXIsIG5ld1N0eWxlKTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXND
YWNoZTo6Y2xpZW50RGVzdHJveWVkKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17Ci0gICAgQVNT
RVJUKHJlbmRlcmVyKTsKLSAgICBTVkdSZXNvdXJjZXNDYWNoZSogY2FjaGUgPSByZXNvdXJjZXND
YWNoZUZyb21SZW5kZXJPYmplY3QocmVuZGVyZXIpOwotICAgIGNhY2hlLT5yZW1vdmVSZXNvdXJj
ZXNGcm9tUmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXNDYWNo
ZTo6cmVzb3VyY2VEZXN0cm95ZWQoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHJlc291cmNl
KQotewotICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGUqIGNhY2hl
ID0gcmVzb3VyY2VzQ2FjaGVGcm9tUmVuZGVyT2JqZWN0KHJlc291cmNlKTsKLQotICAgIC8vIFRo
ZSByZXNvdXJjZSBpdHNlbGYgbWF5IGhhdmUgY2xpZW50cywgdGhhdCBuZWVkIHRvIGJlIG5vdGlm
aWVkLgotICAgIGNhY2hlLT5yZW1vdmVSZXNvdXJjZXNGcm9tUmVuZGVyT2JqZWN0KHJlc291cmNl
KTsKLQotICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9y
IGVuZCA9IGNhY2hlLT5tX2NhY2hlLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxSZW5kZXJPYmpl
Y3QqLCBTVkdSZXNvdXJjZXMqPjo6aXRlcmF0b3IgaXQgPSBjYWNoZS0+bV9jYWNoZS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnJlc291cmNlRGVzdHJveWVk
KHJlc291cmNlKTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NW
R1Jlc291cmNlc0NhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVz
b3VyY2VzQ2FjaGUuaAkocmV2aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdS
ZXNvdXJjZXNDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gICAg
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotKi8KLQotI2lmbmRlZiBTVkdSZXNvdXJjZXNDYWNoZV9oCi0jZGVmaW5lIFNWR1Jl
c291cmNlc0NhY2hlX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGVD
b25zdGFudHMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclN0eWxlOwotY2xhc3MgUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXI7Ci1jbGFzcyBTVkdSZXNvdXJjZXM7Ci0KLWNsYXNzIFNW
R1Jlc291cmNlc0NhY2hlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBTVkdS
ZXNvdXJjZXNDYWNoZSgpOwotICAgIH5TVkdSZXNvdXJjZXNDYWNoZSgpOwotCi0gICAgdm9pZCBh
ZGRSZXNvdXJjZXNGcm9tUmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0
eWxlKik7Ci0gICAgdm9pZCByZW1vdmVSZXNvdXJjZXNGcm9tUmVuZGVyT2JqZWN0KFJlbmRlck9i
amVjdCopOwotICAgIHN0YXRpYyBTVkdSZXNvdXJjZXMqIGNhY2hlZFJlc291cmNlc0ZvclJlbmRl
ck9iamVjdChSZW5kZXJPYmplY3QqKTsKLQotICAgIC8vIENhbGxlZCBmcm9tIGFsbCBTVkcgcmVu
ZGVyZXJzIGRlc3Ryb3koKSBtZXRob2RzIC0gZXhjZXB0IGZvciBSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lci4KLSAgICBzdGF0aWMgdm9pZCBjbGllbnREZXN0cm95ZWQoUmVuZGVyT2JqZWN0Kik7
Ci0KLSAgICAvLyBDYWxsZWQgZnJvbSBhbGwgU1ZHIHJlbmRlcmVycyBsYXlvdXQoKSBtZXRob2Rz
LgotICAgIHN0YXRpYyB2b2lkIGNsaWVudExheW91dENoYW5nZWQoUmVuZGVyT2JqZWN0Kik7Ci0K
LSAgICAvLyBDYWxsZWQgZnJvbSBhbGwgU1ZHIHJlbmRlcmVycyBzdHlsZURpZENoYW5nZSgpIG1l
dGhvZHMuCi0gICAgc3RhdGljIHZvaWQgY2xpZW50U3R5bGVDaGFuZ2VkKFJlbmRlck9iamVjdCos
IFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKLQotICAgIC8v
IENhbGxlZCBmcm9tIGFsbCBTVkcgcmVuZGVyZXJzIHVwZGF0ZUZyb21FbGVtZW50KCkgbWV0aG9k
cy4KLSAgICBzdGF0aWMgdm9pZCBjbGllbnRVcGRhdGVkRnJvbUVsZW1lbnQoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKLQotICAgIC8vIENhbGxlZCBmcm9tIFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpkZXN0cm95KCkuCi0gICAgc3RhdGljIHZvaWQgcmVz
b3VyY2VEZXN0cm95ZWQoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqKTsKLQotcHJpdmF0ZToK
LSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIFNWR1Jlc291cmNlcyo+IG1fY2FjaGU7Ci19Owot
Ci19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJj
ZXNDeWNsZVNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVz
b3VyY2VzQ3ljbGVTb2x2ZXIuY3BwCShyZXZpc2lvbiA3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMTMg
KzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCIKLQotLy8gU2V0IHRvIGEgdmFsdWUgPiAw
LCB0byBkZWJ1ZyB0aGUgcmVzb3VyY2UgY2FjaGUuCi0jZGVmaW5lIERFQlVHX0NZQ0xFX0RFVEVD
VElPTiAwCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xp
cHBlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCi0jaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1h
c2tlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdHcmFk
aWVudEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdQYXR0ZXJuRWxlbWVudC5oIgotI2luY2x1ZGUg
IlNWR1Jlc291cmNlcy5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXI6OlNWR1Jlc291cmNlc0N5
Y2xlU29sdmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFNWR1Jlc291cmNlcyogcmVzb3VyY2Vz
KQotICAgIDogbV9yZW5kZXJlcihyZW5kZXJlcikKLSAgICAsIG1fcmVzb3VyY2VzKHJlc291cmNl
cykKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJlcik7Ci0gICAgQVNTRVJUKG1fcmVzb3VyY2VzKTsK
LX0KLQotU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXI6On5TVkdSZXNvdXJjZXNDeWNsZVNvbHZlcigp
Ci17Ci19Ci0KLWJvb2wgU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXI6OnJlc291cmNlQ29udGFpbnND
eWNsZXMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVy
ZXIpOwotCi0gICAgLy8gRmlyc3Qgb3BlcmF0ZSBvbiB0aGUgcmVzb3VyY2VzIG9mIHRoZSBnaXZl
biByZW5kZXJlci4KLSAgICAvLyA8bWFya2VyIGlkPSJhIj4gPHBhdGggbWFya2VyLXN0YXJ0PSJ1
cmwoI2IpIi8+IC4uLgotICAgIC8vIDxtYXJrZXIgaWQ9ImIiIG1hcmtlci1zdGFydD0idXJsKCNh
KSIvPgotICAgIGlmIChTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hl
OjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QocmVuZGVyZXIpKSB7Ci0gICAgICAgIEhh
c2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPiByZXNvdXJjZVNldDsKLSAgICAgICAg
cmVzb3VyY2VzLT5idWlsZFNldE9mUmVzb3VyY2VzKHJlc291cmNlU2V0KTsKLQotICAgICAgICAv
LyBXYWxrIGFsbCByZXNvdXJjZXMgYW5kIGNoZWNrIHdoZXRlciB0aGV5IHJlZmVyZW5jZSBhbnkg
cmVzb3VyY2UgY29udGFpbmVkIGluIHRoZSByZXNvdXJjZXMgc2V0LgotICAgICAgICBIYXNoU2V0
PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGVuZCA9IHJlc291cmNlU2V0
LmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIq
Pjo6aXRlcmF0b3IgaXQgPSByZXNvdXJjZVNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIGlmIChtX2FsbFJlc291cmNlcy5jb250YWlucygqaXQpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlbiBvcGVy
YXRlIG9uIHRoZSBjaGlsZCByZXNvdXJjZXMgb2YgdGhlIGdpdmVuIHJlbmRlcmVyLgotICAgIC8v
IDxtYXJrZXIgaWQ9ImEiPiA8cGF0aCBtYXJrZXItc3RhcnQ9InVybCgjYikiLz4gLi4uCi0gICAg
Ly8gPG1hcmtlciBpZD0iYiI+IDxwYXRoIG1hcmtlci1zdGFydD0idXJsKCNhKSIvPiAuLi4KLSAg
ICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSByZW5kZXJlci0+Zmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBTVkdSZXNvdXJjZXMq
IGNoaWxkUmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJl
bmRlck9iamVjdChjaGlsZCk7Ci0gICAgICAgIGlmICghY2hpbGRSZXNvdXJjZXMpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEEgY2hpbGQgb2YgdGhlIGdpdmVu
ICdyZXNvdXJjZScgY29udGFpbnMgcmVzb3VyY2VzLiAKLSAgICAgICAgSGFzaFNldDxSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcio+IGNoaWxkU2V0OwotICAgICAgICBjaGlsZFJlc291cmNlcy0+
YnVpbGRTZXRPZlJlc291cmNlcyhjaGlsZFNldCk7Ci0KLSAgICAgICAgLy8gV2FsayBhbGwgY2hp
bGQgcmVzb3VyY2VzIGFuZCBjaGVjayB3aGV0ZXIgdGhleSByZWZlcmVuY2UgYW55IHJlc291cmNl
IGNvbnRhaW5lZCBpbiB0aGUgcmVzb3VyY2VzIHNldC4KLSAgICAgICAgSGFzaFNldDxSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBlbmQgPSBjaGlsZFNldC5lbmQoKTsKLSAg
ICAgICAgZm9yIChIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9y
IGl0ID0gY2hpbGRTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBp
ZiAobV9hbGxSZXNvdXJjZXMuY29udGFpbnMoKml0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdhbGsgY2hpbGRyZW4gcmVjdXJzaXZlbHks
IHN0b3AgaW1tZWRpYXRlbHkgaWYgd2UgZm91bmQgYSBjeWNsZQotICAgICAgICBpZiAocmVzb3Vy
Y2VDb250YWluc0N5Y2xlcyhjaGlsZCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXI6
OnJlc29sdmVDeWNsZXMoKQotewotICAgIEFTU0VSVChtX2FsbFJlc291cmNlcy5pc0VtcHR5KCkp
OwotCi0jaWYgREVCVUdfQ1lDTEVfREVURUNUSU9OID4gMAotICAgIGZwcmludGYoc3RkZXJyLCAi
XG5CZWZvcmUgY3ljbGUgZGV0ZWN0aW9uOlxuIik7Ci0gICAgbV9yZXNvdXJjZXMtPmR1bXAobV9y
ZW5kZXJlcik7Ci0jZW5kaWYKLQotICAgIC8vIFN0YXNoIGFsbCByZXNvdXJjZXMgaW50byBhIEhh
c2hTZXQgZm9yIHRoZSBlYXNlIG9mIHRyYXZlcnNpbmcuCi0gICAgSGFzaFNldDxSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lcio+IGxvY2FsUmVzb3VyY2VzOwotICAgIG1fcmVzb3VyY2VzLT5idWls
ZFNldE9mUmVzb3VyY2VzKGxvY2FsUmVzb3VyY2VzKTsKLSAgICBBU1NFUlQoIWxvY2FsUmVzb3Vy
Y2VzLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBBZGQgYWxsIHBhcmVudCByZXNvdXJjZSBjb250YWlu
ZXJzIHRvIHRoZSBIYXNoU2V0LgotICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIqPiBwYXJlbnRSZXNvdXJjZXM7Ci0gICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSBtX3JlbmRl
cmVyLT5wYXJlbnQoKTsKLSAgICB3aGlsZSAocGFyZW50KSB7Ci0gICAgICAgIGlmIChwYXJlbnQt
PmlzU1ZHUmVzb3VyY2VDb250YWluZXIoKSkKLSAgICAgICAgICAgIHBhcmVudFJlc291cmNlcy5h
ZGQocGFyZW50LT50b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCkpOwotICAgICAgICBwYXJl
bnQgPSBwYXJlbnQtPnBhcmVudCgpOwotICAgIH0KLQotI2lmIERFQlVHX0NZQ0xFX0RFVEVDVElP
TiA+IDAKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlxuRGV0ZWN0aW5nIHdoZXRlciBhbnkgcmVzb3Vy
Y2VzIHJlZmVyZW5jZXMgYW55IG9mIGZvbGxvd2luZyBvYmplY3RzOlxuIik7Ci0gICAgewotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkxvY2FsIHJlc291cmNlczpcbiIpOwotICAgICAgICBIYXNo
U2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGVuZCA9IGxvY2FsUmVz
b3VyY2VzLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIqPjo6aXRlcmF0b3IgaXQgPSBsb2NhbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInw+ICVzOiBvYmplY3Q9JXAgKG5v
ZGU9JXApXG4iLCAoKml0KS0+cmVuZGVyTmFtZSgpLCAqaXQsICgqaXQpLT5ub2RlKCkpOwotCi0g
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiUGFyZW50IHJlc291cmNlczpcbiIpOwotICAgICAgICBl
bmQgPSBwYXJlbnRSZXNvdXJjZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IHBhcmVudFJlc291cmNlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInw+ICVz
OiBvYmplY3Q9JXAgKG5vZGU9JXApXG4iLCAoKml0KS0+cmVuZGVyTmFtZSgpLCAqaXQsICgqaXQp
LT5ub2RlKCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gQnVpbGQgY29tYmluZWQgc2V0IG9m
IGxvY2FsIGFuZCBwYXJlbnQgcmVzb3VyY2VzLgotICAgIG1fYWxsUmVzb3VyY2VzID0gbG9jYWxS
ZXNvdXJjZXM7Ci0gICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVy
YXRvciBlbmQgPSBwYXJlbnRSZXNvdXJjZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGl0ID0gcGFyZW50UmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV9hbGxSZXNvdXJjZXMuYWRkKCppdCk7
Ci0KLSAgICAvLyBJZiB3ZSdyZSBhIHJlc291cmNlLCBhZGQgb3Vyc2VsdmVzIHRvIHRoZSBIYXNo
U2V0LgotICAgIGlmIChtX3JlbmRlcmVyLT5pc1NWR1Jlc291cmNlQ29udGFpbmVyKCkpCi0gICAg
ICAgIG1fYWxsUmVzb3VyY2VzLmFkZChtX3JlbmRlcmVyLT50b1JlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyKCkpOwotCi0gICAgQVNTRVJUKCFtX2FsbFJlc291cmNlcy5pc0VtcHR5KCkpOwotCi0g
ICAgLy8gVGhlIGpvYiBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGRldGVybWluZSB3aGV0ZXIgYW55
IG9mIHRoZSAncmVzb3VyY2VzJyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuICdyZW5kZXJlcicK
LSAgICAvLyByZWZlcmVuY2VzIHVzIChvciB3aGV0ZXIgYW55IG9mIGl0cyBraWRzIHJlZmVyZW5j
ZXMgdXMpIC0+IHRoYXQncyBhIGN5Y2xlLCB3ZSBuZWVkIHRvIGZpbmQgYW5kIGJyZWFrIGl0Lgot
ICAgIGVuZCA9IGxvY2FsUmVzb3VyY2VzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IGxvY2FsUmVzb3VyY2VzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
ciogcmVzb3VyY2UgPSAqaXQ7Ci0gICAgICAgIGlmIChwYXJlbnRSZXNvdXJjZXMuY29udGFpbnMo
cmVzb3VyY2UpIHx8IHJlc291cmNlQ29udGFpbnNDeWNsZXMocmVzb3VyY2UpKQotICAgICAgICAg
ICAgYnJlYWtDeWNsZShyZXNvdXJjZSk7Ci0gICAgfQotCi0jaWYgREVCVUdfQ1lDTEVfREVURUNU
SU9OID4gMAotICAgIGZwcmludGYoc3RkZXJyLCAiXG5BZnRlciBjeWNsZSBkZXRlY3Rpb246XG4i
KTsKLSAgICBtX3Jlc291cmNlcy0+ZHVtcChtX3JlbmRlcmVyKTsKLSNlbmRpZgotCi0gICAgbV9h
bGxSZXNvdXJjZXMuY2xlYXIoKTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlcjo6
YnJlYWtDeWNsZShSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVzb3VyY2VMZWFkaW5nVG9D
eWNsZSkKLXsKLSAgICBBU1NFUlQocmVzb3VyY2VMZWFkaW5nVG9DeWNsZSk7Ci0gICAgaWYgKHJl
c291cmNlTGVhZGluZ1RvQ3ljbGUgPT0gbV9yZXNvdXJjZXMtPmxpbmtlZFJlc291cmNlKCkpIHsK
LSAgICAgICAgbV9yZXNvdXJjZXMtPnJlc2V0TGlua2VkUmVzb3VyY2UoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHN3aXRjaCAocmVzb3VyY2VMZWFkaW5nVG9DeWNsZS0+cmVzb3Vy
Y2VUeXBlKCkpIHsKLSAgICBjYXNlIE1hc2tlclJlc291cmNlVHlwZToKLSAgICAgICAgQVNTRVJU
KHJlc291cmNlTGVhZGluZ1RvQ3ljbGUgPT0gbV9yZXNvdXJjZXMtPm1hc2tlcigpKTsKLSAgICAg
ICAgbV9yZXNvdXJjZXMtPnJlc2V0TWFza2VyKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TWFya2VyUmVzb3VyY2VUeXBlOgotICAgICAgICBBU1NFUlQocmVzb3VyY2VMZWFkaW5nVG9DeWNs
ZSA9PSBtX3Jlc291cmNlcy0+bWFya2VyU3RhcnQoKSB8fCByZXNvdXJjZUxlYWRpbmdUb0N5Y2xl
ID09IG1fcmVzb3VyY2VzLT5tYXJrZXJNaWQoKSB8fCByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlID09
IG1fcmVzb3VyY2VzLT5tYXJrZXJFbmQoKSk7Ci0gICAgICAgIGlmIChtX3Jlc291cmNlcy0+bWFy
a2VyU3RhcnQoKSA9PSByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlKQotICAgICAgICAgICAgbV9yZXNv
dXJjZXMtPnJlc2V0TWFya2VyU3RhcnQoKTsKLSAgICAgICAgaWYgKG1fcmVzb3VyY2VzLT5tYXJr
ZXJNaWQoKSA9PSByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlKQotICAgICAgICAgICAgbV9yZXNvdXJj
ZXMtPnJlc2V0TWFya2VyTWlkKCk7Ci0gICAgICAgIGlmIChtX3Jlc291cmNlcy0+bWFya2VyRW5k
KCkgPT0gcmVzb3VyY2VMZWFkaW5nVG9DeWNsZSkKLSAgICAgICAgICAgIG1fcmVzb3VyY2VzLT5y
ZXNldE1hcmtlckVuZCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBhdHRlcm5SZXNvdXJj
ZVR5cGU6Ci0gICAgY2FzZSBMaW5lYXJHcmFkaWVudFJlc291cmNlVHlwZToKLSAgICBjYXNlIFJh
ZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBlOgotICAgICAgICBBU1NFUlQocmVzb3VyY2VMZWFkaW5n
VG9DeWNsZSA9PSBtX3Jlc291cmNlcy0+ZmlsbCgpIHx8IHJlc291cmNlTGVhZGluZ1RvQ3ljbGUg
PT0gbV9yZXNvdXJjZXMtPnN0cm9rZSgpKTsKLSAgICAgICAgaWYgKG1fcmVzb3VyY2VzLT5maWxs
KCkgPT0gcmVzb3VyY2VMZWFkaW5nVG9DeWNsZSkKLSAgICAgICAgICAgIG1fcmVzb3VyY2VzLT5y
ZXNldEZpbGwoKTsKLSAgICAgICAgaWYgKG1fcmVzb3VyY2VzLT5zdHJva2UoKSA9PSByZXNvdXJj
ZUxlYWRpbmdUb0N5Y2xlKQotICAgICAgICAgICAgbV9yZXNvdXJjZXMtPnJlc2V0U3Ryb2tlKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyUmVzb3VyY2VUeXBlOgotI2lmIEVOQUJM
RShGSUxURVJTKQotICAgICAgICBBU1NFUlQocmVzb3VyY2VMZWFkaW5nVG9DeWNsZSA9PSBtX3Jl
c291cmNlcy0+ZmlsdGVyKCkpOwotICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRGaWx0ZXIoKTsK
LSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICBjYXNlIENsaXBwZXJSZXNvdXJjZVR5cGU6Ci0g
ICAgICAgIEFTU0VSVChyZXNvdXJjZUxlYWRpbmdUb0N5Y2xlID09IG1fcmVzb3VyY2VzLT5jbGlw
cGVyKCkpOwotICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRDbGlwcGVyKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgU29saWRDb2xvclJlc291cmNlVHlwZToKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotfQotCi0jZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaAkocmV2aXNp
b24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQot
I2lmbmRlZiBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlcl9oCi0jZGVmaW5lIFNWR1Jlc291cmNlc0N5
Y2xlU29sdmVyX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjsKLWNsYXNzIFNWR1Jlc291cmNlczsKLQotY2xhc3MgU1ZH
UmVzb3VyY2VzQ3ljbGVTb2x2ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVibGljOgotICAg
IFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyKFJlbmRlck9iamVjdCosIFNWR1Jlc291cmNlcyopOwot
ICAgIH5TVkdSZXNvdXJjZXNDeWNsZVNvbHZlcigpOwotCi0gICAgdm9pZCByZXNvbHZlQ3ljbGVz
KCk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCByZXNvdXJjZUNvbnRhaW5zQ3ljbGVzKFJlbmRlck9i
amVjdCopIGNvbnN0OwotICAgIHZvaWQgYnJlYWtDeWNsZShSZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lciopOwotCi0gICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwotICAgIFNWR1Jlc291cmNl
cyogbV9yZXNvdXJjZXM7Ci0gICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+
IG1fYWxsUmVzb3VyY2VzOyAKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcAkocmV2aXNpb24gNzUyNzIp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdTaGFkb3dUcmVlRWxl
bWVudHMuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNs
dWRlICJTVkdVc2VFbGVtZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gU1ZHU2hh
ZG93VHJlZUNvbnRhaW5lckVsZW1lbnQKLQotU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6
OlNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6
IFNWR0dFbGVtZW50KFNWR05hbWVzOjpnVGFnLCBkb2N1bWVudCkKLXsKLX0KLQotUGFzc1JlZlB0
cjxTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudD4gU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVs
ZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkpOwotfQotCi1GbG9h
dFNpemUgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6OmNvbnRhaW5lclRyYW5zbGF0aW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gRmxvYXRTaXplKG1feE9mZnNldC52YWx1ZSh0aGlzKSwg
bV95T2Zmc2V0LnZhbHVlKHRoaXMpKTsKLX0KLQotLy8gU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50
Ci0KLWlubGluZSBTVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQ6OlNWR1NoYWRvd1RyZWVSb290RWxl
bWVudChEb2N1bWVudCogZG9jdW1lbnQsIFNWR1VzZUVsZW1lbnQqIHNoYWRvd1BhcmVudCkKLSAg
ICA6IFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50KGRvY3VtZW50KQotewotICAgIHNldFNo
YWRvd0hvc3Qoc2hhZG93UGFyZW50KTsKLSAgICBzZXRJbkRvY3VtZW50KCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8U1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50PiBTVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQ6
OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIFNWR1VzZUVsZW1lbnQqIHNoYWRvd1BhcmVudCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1NoYWRvd1RyZWVSb290RWxlbWVudChkb2N1
bWVudCwgc2hhZG93UGFyZW50KSk7Ci19Ci0KLXZvaWQgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50
OjphdHRhY2hFbGVtZW50KFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlLCBSZW5kZXJBcmVu
YSogYXJlbmEpCi17Ci0gICAgQVNTRVJUKHNoYWRvd0hvc3QoKSk7Ci0KLSAgICAvLyBDcmVhdGUg
dGhlIHJlbmRlcmVyIHdpdGggdGhlIHNwZWNpZmllZCBzdHlsZQotICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihhcmVuYSwgc3R5bGUuZ2V0KCkpOwotICAgIGlmIChy
ZW5kZXJlcikgewotICAgICAgICBzZXRSZW5kZXJlcihyZW5kZXJlcik7Ci0gICAgICAgIHJlbmRl
cmVyLT5zZXRTdHlsZShzdHlsZSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZXNlIGV4cGxpY2l0
bHkgc2luY2UgdGhpcyBub3JtYWxseSBoYXBwZW5zIGR1cmluZyBhbiBhdHRhY2goKQotICAgIHNl
dEF0dGFjaGVkKCk7Ci0KLSAgICAvLyBBZGQgdGhlIHJlbmRlcmVyIHRvIHRoZSByZW5kZXIgdHJl
ZQotICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgc2hhZG93SG9zdCgpLT5yZW5kZXJlcigpLT5h
ZGRDaGlsZChyZW5kZXJlcik7Ci19Ci0KLXZvaWQgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50Ojpj
bGVhclNoYWRvd0hvc3QoKQotewotICAgIHNldFNoYWRvd0hvc3QoMCk7Ci19Ci0KLX0KLQotI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaAkocmV2
aXNpb24gNzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0K
LSNpZm5kZWYgU1ZHU2hhZG93VHJlZUVsZW1lbnRzX2gKLSNkZWZpbmUgU1ZHU2hhZG93VHJlZUVs
ZW1lbnRzX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHR0VsZW1lbnQuaCIKLSNp
bmNsdWRlICJTVkdMZW5ndGguaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9h
dFNpemU7Ci1jbGFzcyBTVkdVc2VFbGVtZW50OwotCi1jbGFzcyBTVkdTaGFkb3dUcmVlQ29udGFp
bmVyRWxlbWVudCA6IHB1YmxpYyBTVkdHRWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCop
OwotCi0gICAgRmxvYXRTaXplIGNvbnRhaW5lclRyYW5zbGF0aW9uKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRDb250YWluZXJPZmZzZXQoY29uc3QgU1ZHTGVuZ3RoJiB4LCBjb25zdCBTVkdMZW5ndGgm
IHkpCi0gICAgewotICAgICAgICBtX3hPZmZzZXQgPSB4OwotICAgICAgICBtX3lPZmZzZXQgPSB5
OwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50
KERvY3VtZW50Kik7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGlzU2hhZG93VHJlZUNv
bnRhaW5lckVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBTVkdMZW5ndGgg
bV94T2Zmc2V0OwotICAgIFNWR0xlbmd0aCBtX3lPZmZzZXQ7Ci19OwotCi1jbGFzcyBTVkdTaGFk
b3dUcmVlUm9vdEVsZW1lbnQgOiBwdWJsaWMgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1NoYWRvd1RyZWVSb290RWxlbWVu
dD4gY3JlYXRlKERvY3VtZW50KiwgU1ZHVXNlRWxlbWVudCogc2hhZG93UGFyZW50KTsKLQotICAg
IHZvaWQgYXR0YWNoRWxlbWVudChQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiwgUmVuZGVyQXJlbmEq
KTsKLSAgICB2b2lkIGNsZWFyU2hhZG93SG9zdCgpOwotCi1wcml2YXRlOgotICAgIFNWR1NoYWRv
d1RyZWVSb290RWxlbWVudChEb2N1bWVudCosIFNWR1VzZUVsZW1lbnQqIHNoYWRvd1BhcmVudCk7
Ci19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyRm9yZWlnbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCShyZXZpc2lvbiA3NTI3MikJKGZyb20gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHA6NzUyNzIpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoU1ZHX0ZP
UkVJR05fT0JKRUNUKQorI2luY2x1ZGUgIlJlbmRlckZvcmVpZ25PYmplY3QuaCIKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50
LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorI2luY2x1ZGUgIlNWR1NWR0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlbmRlckZvcmVpZ25PYmplY3Q6OlJlbmRlckZvcmVpZ25PYmplY3QoU1ZHRm9yZWlnbk9i
amVjdEVsZW1lbnQqIG5vZGUpIAorICAgIDogUmVuZGVyU1ZHQmxvY2sobm9kZSkKKyAgICAsIG1f
bmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkKK3sKK30KKworUmVuZGVyRm9yZWlnbk9iamVjdDo6
flJlbmRlckZvcmVpZ25PYmplY3QoKQoreworfQorCit2b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6
OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKK3sKKyAgICBpZiAocGFpbnRJ
bmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7CisgICAgY2hpbGRQYWludEluZm8u
Y29udGV4dC0+c2F2ZSgpOworICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKGxvY2Fs
VHJhbnNmb3JtKCkpOworCisgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRk
ZW4odGhpcykpCisgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmNsaXAobV92aWV3cG9y
dCk7CisKKyAgICBmbG9hdCBvcGFjaXR5ID0gc3R5bGUoKS0+b3BhY2l0eSgpOworICAgIGlmIChv
cGFjaXR5IDwgMS4wZikKKyAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+YmVnaW5UcmFu
c3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKworICAgIFJlbmRlckJsb2NrOjpwYWludChjaGlsZFBh
aW50SW5mbywgMCwgMCk7CisKKyAgICBpZiAob3BhY2l0eSA8IDEuMGYpCisgICAgICAgIGNoaWxk
UGFpbnRJbmZvLmNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisKKyAgICBjaGlsZFBh
aW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK0ludFJlY3QgUmVuZGVyRm9yZWlnbk9i
amVjdDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIpCit7CisgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNsaXBw
ZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIpOworfQorCit2
b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wg
Zml4ZWQpCit7CisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHRo
aXMsIHJlcGFpbnRDb250YWluZXIsIHJlcGFpbnRSZWN0LCBmaXhlZCk7Cit9CisKK2NvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgUmVuZGVyRm9yZWlnbk9iamVjdDo6bG9jYWxUb1BhcmVudFRyYW5zZm9y
bSgpIGNvbnN0Cit7CisgICAgbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtID0gbG9jYWxUcmFuc2Zv
cm0oKTsKKyAgICBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0udHJhbnNsYXRlKG1fdmlld3BvcnQu
eCgpLCBtX3ZpZXdwb3J0LnkoKSk7CisgICAgcmV0dXJuIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9y
bTsKK30KKwordm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0Ojpjb21wdXRlTG9naWNhbFdpZHRoKCkK
K3sKKyAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaW4gc2l6ZSByb3VuZGluZyBpc3N1ZXMKKyAg
ICBzZXRXaWR0aChzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihtX3ZpZXdwb3J0LndpZHRoKCkpKSk7
Cit9CisKK3ZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKQor
eworICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBpbiBzaXplIHJvdW5kaW5nIGlzc3VlcworICAg
IHNldEhlaWdodChzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihtX3ZpZXdwb3J0LmhlaWdodCgpKSkp
OworfQorCit2b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OmxheW91dCgpCit7CisgICAgQVNTRVJU
KG5lZWRzTGF5b3V0KCkpOworICAgIEFTU0VSVCghdmlldygpLT5sYXlvdXRTdGF0ZUVuYWJsZWQo
KSk7IC8vIFJlbmRlclNWR1Jvb3QgZGlzYWJsZXMgbGF5b3V0U3RhdGUgZm9yIHRoZSBTVkcgcmVu
ZGVyaW5nIHRyZWUuCisKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVj
a0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7CisgICAgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQq
IGZvcmVpZ24gPSBzdGF0aWNfY2FzdDxTVkdGb3JlaWduT2JqZWN0RWxlbWVudCo+KG5vZGUoKSk7
CisKKyAgICBib29sIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSBmYWxzZTsKKyAg
ICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgeworICAgICAgICBtX2xvY2FsVHJhbnNmb3Jt
ID0gZm9yZWlnbi0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOworICAgICAgICBtX25lZWRzVHJh
bnNmb3JtVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBh
cmVudHMgPSB0cnVlOworICAgIH0KKworICAgIEZsb2F0UmVjdCBvbGRWaWV3cG9ydCA9IG1fdmll
d3BvcnQ7CisKKyAgICAvLyBDYWNoZSB2aWV3cG9ydCBib3VuZGFyaWVzCisgICAgRmxvYXRQb2lu
dCB2aWV3cG9ydExvY2F0aW9uKGZvcmVpZ24tPngoKS52YWx1ZShmb3JlaWduKSwgZm9yZWlnbi0+
eSgpLnZhbHVlKGZvcmVpZ24pKTsKKyAgICBtX3ZpZXdwb3J0ID0gRmxvYXRSZWN0KHZpZXdwb3J0
TG9jYXRpb24sIEZsb2F0U2l6ZShmb3JlaWduLT53aWR0aCgpLnZhbHVlKGZvcmVpZ24pLCBmb3Jl
aWduLT5oZWlnaHQoKS52YWx1ZShmb3JlaWduKSkpOworICAgIGlmICghdXBkYXRlQ2FjaGVkQm91
bmRhcmllc0luUGFyZW50cykKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50
cyA9IG9sZFZpZXdwb3J0ICE9IG1fdmlld3BvcnQ7CisKKyAgICAvLyBTZXQgYm94IG9yaWdpbiB0
byB0aGUgZm9yZWlnbk9iamVjdCB4L3kgdHJhbnNsYXRpb24sIHNvIHBvc2l0aW9uZWQgb2JqZWN0
cyBpbiBYSFRNTCBjb250ZW50IGdldCBjb3JyZWN0CisgICAgLy8gcG9zaXRpb25zLiBBIHJlZ3Vs
YXIgUmVuZGVyQm94TW9kZWxPYmplY3Qgd291bGQgcHVsbCB0aGlzIGluZm9ybWF0aW9uIGZyb20g
UmVuZGVyU3R5bGUgLSBpbiBTVkcgdGhvc2UKKyAgICAvLyBwcm9wZXJ0aWVzIGFyZSBpZ25vcmVk
IGZvciBub24gPHN2Zz4gZWxlbWVudHMsIHNvIHdlIG1pbWljIHdoYXQgaGFwcGVucyB3aGVuIHNw
ZWNpZnlpbmcgdGhlbSB0aHJvdWdoIENTUy4KKworICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBp
biBsb2NhdGlvbiByb3VuZGluZyBpc3N1ZXMgLSBvbmx5IGFmZmVjdHMgUmVuZGVyRm9yZWlnbk9i
amVjdCAmIFJlbmRlclNWR1RleHQKKyAgICBzZXRMb2NhdGlvbihyb3VuZGVkSW50UG9pbnQodmll
d3BvcnRMb2NhdGlvbikpOworCisgICAgYm9vbCBsYXlvdXRDaGFuZ2VkID0gbV9ldmVySGFkTGF5
b3V0ICYmIHNlbGZOZWVkc0xheW91dCgpOworICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKKyAg
ICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkpOworCisgICAgLy8gSWYgb3VyIGJvdW5kcyBjaGFuZ2Vk
LCBub3RpZnkgdGhlIHBhcmVudHMuCisgICAgaWYgKHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBh
cmVudHMpCisgICAgICAgIFJlbmRlclNWR0Jsb2NrOjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUo
KTsKKworICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBv
dXIgbGF5b3V0IGNoYW5nZWQuCisgICAgaWYgKGxheW91dENoYW5nZWQpCisgICAgICAgIFNWR1Jl
c291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKHRoaXMpOworCisgICAgcmVwYWludGVy
LnJlcGFpbnRBZnRlckxheW91dCgpOworfQorCitib29sIFJlbmRlckZvcmVpZ25PYmplY3Q6Om5v
ZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlv
biBoaXRUZXN0QWN0aW9uKQoreworICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVHJh
bnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworCisgICAgLy8gRWFy
bHkgZXhpdCBpZiBsb2NhbCBwb2ludCBpcyBub3QgY29udGFpbmVkIGluIGNsaXBwZWQgdmlld3Bv
cnQgYXJlYQorICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0Ojppc092ZXJmbG93SGlkZGVuKHRoaXMp
ICYmICFtX3ZpZXdwb3J0LmNvbnRhaW5zKGxvY2FsUG9pbnQpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBJbnRQb2ludCByb3VuZGVkTG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2ludChs
b2NhbFBvaW50KTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3Qs
IHJlc3VsdCwgcm91bmRlZExvY2FsUG9pbnQueCgpLCByb3VuZGVkTG9jYWxQb2ludC55KCksIDAs
IDAsIGhpdFRlc3RBY3Rpb24pOworfQorCitib29sIFJlbmRlckZvcmVpZ25PYmplY3Q6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBp
bnQsIGludCwgSGl0VGVzdEFjdGlvbikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6bWFwTG9jYWxU
b0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBm
aXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUp
IGNvbnN0Cit7CisgICAgLy8gV2hlbiBjcmF3bGluZyB1cCB0aGUgaGllcmFjaHkgc3RhcnRpbmcg
ZnJvbSBmb3JlaWduT2JqZWN0IGNoaWxkIGNvbnRlbnQsIHVzZVRyYW5zZm9ybXMgbWF5IG5vdCBi
ZSBzZXQgdG8gdHJ1ZS4KKyAgICBpZiAoIXVzZVRyYW5zZm9ybXMpCisgICAgICAgIHVzZVRyYW5z
Zm9ybXMgPSB0cnVlOworICAgIFNWR1JlbmRlclN1cHBvcnQ6Om1hcExvY2FsVG9Db250YWluZXIo
dGhpcywgcmVwYWludENvbnRhaW5lciwgZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0
YXRlKTsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJGb3JlaWduT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlckZvcmVpZ25PYmplY3QuaAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJGb3JlaWduT2JqZWN0
X2gKKyNkZWZpbmUgUmVuZGVyRm9yZWlnbk9iamVjdF9oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgor
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdCbG9jay5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OworCitj
bGFzcyBSZW5kZXJGb3JlaWduT2JqZWN0IDogcHVibGljIFJlbmRlclNWR0Jsb2NrIHsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBSZW5kZXJGb3JlaWduT2JqZWN0KFNWR0ZvcmVpZ25PYmplY3RFbGVt
ZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVyRm9yZWlnbk9iamVjdCgpOworCisgICAgdmlydHVh
bCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckZvcmVpZ25P
YmplY3QiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVu
dFgsIGludCBwYXJlbnRZKTsKKworICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7Cisg
ICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpOworCisgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0
Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9CisgICAgdmlydHVhbCBG
bG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9
CisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBj
b25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0Rmxv
YXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgs
IGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29s
IGlzU1ZHRm9yZWlnbk9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBib29sIGZpeGVkICwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0
ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5z
Zm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KKworIHByaXZh
dGU6CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKKworICAgIHZpcnR1YWwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7CisgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJh
bnNmb3JtOyB9CisKKyAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOworICAgIEZs
b2F0UmVjdCBtX3ZpZXdwb3J0OworICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3Jt
OworICAgIG11dGFibGUgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsK
K307CisKK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0FsbEluT25lLmNwcAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR0FsbEluT25lLmNwcDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisv
LyBUaGlzIGFsbC1pbi1vbmUgY3BwIGZpbGUgY3V0cyBkb3duIG9uIHRlbXBsYXRlIGJsb2F0IHRv
IGFsbG93IHVzIHRvIGJ1aWxkIG91ciBXaW5kb3dzIHJlbGVhc2UgYnVpbGQuCisKKyNpbmNsdWRl
ICJSZW5kZXJTVkdCbG9jay5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCIK
KyNpbmNsdWRlICJSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW1hZ2UuY3BwIgorI2lu
Y2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZS5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCIKKyNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJp
bWl0aXZlLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCIKKyNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSb290LmNw
cCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIgorI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9v
bHMuY3BwIgorI2luY2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uY3BwIgorI2luY2x1ZGUgIlNW
R1JlbmRlclN1cHBvcnQuY3BwIgorI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuY3BwIgor
I2luY2x1ZGUgIlNWR1Jlc291cmNlcy5jcHAiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzQ2FjaGUu
Y3BwIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCIKKyNpbmNsdWRlICJT
VkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwIgorCisvLyBGSVhNRTogQXMgc29vbiBhcyBhbGwgU1ZH
IHJlbmRlcmVycyBsaXZlIGluIHJlbmRlcmluZy9zdmcsIHRoaXMgZmlsZSBzaG91bGQgYmUgbW92
ZWQgdGhlcmUgYXMgd2VsbCwgcmVtb3ZpbmcgdGhlIG5lZWQgZm9yIHRoZSBzdmcvIGluY2x1ZGVz
IGJlbG93LgorI2luY2x1ZGUgInN2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwIgorI2luY2x1ZGUgInN2
Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCIKKyNpbmNsdWRlICJzdmcvUmVuZGVyU1ZHVFNwYW4u
Y3BwIgorI2luY2x1ZGUgInN2Zy9SZW5kZXJTVkdUZXh0LmNwcCIKKyNpbmNsdWRlICJzdmcvUmVu
ZGVyU1ZHVGV4dFBhdGguY3BwIgorI2luY2x1ZGUgInN2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcCIK
KyNpbmNsdWRlICJzdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAiCisjaW5jbHVkZSAic3ZnL1NWR1Jv
b3RJbmxpbmVCb3guY3BwIgorI2luY2x1ZGUgInN2Zy9TVkdUZXh0Q2h1bmsuY3BwIgorI2luY2x1
ZGUgInN2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcCIKKyNpbmNsdWRlICJzdmcvU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXMuY3BwIgorI2luY2x1ZGUgInN2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRl
c0J1aWxkZXIuY3BwIgorI2luY2x1ZGUgInN2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcCIKKyNp
bmNsdWRlICJzdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcCIKKyNpbmNsdWRlICJz
dmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwIgorI2luY2x1ZGUgInN2Zy9TVkdUZXh0
TWV0cmljcy5jcHAiCisjaW5jbHVkZSAic3ZnL1NWR1RleHRRdWVyeS5jcHAiCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDc1Mjcy
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsMjEgKzU2LDIwIEBACiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzQ3ljbGVT
b2x2ZXIuY3BwIgogI2luY2x1ZGUgIlNWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAiCiAKLS8vIEZJ
WE1FOiBBcyBzb29uIGFzIGFsbCBTVkcgcmVuZGVyZXJzIGxpdmUgaW4gcmVuZGVyaW5nL3N2Zywg
dGhpcyBmaWxlIHNob3VsZCBiZSBtb3ZlZCB0aGVyZSBhcyB3ZWxsLCByZW1vdmluZyB0aGUgbmVl
ZCBmb3IgdGhlIHN2Zy8gaW5jbHVkZXMgYmVsb3cuCi0jaW5jbHVkZSAic3ZnL1JlbmRlclNWR0lu
bGluZS5jcHAiCi0jaW5jbHVkZSAic3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwIgotI2luY2x1
ZGUgInN2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAiCi0jaW5jbHVkZSAic3ZnL1JlbmRlclNWR1RleHQu
Y3BwIgotI2luY2x1ZGUgInN2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAiCi0jaW5jbHVkZSAic3Zn
L1NWR0lubGluZUZsb3dCb3guY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdJbmxpbmVUZXh0Qm94LmNw
cCIKLSNpbmNsdWRlICJzdmcvU1ZHUm9vdElubGluZUJveC5jcHAiCi0jaW5jbHVkZSAic3ZnL1NW
R1RleHRDaHVuay5jcHAiCi0jaW5jbHVkZSAic3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuY3BwIgot
I2luY2x1ZGUgInN2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAiCi0jaW5jbHVkZSAic3Zn
L1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAiCi0jaW5jbHVkZSAic3ZnL1NWR1Rl
eHRMYXlvdXRFbmdpbmUuY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFz
ZWxpbmUuY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAi
Ci0jaW5jbHVkZSAic3ZnL1NWR1RleHRNZXRyaWNzLmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHVGV4
dFF1ZXJ5LmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuY3BwIgorI2luY2x1ZGUgIlJl
bmRlclNWR0lubGluZVRleHQuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1RTcGFuLmNwcCIKKyNp
bmNsdWRlICJSZW5kZXJTVkdUZXh0LmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdUZXh0UGF0aC5j
cHAiCisjaW5jbHVkZSAiU1ZHSW5saW5lRmxvd0JveC5jcHAiCisjaW5jbHVkZSAiU1ZHSW5saW5l
VGV4dEJveC5jcHAiCisjaW5jbHVkZSAiU1ZHUm9vdElubGluZUJveC5jcHAiCisjaW5jbHVkZSAi
U1ZHVGV4dENodW5rLmNwcCIKKyNpbmNsdWRlICJTVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcCIKKyNp
bmNsdWRlICJTVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAiCisjaW5jbHVkZSAiU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCIKKyNpbmNsdWRlICJTVkdUZXh0TGF5b3V0RW5naW5l
LmNwcCIKKyNpbmNsdWRlICJTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwIgorI2luY2x1
ZGUgIlNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCIKKyNpbmNsdWRlICJTVkdUZXh0TWV0
cmljcy5jcHAiCisjaW5jbHVkZSAiU1ZHVGV4dFF1ZXJ5LmNwcCIKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmNwcDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcp
CisjaW5jbHVkZSAiUmVuZGVyU1ZHQmxvY2suaCIKKworI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1JlbmRlclNWR0Jsb2NrOjpSZW5kZXJTVkdCbG9jayhTVkdFbGVtZW50KiBub2RlKSAKKyAgICA6
IFJlbmRlckJsb2NrKG5vZGUpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHQmxvY2s6OnNldFN0eWxl
KFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKSAKK3sKKyAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IHVzZVN0eWxlID0gc3R5bGU7CisKKyAgICAvLyBTVkcgdGV4dCBsYXlvdXQgY29kZSBleHBl
Y3RzIHVzIHRvIGJlIGEgYmxvY2stbGV2ZWwgc3R5bGUgZWxlbWVudC4gICAKKyAgICBpZiAodXNl
U3R5bGUtPmlzRGlzcGxheUlubGluZVR5cGUoKSkgeworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgICAgICBuZXdTdHlsZS0+
aW5oZXJpdEZyb20odXNlU3R5bGUuZ2V0KCkpOworICAgICAgICBuZXdTdHlsZS0+c2V0RGlzcGxh
eShCTE9DSyk7CisgICAgICAgIHVzZVN0eWxlID0gbmV3U3R5bGUucmVsZWFzZSgpOworICAgIH0K
KworICAgIFJlbmRlckJsb2NrOjpzZXRTdHlsZSh1c2VTdHlsZS5yZWxlYXNlKCkpOworfQorCit2
b2lkIFJlbmRlclNWR0Jsb2NrOjp1cGRhdGVCb3hNb2RlbEluZm9Gcm9tU3R5bGUoKQoreworICAg
IFJlbmRlckJsb2NrOjp1cGRhdGVCb3hNb2RlbEluZm9Gcm9tU3R5bGUoKTsKKworICAgIC8vIFJl
bmRlclNWR2xvY2ssIHVzZWQgYnkgUmVuZGVyKFNWR1RleHR8Rm9yZWlnbk9iamVjdCksIGlzIG5v
dCBhbGxvd2VkIHRvIGNhbGwgc2V0SGFzT3ZlcmZsb3dDbGlwKHRydWUpLgorICAgIC8vIFJlbmRl
ckJsb2NrIGFzc3VtZXMgYSBsYXllciB0byBiZSBwcmVzZW50IHdoZW4gdGhlIG92ZXJmbG93IGNs
aXAgZnVuY3Rpb25hbGl0eSBpcyByZXF1ZXN0ZWQuIEJvdGgKKyAgICAvLyBSZW5kZXIoU1ZHVGV4
dHxGb3JlaWduT2JqZWN0KSByZXR1cm4gJ2ZhbHNlJyBvbiAncmVxdWlyZXNMYXllcicuIEZpbmUg
Zm9yIFJlbmRlclNWR1RleHQuCisgICAgLy8KKyAgICAvLyBJZiB3ZSB3YW50IHRvIHN1cHBvcnQg
b3ZlcmZsb3cgcnVsZXMgZm9yIDxmb3JlaWduT2JqZWN0PiB3ZSBjYW4gY2hvb3NlIGJldHdlZW4g
dHdvIHNvbHV0aW9uczoKKyAgICAvLyBhKSBtYWtlIFJlbmRlckZvcmVpZ25PYmplY3QgcmVxdWly
ZSBsYXllcnMgYW5kIFNWRyBsYXllciBhd2FyZQorICAgIC8vIGIpIHJlYWN0b3Igb3ZlcmZsb3cg
bG9naWMgb3V0IG9mIFJlbmRlckxheWVyIChhcyBzdWdnZXN0ZWQgYnkgZGh5YXR0KSwgd2hpY2gg
aXMgYSBsYXJnZSB0YXNrCisgICAgLy8KKyAgICAvLyBVbnRpbCB0aGlzIGlzIHJlc29sdmVkLCBk
aXNhYmxlIG92ZXJmbG93IHN1cHBvcnQuIE9wZXJhL0ZGIGRvbid0IHN1cHBvcnQgaXQgYXMgd2Vs
bCBhdCB0aGUgbW9tZW50IChGZWIgMjAxMCkuCisgICAgLy8KKyAgICAvLyBOb3RlOiBUaGlzIGRv
ZXMgTk9UIGFmZmVjdCBvdmVyZmxvdyBoYW5kbGluZyBvbiBvdXRlci9pbm5lciA8c3ZnPiBlbGVt
ZW50cyAtIHRoaXMgaXMgaGFuZGxlZAorICAgIC8vIG1hbnVhbGx5IGJ5IFJlbmRlclNWR1Jvb3Qg
LSB3aGljaCBvd25zIHRoZSBkb2N1bWVudHMgZW5jbG9zaW5nIHJvb3QgbGF5ZXIgYW5kIHRodXMg
d29ya3MgZmluZS4KKyAgICBzZXRIYXNPdmVyZmxvd0NsaXAoZmFsc2UpOworfQorCit2b2lkIFJl
bmRlclNWR0Jsb2NrOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCwgaW50KQor
eworICAgIC8vIFRoaXMgY29kZSBwYXRoIHNob3VsZCBuZXZlciBiZSB0YWtlbiBmb3IgU1ZHLCBh
cyB3ZSdyZSBhc3N1bWluZyB1c2VUcmFuc2Zvcm1zPXRydWUgZXZlcnl3aGVyZSwgYWJzb2x1dGVR
dWFkcyBzaG91bGQgYmUgdXNlZC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9p
ZCBSZW5kZXJTVkdCbG9jazo6ZGVzdHJveSgpCit7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNs
aWVudERlc3Ryb3llZCh0aGlzKTsKKyAgICBSZW5kZXJCbG9jazo6ZGVzdHJveSgpOworfQorCit2
b2lkIFJlbmRlclNWR0Jsb2NrOjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKK3sKKyAgICBpZiAoZGlmZiA9PSBTdHlsZURp
ZmZlcmVuY2VMYXlvdXQpCisgICAgICAgIHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOworICAg
IFJlbmRlckJsb2NrOjpzdHlsZVdpbGxDaGFuZ2UoZGlmZiwgbmV3U3R5bGUpOworfQorCit2b2lk
IFJlbmRlclNWR0Jsb2NrOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIFJlbmRlckJsb2NrOjpzdHlsZURpZENo
YW5nZShkaWZmLCBvbGRTdHlsZSk7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxl
Q2hhbmdlZCh0aGlzLCBkaWZmLCBzdHlsZSgpKTsKK30KKwordm9pZCBSZW5kZXJTVkdCbG9jazo6
dXBkYXRlRnJvbUVsZW1lbnQoKQoreworICAgIFJlbmRlckJsb2NrOjp1cGRhdGVGcm9tRWxlbWVu
dCgpOworICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRVcGRhdGVkRnJvbUVsZW1lbnQodGhp
cywgc3R5bGUoKSk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHQmxvY2suaAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0Jsb2NrLmg6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclNWR0Js
b2NrX2gKKyNkZWZpbmUgUmVuZGVyU1ZHQmxvY2tfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNs
dWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdFbGVtZW50OworCitjbGFzcyBSZW5kZXJTVkdC
bG9jayA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmVuZGVy
U1ZHQmxvY2soU1ZHRWxlbWVudCopOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBzZXRT
dHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUJv
eE1vZGVsSW5mb0Zyb21TdHlsZSgpOworCisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMo
VmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworCisgICAgdmlydHVhbCB2b2lkIGRl
c3Ryb3koKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3R5bGVE
aWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOworfTsKKworfQorI2VuZGlmCisj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIu
Y3BwCShyZXZpc2lvbiA3NTI3MikJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29u
dGFpbmVyLmNwcDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250
YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDcgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICAgICAgICAgICAgICAgICAgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcp
CisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUg
IlNWR1JlbmRlclN1cHBvcnQuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRl
ICJTVkdTdHlsZWRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZH
Q29udGFpbmVyOjpSZW5kZXJTVkdDb250YWluZXIoU1ZHU3R5bGVkRWxlbWVudCogbm9kZSkKKyAg
ICA6IFJlbmRlclNWR01vZGVsT2JqZWN0KG5vZGUpCisgICAgLCBtX25lZWRzQm91bmRhcmllc1Vw
ZGF0ZSh0cnVlKQoreworfQorCitSZW5kZXJTVkdDb250YWluZXI6On5SZW5kZXJTVkdDb250YWlu
ZXIoKQoreworfQorCit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0KCkKK3sKKyAgICBB
U1NFUlQobmVlZHNMYXlvdXQoKSk7CisKKyAgICAvLyBSZW5kZXJTVkdSb290IGRpc2FibGVzIGxh
eW91dFN0YXRlIGZvciB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlLgorICAgIEFTU0VSVCghdmlldygp
LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSk7CisKKyAgICAvLyBBbGxvdyBSZW5kZXJTVkdWaWV3cG9y
dENvbnRhaW5lciB0byB1cGRhdGUgaXRzIHZpZXdwb3J0LgorICAgIGNhbGNWaWV3cG9ydCgpOwor
CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkgfHwgc2VsZldpbGxQYWludCgpKTsKKworICAgIC8vIEFsbG93IFJlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXIgdG8gdXBkYXRlIGl0cyB0cmFuc2Zvcm0uCisgICAgYm9v
bCB1cGRhdGVkVHJhbnNmb3JtID0gY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKTsKKworICAgIFNW
R1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKHRoaXMsIHNlbGZOZWVkc0xheW91dCgpKTsK
KworICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIg
bGF5b3V0IGNoYW5nZWQuCisgICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlv
dXQoKSkKKyAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQodGhp
cyk7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJi
ZWQgdGhlIG9sZCBib3VuZHMsCisgICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cgc28gcmVwYWlu
dEFmdGVyTGF5b3V0KCkgdXNlcyB0aGUgbmV3IGJvdW5kcy4KKyAgICBpZiAobV9uZWVkc0JvdW5k
YXJpZXNVcGRhdGUgfHwgdXBkYXRlZFRyYW5zZm9ybSkgeworICAgICAgICB1cGRhdGVDYWNoZWRC
b3VuZGFyaWVzKCk7CisgICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7Cisg
ICAgCisgICAgICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRz
LgorICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRl
KCk7CisgICAgfQorCisgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOworICAgIHNl
dE5lZWRzTGF5b3V0KGZhbHNlKTsKK30KKworYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OnNlbGZX
aWxsUGFpbnQoKQoreworI2lmIEVOQUJMRShGSUxURVJTKQorICAgIFNWR1Jlc291cmNlcyogcmVz
b3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVj
dCh0aGlzKTsKKyAgICByZXR1cm4gcmVzb3VyY2VzICYmIHJlc291cmNlcy0+ZmlsdGVyKCk7Cisj
ZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlclNWR0NvbnRh
aW5lcjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQoreworICAgIGlmIChw
YWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBTcGVjOiBncm91cHMgdy9vIGNoaWxkcmVuIHN0aWxsIG1heSByZW5kZXIgZmlsdGVy
IGNvbnRlbnQuCisgICAgaWYgKCFmaXJzdENoaWxkKCkgJiYgIXNlbGZXaWxsUGFpbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5m
b0ludGVyc2VjdHNSZXBhaW50UmVjdChyZXBhaW50UmVjdCwgbG9jYWxUb1BhcmVudFRyYW5zZm9y
bSgpLCBwYWludEluZm8pKQorICAgICAgICByZXR1cm47CisKKyAgICBQYWludEluZm8gY2hpbGRQ
YWludEluZm8ocGFpbnRJbmZvKTsKKyAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7
CisKKyAgICAvLyBMZXQgdGhlIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyIHN1YmNsYXNzIGNs
aXAgaWYgbmVjZXNzYXJ5CisgICAgYXBwbHlWaWV3cG9ydENsaXAoY2hpbGRQYWludEluZm8pOwor
CisgICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obG9jYWxUb1BhcmVudFRyYW5zZm9y
bSgpKTsKKworICAgIGJvb2wgY29udGludWVSZW5kZXJpbmcgPSB0cnVlOworICAgIGlmIChjaGls
ZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKKyAgICAgICAgY29udGlu
dWVSZW5kZXJpbmcgPSBTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50
KHRoaXMsIGNoaWxkUGFpbnRJbmZvKTsKKworICAgIGlmIChjb250aW51ZVJlbmRlcmluZykgewor
ICAgICAgICBjaGlsZFBhaW50SW5mby51cGRhdGVQYWludGluZ1Jvb3RGb3JDaGlsZHJlbih0aGlz
KTsKKyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgICAgIGNoaWxkLT5wYWlu
dChjaGlsZFBhaW50SW5mbywgMCwgMCk7CisgICAgfQorCisgICAgaWYgKHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6Zmlu
aXNoUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbywgcGFpbnRJbmZvLmNvbnRl
eHQpOworCisgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOworCisgICAgLy8g
RklYTUU6IFRoaXMgcmVhbGx5IHNob3VsZCBiZSBkcmF3biBmcm9tIGxvY2FsIGNvb3JkaW5hdGVz
LCBidXQgY3VycmVudGx5IHdlIGhhY2sgaXQKKyAgICAvLyB0byBhdm9pZCBvdXIgY2xpcCBraWxs
aW5nIG91ciBvdXRsaW5lIHJlY3QuICBUaHVzIHdlIHRyYW5zbGF0ZSBvdXIKKyAgICAvLyBvdXRs
aW5lIHJlY3QgaW50byBwYXJlbnQgY29vcmRzIGJlZm9yZSBkcmF3aW5nLgorICAgIC8vIEZJWE1F
OiBUaGlzIG1lYW5zIG91ciBmb2N1cyByaW5nIHdvbid0IHNoYXJlIG91ciByb3RhdGlvbiBsaWtl
IGl0IHNob3VsZC4KKyAgICAvLyBXZSBzaG91bGQgaW5zdGVhZCBkaXNhYmxlIG91ciBjbGlwIGR1
cmluZyBQYWludFBoYXNlT3V0bGluZQorICAgIGlmICgocGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2VPdXRsaW5lIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUp
ICYmIHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBW
SVNJQkxFKSB7CisgICAgICAgIEludFJlY3QgcGFpbnRSZWN0SW5QYXJlbnQgPSBlbmNsb3NpbmdJ
bnRSZWN0KGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlcGFpbnRSZWN0KSk7Cisg
ICAgICAgIHBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4dCwgcGFpbnRSZWN0SW5QYXJlbnQu
eCgpLCBwYWludFJlY3RJblBhcmVudC55KCksIHBhaW50UmVjdEluUGFyZW50LndpZHRoKCksIHBh
aW50UmVjdEluUGFyZW50LmhlaWdodCgpKTsKKyAgICB9Cit9CisKKy8vIGFkZEZvY3VzUmluZ1Jl
Y3RzIGlzIGNhbGxlZCBmcm9tIHBhaW50T3V0bGluZSBhbmQgbmVlZHMgdG8gYmUgaW4gdGhlIHNh
bWUgY29vcmRpbmF0ZXMgYXMgdGhlIHBhaW50T3VsaW5lIGNhbGwKK3ZvaWQgUmVuZGVyU1ZHQ29u
dGFpbmVyOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQsIGlu
dCkKK3sKKyAgICBJbnRSZWN0IHBhaW50UmVjdEluUGFyZW50ID0gZW5jbG9zaW5nSW50UmVjdChs
b2NhbFRvUGFyZW50VHJhbnNmb3JtKCkubWFwUmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpKSk7CisgICAgaWYgKCFwYWludFJlY3RJblBhcmVudC5pc0VtcHR5KCkpCisgICAgICAg
IHJlY3RzLmFwcGVuZChwYWludFJlY3RJblBhcmVudCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHQ29u
dGFpbmVyOjp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCkKK3sKKyAgICBtX29iamVjdEJvdW5kaW5n
Qm94ID0gRmxvYXRSZWN0KCk7CisgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgp
OworICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisKKyAgICBTVkdSZW5k
ZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyh0aGlzLCBtX29iamVjdEJv
dW5kaW5nQm94LCBtX3N0cm9rZUJvdW5kaW5nQm94LCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7Cisg
ICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRo
aXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKK30KKworYm9vbCBSZW5kZXJTVkdDb250YWluZXI6
Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFj
dGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAgIC8vIEdpdmUgUmVuZGVyU1ZHVmlld3BvcnRDb250
YWluZXIgYSBjaGFuY2UgdG8gYXBwbHkgaXRzIHZpZXdwb3J0IGNsaXAKKyAgICBpZiAoIXBvaW50
SXNJbnNpZGVWaWV3cG9ydENsaXAocG9pbnRJblBhcmVudCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0o
KS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisKKyAgICBpZiAoIVNWR1JlbmRl
clN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICBmb3IgKFJlbmRlck9iamVjdCog
Y2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGlu
ZygpKSB7CisgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0RmxvYXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIGxvY2FsUG9pbnQsIGhpdFRlc3RBY3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gU3BlYzogT25seSBn
cmFwaGljYWwgZWxlbWVudHMgY2FuIGJlIHRhcmdldGVkIGJ5IHRoZSBtb3VzZSwgcGVyaW9kLgor
ICAgIC8vIDE2LjQ6ICJJZiB0aGVyZSBhcmUgbm8gZ3JhcGhpY3MgZWxlbWVudHMgd2hvc2UgcmVs
ZXZhbnQgZ3JhcGhpY3MgY29udGVudCBpcyB1bmRlciB0aGUgcG9pbnRlciAoaS5lLiwgdGhlcmUg
aXMgbm8gdGFyZ2V0IGVsZW1lbnQpLCB0aGUgZXZlbnQgaXMgbm90IGRpc3BhdGNoZWQuIgorICAg
IHJldHVybiBmYWxzZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHJldmlzaW9uIDc1Mjcy
KQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaDo3NTI3MikKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgICAgICAgICAgICAg
ICAgICAyMDA0LCAyMDA1LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRl
ZiBSZW5kZXJTVkdDb250YWluZXJfaAorI2RlZmluZSBSZW5kZXJTVkdDb250YWluZXJfaAorCisj
aWYgRU5BQkxFKFNWRykKKworI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHRWxlbWVudDsKKworY2xhc3MgUmVuZGVyU1ZH
Q29udGFpbmVyIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBSZW5kZXJTVkdDb250YWluZXIoU1ZHU3R5bGVkRWxlbWVudCopOworICAgIHZpcnR1
YWwgflJlbmRlclNWR0NvbnRhaW5lcigpOworCisgICAgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRM
aXN0KiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CisgICAgUmVuZGVy
T2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZ
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRz
Qm91bmRhcmllc1VwZGF0ZSA9IHRydWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSB7IHJldHVybiBjaGlsZHJlbigp
OyB9CisgICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGls
ZHJlbigpIGNvbnN0IHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBp
c1NWR0NvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHQ29udGFpbmVyIjsg
fQorCisgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOworCisgICAgdmlydHVhbCB2b2lkIGFkZEZv
Y3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKKworICAgIHZp
cnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9vYmpl
Y3RCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXBhaW50Qm91bmRpbmdCb3g7IH0KKworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworCisgICAgLy8gQWxsb3cgUmVuZGVyU1ZH
VHJhbnNmb3JtYWJsZUNvbnRhaW5lciB0byBob29rIGluIGF0IHRoZSByaWdodCB0aW1lIGluIGxh
eW91dCgpCisgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCkgeyByZXR1
cm4gZmFsc2U7IH0KKworICAgIC8vIEFsbG93IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyIHRv
IGhvb2sgaW4gYXQgdGhlIHJpZ2h0IHRpbWVzIGluIGxheW91dCgpLCBwYWludCgpIGFuZCBub2Rl
QXRGbG9hdFBvaW50KCkKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ZpZXdwb3J0KCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIGFwcGx5Vmlld3BvcnRDbGlwKFBhaW50SW5mbyYpIHsgfQorICAgIHZpcnR1
YWwgYm9vbCBwb2ludElzSW5zaWRlVmlld3BvcnRDbGlwKGNvbnN0IEZsb2F0UG9pbnQmIC8qcG9p
bnRJblBhcmVudCovKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIHNlbGZXaWxsUGFpbnQo
KTsKKyAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKKworcHJpdmF0ZToKKyAgICBS
ZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKKyAgICBGbG9hdFJlY3QgbV9vYmplY3RC
b3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsKKyAgICBGbG9h
dFJlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7CisgICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1Vw
ZGF0ZSA6IDE7Cit9OworICAKK2lubGluZSBSZW5kZXJTVkdDb250YWluZXIqIHRvUmVuZGVyU1ZH
Q29udGFpbmVyKFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIC8vIE5vdGU6IGlzU1ZHQ29u
dGFpbmVyIGlzIGFsc28gdHJ1ZSBmb3IgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIsIHdoaWNo
IGlzIG5vdCBkZXJpdmVkIGZyb20gdGhpcy4KKyAgICBBU1NFUlQoIW9iamVjdCB8fCAob2JqZWN0
LT5pc1NWR0NvbnRhaW5lcigpICYmIHN0cmNtcChvYmplY3QtPnJlbmRlck5hbWUoKSwgIlJlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyIikpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVy
U1ZHQ29udGFpbmVyKj4ob2JqZWN0KTsKK30KKworaW5saW5lIGNvbnN0IFJlbmRlclNWR0NvbnRh
aW5lciogdG9SZW5kZXJTVkdDb250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7
CisgICAgLy8gTm90ZTogaXNTVkdDb250YWluZXIgaXMgYWxzbyB0cnVlIGZvciBSZW5kZXJTVkdW
aWV3cG9ydENvbnRhaW5lciwgd2hpY2ggaXMgbm90IGRlcml2ZWQgZnJvbSB0aGlzLgorICAgIEFT
U0VSVCghb2JqZWN0IHx8IChvYmplY3QtPmlzU1ZHQ29udGFpbmVyKCkgJiYgc3RyY21wKG9iamVj
dC0+cmVuZGVyTmFtZSgpLCAiUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIiKSkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdDb250YWluZXIqPihvYmplY3QpOworfQor
CisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2
b2lkIHRvUmVuZGVyU1ZHQ29udGFpbmVyKGNvbnN0IFJlbmRlclNWR0NvbnRhaW5lciopOworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmIC8v
IFJlbmRlclNWR0NvbnRhaW5lcl9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHR3JhZGllbnRTdG9wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHA6NzUyNzIpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDgzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9q
ZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRl
ICJSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCIKKworI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyLmgiCisjaW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50LmgiCisjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgorI2luY2x1ZGUgIlNW
R1N0b3BFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3VzaW5nIG5hbWVz
cGFjZSBTVkdOYW1lczsKKworUmVuZGVyU1ZHR3JhZGllbnRTdG9wOjpSZW5kZXJTVkdHcmFkaWVu
dFN0b3AoU1ZHU3RvcEVsZW1lbnQqIGVsZW1lbnQpCisgICAgOiBSZW5kZXJPYmplY3QoZWxlbWVu
dCkKK3sKK30KKworUmVuZGVyU1ZHR3JhZGllbnRTdG9wOjp+UmVuZGVyU1ZHR3JhZGllbnRTdG9w
KCkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdHcmFkaWVudFN0b3A6OnN0eWxlRGlkQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7CisgICAg
UmVuZGVyT2JqZWN0OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CisgICAgaWYgKGRp
ZmYgPT0gU3R5bGVEaWZmZXJlbmNlRXF1YWwpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIDxz
dG9wPiBlbGVtZW50cyBzaG91bGQgb25seSBiZSBhbGxvd2VkIHRvIG1ha2UgcmVuZGVyZXJzIHVu
ZGVyIGdyYWRpZW50IGVsZW1lbnRzCisgICAgLy8gYnV0IEkgY2FuIGltYWdpbmUgYSBmZXcgY2Fz
ZXMgd2UgbWlnaHQgbm90IGJlIGNhdGNoaW5nLCBzbyBsZXQncyBub3QgY3Jhc2ggaWYgb3VyIHBh
cmVudCBpc24ndCBhIGdyYWRpZW50LgorICAgIFNWR0dyYWRpZW50RWxlbWVudCogZ3JhZGllbnQg
PSBncmFkaWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWdyYWRpZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZ3JhZGllbnQtPnJlbmRlcmVyKCk7Cisg
ICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHJlbmRlcmVy
LT5pc1NWR1Jlc291cmNlQ29udGFpbmVyKCkpOworICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyKiBjb250YWluZXIgPSByZW5kZXJlci0+dG9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcigp
OworICAgIGNvbnRhaW5lci0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOworfQorCit2b2lk
IFJlbmRlclNWR0dyYWRpZW50U3RvcDo6bGF5b3V0KCkKK3sKKyAgICBzZXROZWVkc0xheW91dChm
YWxzZSk7Cit9CisKK1NWR0dyYWRpZW50RWxlbWVudCogUmVuZGVyU1ZHR3JhZGllbnRTdG9wOjpn
cmFkaWVudEVsZW1lbnQoKSBjb25zdAoreworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUg
PSBub2RlKCktPnBhcmVudE5vZGUoKTsKKyAgICBpZiAocGFyZW50Tm9kZS0+aGFzVGFnTmFtZShs
aW5lYXJHcmFkaWVudFRhZykgfHwgcGFyZW50Tm9kZS0+aGFzVGFnTmFtZShyYWRpYWxHcmFkaWVu
dFRhZykpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdHcmFkaWVudEVsZW1lbnQqPihw
YXJlbnROb2RlKTsKKyAgICByZXR1cm4gMDsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNW
RykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmgJKHJldmlzaW9uIDc1MjcyKQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdHcmFk
aWVudFN0b3AuaDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFk
aWVudFN0b3AuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclNWR0dyYWRpZW50U3RvcF9o
CisjZGVmaW5lIFJlbmRlclNWR0dyYWRpZW50U3RvcF9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjbGFz
cyBTVkdHcmFkaWVudEVsZW1lbnQ7CitjbGFzcyBTVkdTdG9wRWxlbWVudDsKKworLy8gVGhpcyBj
bGFzcyBleGlzdHMgbW9zdGx5IHNvIHdlIGNhbiBoZWFyIGFib3V0IGdyYWRpZW50IHN0b3Agc3R5
bGUgY2hhbmdlcworY2xhc3MgUmVuZGVyU1ZHR3JhZGllbnRTdG9wIDogcHVibGljIFJlbmRlck9i
amVjdCB7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHR3JhZGllbnRTdG9wKFNWR1N0b3BFbGVtZW50
Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHR3JhZGllbnRTdG9wKCk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdHcmFkaWVudFN0b3AoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR0dy
YWRpZW50U3RvcCI7IH0KKworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKKworICAgIC8vIFRo
aXMgb3ZlcnJpZGVzIGFyZSBuZWVkZWQgdG8gcHJldmVudCBBU1NFUlRzIG9uIDxzdmc+PHN0b3Ag
Lz48L3N2Zz4KKyAgICAvLyBSZW5kZXJPYmplY3QncyBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBB
U1NFUlRfTk9UX1JFQUNIRUQoKQorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDQwMAorICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0
Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCopIHsgcmV0dXJuIEludFJlY3QoKTsgfQor
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4g
RmxvYXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgp
IGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoKTsg
fQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKKworcHJpdmF0ZToKKyAgICBT
VkdHcmFkaWVudEVsZW1lbnQqIGdyYWRpZW50RWxlbWVudCgpIGNvbnN0OworfTsKKworaW5saW5l
IGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCogdG9SZW5kZXJTVkdHcmFkaWVudFN0b3AoY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0
LT5pc1NWR0dyYWRpZW50U3RvcCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVu
ZGVyU1ZHR3JhZGllbnRTdG9wKj4ob2JqZWN0KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxF
KFNWRykKKyNlbmRpZiAvLyBSZW5kZXJTVkdHcmFkaWVudFN0b3BfaApJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAJKHJldmlz
aW9uIDc1MjcyKQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWlu
ZXIuY3BwOjc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNv
bnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
LmgiCisKKyNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxl
bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR0hpZGRlbkNvbnRhaW5l
cjo6UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyKFNWR1N0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCisg
ICAgOiBSZW5kZXJTVkdDb250YWluZXIoZWxlbWVudCkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdI
aWRkZW5Db250YWluZXI6OmxheW91dCgpCit7CisgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwor
ICAgIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKHRoaXMsIHNlbGZOZWVkc0xheW91
dCgpKTsgCisgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOyAgICAKK30KKwordm9pZCBSZW5kZXJT
VkdIaWRkZW5Db250YWluZXI6OnBhaW50KFBhaW50SW5mbyYsIGludCwgaW50KQoreworICAgIC8v
IFRoaXMgc3VidHJlZSBkb2VzIG5vdCBwYWludC4KK30KKwordm9pZCBSZW5kZXJTVkdIaWRkZW5D
b250YWluZXI6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKQoreworICAgIC8vIFRo
aXMgc3VidHJlZSBkb2VzIG5vdCB0YWtlIHVwIHNwYWNlIG9yIHBhaW50Cit9CisKK2Jvb2wgUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
LmgJKHJldmlzaW9uIDc1MjcyKQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRk
ZW5Db250YWluZXIuaDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5k
ZXJTVkdIaWRkZW5Db250YWluZXJfaAorI2RlZmluZSBSZW5kZXJTVkdIaWRkZW5Db250YWluZXJf
aAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIFNWR1N0eWxlZEVsZW1lbnQ7Cisg
ICAgCisgICAgLy8gVGhpcyBjbGFzcyBpcyBmb3IgY29udGFpbmVycyB3aGljaCBhcmUgbmV2ZXIg
ZHJhd24sIGJ1dCBkbyBuZWVkIHRvIHN1cHBvcnQgc3R5bGUKKyAgICAvLyA8ZGVmcz4sIDxsaW5l
YXJHcmFkaWVudD4sIDxyYWRpYWxHcmFkaWVudD4gYXJlIGFsbCBnb29kIGV4YW1wbGVzCisgICAg
Y2xhc3MgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyIDogcHVibGljIFJlbmRlclNWR0NvbnRhaW5l
ciB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBSZW5kZXJTVkdIaWRkZW5Db250YWlu
ZXIoU1ZHU3R5bGVkRWxlbWVudCopOworCisgICAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVu
ZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdIaWRkZW5Db250YWluZXIiOyB9CisK
KyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NWR0hpZGRlbkNvbnRhaW5lcigpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWlu
dEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOworICAgICAgICAKKyAgICAgICAgdmly
dHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KikgeyByZXR1cm4gSW50UmVjdCgpOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBhYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisKKyAgICAgICAgdmlydHVhbCBib29sIG5v
ZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisgICAgfTsKK30K
KworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8gUmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAkocmV2
aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcDo3
NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IEFs
ZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgICAgQ29weXJpZ2h0IChDKSAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCwgMjAwOSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwOSwg
R29vZ2xlLCBJbmMuCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFy
b2dhQHBhcm9nYS5jb20+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNW
RykKKyNpbmNsdWRlICJSZW5kZXJTVkdJbWFnZS5oIgorCisjaW5jbHVkZSAiQXR0ci5oIgorI2lu
Y2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxlcy5o
IgorI2luY2x1ZGUgIlJlbmRlckltYWdlUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCisjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKyNpbmNsdWRlICJTVkdJbWFnZUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJTVkdMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNl
cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR0ltYWdlOjpSZW5kZXJTVkdJ
bWFnZShTVkdJbWFnZUVsZW1lbnQqIGltcGwpCisgICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChp
bXBsKQorICAgICwgbV91cGRhdGVDYWNoZWRSZXBhaW50UmVjdCh0cnVlKQorICAgICwgbV9uZWVk
c1RyYW5zZm9ybVVwZGF0ZSh0cnVlKQorICAgICwgbV9pbWFnZVJlc291cmNlKFJlbmRlckltYWdl
UmVzb3VyY2U6OmNyZWF0ZSgpKQoreworICAgIG1faW1hZ2VSZXNvdXJjZS0+aW5pdGlhbGl6ZSh0
aGlzKTsKK30KKworUmVuZGVyU1ZHSW1hZ2U6On5SZW5kZXJTVkdJbWFnZSgpCit7CisgICAgbV9p
bWFnZVJlc291cmNlLT5zaHV0ZG93bigpOworfQorCit2b2lkIFJlbmRlclNWR0ltYWdlOjpsYXlv
dXQoKQoreworICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKKworICAgIExheW91dFJlcGFpbnRl
ciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZO
ZWVkc0xheW91dCgpKTsKKyAgICBTVkdJbWFnZUVsZW1lbnQqIGltYWdlID0gc3RhdGljX2Nhc3Q8
U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKKworICAgIGJvb2wgdHJhbnNmb3JtT3JCb3VuZGFy
aWVzVXBkYXRlID0gbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSB8fCBtX3VwZGF0ZUNhY2hlZFJlcGFp
bnRSZWN0OworICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7CisgICAgICAgIG1fbG9j
YWxUcmFuc2Zvcm0gPSBpbWFnZS0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOworICAgICAgICBt
X25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1fdXBkYXRl
Q2FjaGVkUmVwYWludFJlY3QpIHsKKyAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBtX29i
amVjdEJvdW5kaW5nQm94OworICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBh
aW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworICAgICAg
ICBtX3VwZGF0ZUNhY2hlZFJlcGFpbnRSZWN0ID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gSW52
YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBsYXlvdXQgY2hhbmdl
ZC4KKyAgICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91dCgpKQorICAgICAg
ICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZCh0aGlzKTsKKworICAgIC8v
IElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgorICAgIGlmICh0cmFu
c2Zvcm1PckJvdW5kYXJpZXNVcGRhdGUpCisgICAgICAgIFJlbmRlclNWR01vZGVsT2JqZWN0Ojpz
ZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKKworICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJM
YXlvdXQoKTsKKyAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZH
SW1hZ2U6OnVwZGF0ZUZyb21FbGVtZW50KCkKK3sKKyAgICBTVkdJbWFnZUVsZW1lbnQqIGltYWdl
ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKKworICAgIEZsb2F0UmVj
dCBvbGRCb3VuZGFyaWVzID0gbV9vYmplY3RCb3VuZGluZ0JveDsKKyAgICBtX29iamVjdEJvdW5k
aW5nQm94ID0gRmxvYXRSZWN0KGltYWdlLT54KCkudmFsdWUoaW1hZ2UpLCBpbWFnZS0+eSgpLnZh
bHVlKGltYWdlKSwgaW1hZ2UtPndpZHRoKCkudmFsdWUoaW1hZ2UpLCBpbWFnZS0+aGVpZ2h0KCku
dmFsdWUoaW1hZ2UpKTsKKyAgICBpZiAobV9vYmplY3RCb3VuZGluZ0JveCAhPSBvbGRCb3VuZGFy
aWVzKSB7CisgICAgICAgIG1fdXBkYXRlQ2FjaGVkUmVwYWludFJlY3QgPSB0cnVlOworICAgICAg
ICBzZXROZWVkc0xheW91dCh0cnVlKTsKKyAgICB9CisgICAgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OnVwZGF0ZUZyb21FbGVtZW50KCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKK3sKKyAgICBpZiAocGFpbnRJbmZvLmNvbnRl
eHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVO
IHx8ICFtX2ltYWdlUmVzb3VyY2UtPmhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7
CisgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJl
Y3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBhaW50SW5mbykpCisgICAgICAgIHJl
dHVybjsKKworICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhwYWludEluZm8pOworICAgIGJv
b2wgZHJhd3NPdXRsaW5lID0gc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgJiYgKGNoaWxkUGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2VTZWxmT3V0bGluZSk7CisgICAgaWYgKGRyYXdzT3V0bGluZSB8fCBjaGlsZFBh
aW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgeworICAgICAgICBjaGlsZFBh
aW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJh
bnNmb3JtKG1fbG9jYWxUcmFuc2Zvcm0pOworCisgICAgICAgIGlmIChjaGlsZFBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgeworICAgICAgICAgICAgUGFpbnRJbmZvIHNh
dmVkSW5mbyhjaGlsZFBhaW50SW5mbyk7CisKKyAgICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBw
b3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgewor
ICAgICAgICAgICAgICAgIEltYWdlKiBpbWFnZSA9IG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2UoKTsK
KyAgICAgICAgICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBtX29iamVjdEJvdW5kaW5nQm94
OworICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAsIGltYWdlLT53aWR0aCgp
LCBpbWFnZS0+aGVpZ2h0KCkpOworCisgICAgICAgICAgICAgICAgU1ZHSW1hZ2VFbGVtZW50KiBp
bWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQqPihub2RlKCkpOworICAg
ICAgICAgICAgICAgIGlmIChpbWFnZUVsZW1lbnQtPnByZXNlcnZlQXNwZWN0UmF0aW8oKS5hbGln
bigpICE9IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05P
TkUpCisgICAgICAgICAgICAgICAgICAgIGltYWdlRWxlbWVudC0+cHJlc2VydmVBc3BlY3RSYXRp
bygpLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOworCisgICAgICAgICAgICAgICAg
Y2hpbGRQYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNW
R1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludElu
Zm8sIHNhdmVkSW5mby5jb250ZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkcmF3c091
dGxpbmUpCisgICAgICAgICAgICBwYWludE91dGxpbmUoY2hpbGRQYWludEluZm8uY29udGV4dCwg
c3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ0JveC54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KGJvdW5k
aW5nQm94LnkoKSksCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ0Jv
eC53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ0JveC5oZWlnaHQoKSkpOworICAg
ICAgICAKKyAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOworICAgIH0K
K30KKworYm9vbCBSZW5kZXJTVkdJbWFnZTo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCit7CisgICAgLy8g
V2Ugb25seSBkcmF3IGluIHRoZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRlc3Qg
dGhlbi4KKyAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgUG9pbnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBv
aW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX0lNQUdFX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxl
KCktPnBvaW50ZXJFdmVudHMoKSk7CisgICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IFZJU0lCTEUpOworICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJl
cXVpcmVWaXNpYmxlKSB7CisgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdB
cmVhKHRoaXMsIGxvY2FsUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGlmIChoaXRSdWxlcy5jYW5IaXRGaWxsKSB7CisgICAgICAgICAgICBpZiAobV9vYmplY3RC
b3VuZGluZ0JveC5jb250YWlucyhsb2NhbFBvaW50KSkgeworICAgICAgICAgICAgICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCByb3VuZGVkSW50UG9pbnQobG9jYWxQb2ludCkpOworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclNWR0ltYWdlOjppbWFnZUNo
YW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KikKK3sKKyAgICAvLyBUaGUgaW1h
Z2UgcmVzb3VyY2UgZGVmYXVsdHMgdG8gbnVsbEltYWdlIHVudGlsIHRoZSByZXNvdXJjZSBhcnJp
dmVzLgorICAgIC8vIFRoaXMgZW1wdHkgaW1hZ2UgbWF5IGJlIGNhY2hlZCBieSBTVkcgcmVzb3Vy
Y2VzIHdoaWNoIG11c3QgYmUgaW52YWxpZGF0ZWQuCisgICAgaWYgKFNWR1Jlc291cmNlcyogcmVz
b3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVj
dCh0aGlzKSkKKyAgICAgICAgcmVzb3VyY2VzLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUodGhpcyk7
CisKKyAgICAvLyBFdmVudHVhbGx5IG5vdGlmeSBwYXJlbnQgcmVzb3VyY2VzLCB0aGF0IHdlJ3Zl
IGNoYW5nZWQuCisgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRS
ZXNvdXJjZUludmFsaWRhdGlvbih0aGlzLCBmYWxzZSk7CisKKyAgICByZXBhaW50KCk7Cit9CisK
K3ZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYg
cmVjdHMsIGludCwgaW50KQoreworICAgIC8vIHRoaXMgaXMgY2FsbGVkIGZyb20gcGFpbnQoKSBh
ZnRlciB0aGUgbG9jYWxUcmFuc2Zvcm0gaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkCisgICAgSW50
UmVjdCBjb250ZW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKSk7CisgICAgaWYgKCFjb250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJl
Y3RzLmFwcGVuZChjb250ZW50UmVjdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW1hZ2UuaAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0ltYWdlLmg6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgorICAgIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJp
Z2h0IChDKSAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSwgSW5jLgorICAgIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJl
ciA8cGFyb2dhQHBhcm9nYS5jb20+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBSZW5kZXJTVkdJbWFnZV9oCisjZGVm
aW5lIFJlbmRlclNWR0ltYWdlX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
TW9kZWxPYmplY3QuaCIKKyNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCisjaW5j
bHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFJlbmRlckltYWdlUmVzb3VyY2U7CitjbGFzcyBTVkdJbWFnZUVsZW1lbnQ7CisKK2NsYXNzIFJl
bmRlclNWR0ltYWdlIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICBSZW5kZXJTVkdJbWFnZShTVkdJbWFnZUVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJT
VkdJbWFnZSgpOworCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkg
eyBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVGcm9tRWxlbWVudCgpOworCisgICAgUmVuZGVySW1hZ2VSZXNvdXJjZSogaW1hZ2VSZXNvdXJj
ZSgpIHsgcmV0dXJuIG1faW1hZ2VSZXNvdXJjZS5nZXQoKTsgfQorICAgIGNvbnN0IFJlbmRlcklt
YWdlUmVzb3VyY2UqIGltYWdlUmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlUmVzb3Vy
Y2UuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5h
bWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHSW1hZ2UiOyB9CisgICAgdmlydHVhbCBib29s
IGlzU1ZHSW1hZ2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYWxUcmFuc2Zvcm07IH0KKworICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5k
aW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1
YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RC
b3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgs
IGludCB0eSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0
ciwgY29uc3QgSW50UmVjdCogPSAwKTsKKworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZ
KTsKKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQs
IEhpdFRlc3RBY3Rpb24pOworCisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisKKyAgICBib29sIG1f
dXBkYXRlQ2FjaGVkUmVwYWludFJlY3QgOiAxOworICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVw
ZGF0ZSA6IDE7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CisgICAgRmxv
YXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5k
aW5nQm94OworICAgIE93blB0cjxSZW5kZXJJbWFnZVJlc291cmNlPiBtX2ltYWdlUmVzb3VyY2U7
Cit9OworCitpbmxpbmUgUmVuZGVyU1ZHSW1hZ2UqIHRvUmVuZGVyU1ZHSW1hZ2UoUmVuZGVyT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR0ltYWdl
KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTVkdJbWFnZSo+KG9iamVjdCk7Cit9
CisKK2lubGluZSBjb25zdCBSZW5kZXJTVkdJbWFnZSogdG9SZW5kZXJTVkdJbWFnZShjb25zdCBS
ZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlz
U1ZHSW1hZ2UoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR0ltYWdl
Kj4ob2JqZWN0KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5l
Y2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlclNWR0ltYWdlKGNvbnN0IFJlbmRlclNWR0ltYWdl
Kik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisj
ZW5kaWYgLy8gUmVuZGVyU1ZHSW1hZ2VfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiA3NTI3MikJKGZyb20gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOjc1MjcyKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQor
I2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCisKKyNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZW5kZXJTVkdNb2RlbE9iamVjdDo6UmVuZGVyU1ZHTW9kZWxPYmplY3QoU1ZH
U3R5bGVkRWxlbWVudCogbm9kZSkKKyAgICA6IFJlbmRlck9iamVjdChub2RlKQoreworfQorCitJ
bnRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWlu
dChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikKK3sKKyAgICByZXR1cm4g
U1ZHUmVuZGVyU3VwcG9ydDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQodGhpcywgcmVw
YWludENvbnRhaW5lcik7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNvbXB1dGVS
ZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50
UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCit7CisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6
Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIsIHJlcGFpbnRSZWN0
LCBmaXhlZCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om1hcExvY2FsVG9Db250
YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQg
LCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29u
c3QKK3sKKyAgICBTVkdSZW5kZXJTdXBwb3J0OjptYXBMb2NhbFRvQ29udGFpbmVyKHRoaXMsIHJl
cGFpbnRDb250YWluZXIsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0ZSk7Cit9
CisKKy8vIENvcGllZCBmcm9tIFJlbmRlckJveCwgdGhpcyBtZXRob2QgbGlrZWx5IHJlcXVpcmVz
IGZ1cnRoZXIgcmVmYWN0b3JpbmcgdG8gd29yayBlYXNpbHkgZm9yIGJvdGggU1ZHIGFuZCBDU1Mg
Qm94IE1vZGVsIGNvbnRlbnQuCisvLyBGSVhNRTogVGhpcyBtYXkgYWxzbyBuZWVkIHRvIG1vdmUg
aW50byBTVkdSZW5kZXJTdXBwb3J0IGFzIHRoZSBSZW5kZXJCb3ggdmVyc2lvbiBkZXBlbmRzCisv
LyBvbiBib3JkZXJCb3VuZGluZ0JveCgpIHdoaWNoIFNWRyBSZW5kZXJCb3ggc3ViY2xhc2VzIChs
aWtlIFNWR1JlbmRlckJsb2NrKSBkbyBub3QgaW1wbGVtZW50LgorSW50UmVjdCBSZW5kZXJTVkdN
b2RlbE9iamVjdDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIEludFBvaW50KikgY29uc3QKK3sKKyAgICBJbnRSZWN0IGJveCA9
IGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAg
YWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3coYm94KTsKKworICAgIEZsb2F0UXVhZCBjb250
YWluZXJSZWxhdGl2ZVF1YWQgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3QoYm94KSwg
cmVwYWludENvbnRhaW5lcik7CisgICAgcmV0dXJuIGNvbnRhaW5lclJlbGF0aXZlUXVhZC5lbmNs
b3NpbmdCb3VuZGluZ0JveCgpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNv
bHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCwgaW50KQoreworICAgIC8vIFRoaXMgY29k
ZSBwYXRoIHNob3VsZCBuZXZlciBiZSB0YWtlbiBmb3IgU1ZHLCBhcyB3ZSdyZSBhc3N1bWluZyB1
c2VUcmFuc2Zvcm1zPXRydWUgZXZlcnl3aGVyZSwgYWJzb2x1dGVRdWFkcyBzaG91bGQgYmUgdXNl
ZC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9i
amVjdDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit7CisgICAgcXVh
ZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoc3Ryb2tlQm91bmRpbmdCb3goKSkpOworfQor
Cit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjpkZXN0cm95KCkKK3sKKyAgICBTVkdSZXNvdXJj
ZXNDYWNoZTo6Y2xpZW50RGVzdHJveWVkKHRoaXMpOworICAgIFJlbmRlck9iamVjdDo6ZGVzdHJv
eSgpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzdHlsZVdpbGxDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKK3sKKyAgICBp
ZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQpCisgICAgICAgIHNldE5lZWRzQm91bmRh
cmllc1VwZGF0ZSgpOworICAgIFJlbmRlck9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKGRpZmYsIG5l
d1N0eWxlKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3sKKyAg
ICBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBTVkdS
ZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKHRoaXMsIGRpZmYsIHN0eWxlKCkpOwor
fQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCit7Cisg
ICAgUmVuZGVyT2JqZWN0Ojp1cGRhdGVGcm9tRWxlbWVudCgpOworICAgIFNWR1Jlc291cmNlc0Nh
Y2hlOjpjbGllbnRVcGRhdGVkRnJvbUVsZW1lbnQodGhpcywgc3R5bGUoKSk7Cit9CisKK2Jvb2wg
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAkocmV2aXNpb24gNzUyNzIpCShm
cm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0Lmg6NzUyNzIpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHTW9kZWxPYmplY3RfaAorI2Rl
ZmluZSBSZW5kZXJTVkdNb2RlbE9iamVjdF9oCisKKyNpZiBFTkFCTEUoU1ZHKQorCisjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIE1vc3QgcmVuZGVyZXJzIGluIHRoZSBTVkcgcmVuZGVyaW5n
IHRyZWUgd2lsbCBpbmhlcml0IGZyb20gdGhpcyBjbGFzcworLy8gYnV0IG5vdCBhbGwuIChlLmcu
IFJlbmRlclNWR0ZvcmVpZ25PYmplY3QsIFJlbmRlclNWR0Jsb2NrKSB0aHVzIG1ldGhvZHMKKy8v
IHJlcXVpcmVkIGJ5IFNWRyByZW5kZXJzIG5lZWQgdG8gYmUgZGVjbGFyZWQgb24gUmVuZGVyT2Jq
ZWN0LCBidXQgc2hhcmVkCisvLyBsb2dpYyBjYW4gZ28gaW4gdGhpcyBjbGFzcyBvciBpbiBTVkdS
ZW5kZXJTdXBwb3J0LgorCitjbGFzcyBTVkdTdHlsZWRFbGVtZW50OworCitjbGFzcyBSZW5kZXJT
VkdNb2RlbE9iamVjdCA6IHB1YmxpYyBSZW5kZXJPYmplY3QgeworcHVibGljOgorICAgIGV4cGxp
Y2l0IFJlbmRlclNWR01vZGVsT2JqZWN0KFNWR1N0eWxlZEVsZW1lbnQqKTsKKworICAgIHZpcnR1
YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZp
cnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lcik7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0
Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVj
dCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CisgICAgdmlydHVhbCBJbnRSZWN0IG91dGxpbmVCb3Vu
ZHNGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRQ
b2ludCopIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRz
KFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworCisg
ICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNm
b3JtU3RhdGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOworCitwcml2YXRl
OgorICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBuZXZlciBiZSBjYWxsZWQsIFNWRyB1c2VzIGEg
ZGlmZmVyZW50IG5vZGVBdFBvaW50IG1ldGhvZAorICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHhJbkNv
bnRhaW5lciwgaW50IHlJbkNvbnRhaW5lciwgaW50IGR4UGFyZW50VG9Db250YWluZXIsIGludCBk
eVBhcmVudFRvQ29udGFpbmVyLCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pOworfTsKKwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA3NTI3MikJKGZyb20gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwOjc1MjcyKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdVUklS
ZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIFJlbmRl
clNWR1Jlc291cmNlKiByZXF1ZXN0UGFpbnRpbmdSZXNvdXJjZShSZW5kZXJTVkdSZXNvdXJjZU1v
ZGUgbW9kZSwgUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwg
Q29sb3ImIGZhbGxiYWNrQ29sb3IpCit7CisgICAgQVNTRVJUKG9iamVjdCk7CisgICAgQVNTRVJU
KHN0eWxlKTsKKworICAgIC8vIElmIHdlIGhhdmUgbm8gc3R5bGUgYXQgYWxsLCBpZ25vcmUgaXQu
CisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7
CisgICAgaWYgKCFzdmdTdHlsZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBJZiB3ZSBo
YXZlIG5vIGZpbGwvc3Ryb2tlLCByZXR1cm4gMC4KKyAgICBpZiAobW9kZSA9PSBBcHBseVRvRmls
bE1vZGUpIHsKKyAgICAgICAgaWYgKCFzdmdTdHlsZS0+aGFzRmlsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFzdmdTdHlsZS0+aGFzU3Ryb2tl
KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBTVkdQYWludCogcGFpbnQg
PSBtb2RlID09IEFwcGx5VG9GaWxsTW9kZSA/IHN2Z1N0eWxlLT5maWxsUGFpbnQoKSA6IHN2Z1N0
eWxlLT5zdHJva2VQYWludCgpOworICAgIEFTU0VSVChwYWludCk7CisKKyAgICBTVkdQYWludDo6
U1ZHUGFpbnRUeXBlIHBhaW50VHlwZSA9IHBhaW50LT5wYWludFR5cGUoKTsKKyAgICBpZiAocGFp
bnRUeXBlID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX05PTkUpCisgICAgICAgIHJldHVybiAw
OworCisgICAgQ29sb3IgY29sb3I7CisgICAgaWYgKHBhaW50VHlwZSA9PSBTVkdQYWludDo6U1ZH
X1BBSU5UVFlQRV9SR0JDT0xPUgorICAgICAgICB8fCBwYWludFR5cGUgPT0gU1ZHUGFpbnQ6OlNW
R19QQUlOVFRZUEVfUkdCQ09MT1JfSUNDQ09MT1IKKyAgICAgICAgfHwgcGFpbnRUeXBlID09IFNW
R1BhaW50OjpTVkdfUEFJTlRUWVBFX1VSSV9SR0JDT0xPUgorICAgICAgICB8fCBwYWludFR5cGUg
PT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfVVJJX1JHQkNPTE9SX0lDQ0NPTE9SKQorICAgICAg
ICBjb2xvciA9IHBhaW50LT5jb2xvcigpOworICAgIGVsc2UgaWYgKHBhaW50VHlwZSA9PSBTVkdQ
YWludDo6U1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IgfHwgcGFpbnRUeXBlID09IFNWR1BhaW50
OjpTVkdfUEFJTlRUWVBFX1VSSV9DVVJSRU5UQ09MT1IpCisgICAgICAgIGNvbG9yID0gc3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKKworICAgIGlmIChzdHls
ZS0+aW5zaWRlTGluaygpID09IEluc2lkZVZpc2l0ZWRMaW5rKSB7CisgICAgICAgIFJlbmRlclN0
eWxlKiB2aXNpdGVkU3R5bGUgPSBzdHlsZS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoVklTSVRFRF9M
SU5LKTsKKyAgICAgICAgQVNTRVJUKHZpc2l0ZWRTdHlsZSk7CisKKyAgICAgICAgaWYgKFNWR1Bh
aW50KiB2aXNpdGVkUGFpbnQgPSBtb2RlID09IEFwcGx5VG9GaWxsTW9kZSA/IHZpc2l0ZWRTdHls
ZS0+c3ZnU3R5bGUoKS0+ZmlsbFBhaW50KCkgOiB2aXNpdGVkU3R5bGUtPnN2Z1N0eWxlKCktPnN0
cm9rZVBhaW50KCkpIHsKKyAgICAgICAgICAgIC8vIEZvciBTVkdfUEFJTlRUWVBFX0NVUlJFTlRD
T0xPUiwgJ2NvbG9yJyBhbHJlYWR5IGNvbnRhaW5zIHRoZSAndmlzaXRlZENvbG9yJy4KKyAgICAg
ICAgICAgIGlmICh2aXNpdGVkUGFpbnQtPnBhaW50VHlwZSgpIDwgU1ZHUGFpbnQ6OlNWR19QQUlO
VFRZUEVfVVJJX05PTkUgJiYgdmlzaXRlZFBhaW50LT5wYWludFR5cGUoKSAhPSBTVkdQYWludDo6
U1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBDb2xv
ciYgdmlzaXRlZENvbG9yID0gdmlzaXRlZFBhaW50LT5jb2xvcigpOworICAgICAgICAgICAgICAg
IGlmICh2aXNpdGVkQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBjb2xvciA9
IENvbG9yKHZpc2l0ZWRDb2xvci5yZWQoKSwgdmlzaXRlZENvbG9yLmdyZWVuKCksIHZpc2l0ZWRD
b2xvci5ibHVlKCksIGNvbG9yLmFscGhhKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gSWYgdGhlIHByaW1hcnkgcmVzb3VyY2UgaXMganVzdCBhIGNvbG9yLCBy
ZXR1cm4gaW1tZWRpYXRlbHkuCisgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBjb2xv
clJlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJj
ZSgpOworICAgIGlmIChwYWludFR5cGUgPCBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfTk9O
RSkgeworICAgICAgICAvLyBJZiBhbiBpbnZhbGlkIGZpbGwgY29sb3IgaXMgc3BlY2lmaWVkLCBm
YWxsYmFjayB0byBmaWxsL3N0cm9rZT0ibm9uZSIuCisgICAgICAgIGlmICghY29sb3IuaXNWYWxp
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgY29sb3JSZXNvdXJjZS0+c2V0
Q29sb3IoY29sb3IpOworICAgICAgICByZXR1cm4gY29sb3JSZXNvdXJjZTsKKyAgICB9CisKKyAg
ICAvLyBJZiBubyByZXNvdXJjZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcmVuZGVy
ZXIsIHJldHVybiB0aGUgY29sb3IgcmVzb3VyY2UuCisgICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJj
ZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KG9i
amVjdCk7CisgICAgaWYgKCFyZXNvdXJjZXMpIHsKKyAgICAgICAgLy8gSWYgYSBwYWludCBzZXJ2
ZXIgaXMgc3BlY2lmaWVkLCBhbmQgbm8gb3IgYW4gaW52YWxpZCBmYWxsYmFjayBjb2xvciBpcyBn
aXZlbiwgZGVmYXVsdCB0byBmaWxsL3N0cm9rZT0iYmxhY2siLgorICAgICAgICBpZiAoIWNvbG9y
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGNvbG9yID0gQ29sb3I6OmJsYWNrOworCisgICAgICAg
IGNvbG9yUmVzb3VyY2UtPnNldENvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuIGNvbG9yUmVz
b3VyY2U7CisgICAgfQorCisgICAgLy8gSWYgdGhlIHJlcXVlc3RlZCByZXNvdXJjZSBpcyBub3Qg
YXZhaWxhYmxlLCByZXR1cm4gdGhlIGNvbG9yIHJlc291cmNlLgorICAgIFJlbmRlclNWR1Jlc291
cmNlKiB1cmlSZXNvdXJjZSA9IG1vZGUgPT0gQXBwbHlUb0ZpbGxNb2RlID8gcmVzb3VyY2VzLT5m
aWxsKCkgOiByZXNvdXJjZXMtPnN0cm9rZSgpOworICAgIGlmICghdXJpUmVzb3VyY2UpIHsKKyAg
ICAgICAgLy8gSWYgYSBwYWludCBzZXJ2ZXIgaXMgc3BlY2lmaWVkLCBhbmQgbm8gb3IgYW4gaW52
YWxpZCBmYWxsYmFjayBjb2xvciBpcyBnaXZlbiwgZGVmYXVsdCB0byBmaWxsL3N0cm9rZT0iYmxh
Y2siLgorICAgICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGNvbG9yID0g
Q29sb3I6OmJsYWNrOworCisgICAgICAgIGNvbG9yUmVzb3VyY2UtPnNldENvbG9yKGNvbG9yKTsK
KyAgICAgICAgcmV0dXJuIGNvbG9yUmVzb3VyY2U7CisgICAgfQorCisgICAgLy8gVGhlIHBhaW50
IHNlcnZlciByZXNvdXJjZSBleGlzdHMsIHRob3VnaCBpdCBtYXkgYmUgaW52YWxpZCAocGF0dGVy
biB3aXRoIHdpZHRoL2hlaWdodD0wKS4gUGFzcyB0aGUgZmFsbGJhY2sgY29sb3IgdG8gb3VyIGNh
bGxlcgorICAgIC8vIHNvIGl0IGNhbiB1c2UgdGhlIHNvbGlkIGNvbG9yIHBhaW50aW5nIHJlc291
cmNlLCBpZiBhcHBseVJlc291cmNlKCkgb24gdGhlIFVSSSByZXNvdXJjZSBmYWlsZWQuCisgICAg
ZmFsbGJhY2tDb2xvciA9IGNvbG9yOworICAgIHJldHVybiB1cmlSZXNvdXJjZTsKK30KKworUmVu
ZGVyU1ZHUmVzb3VyY2UqIFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZShS
ZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBDb2xvciYgZmFs
bGJhY2tDb2xvcikKK3sKKyAgICByZXR1cm4gcmVxdWVzdFBhaW50aW5nUmVzb3VyY2UoQXBwbHlU
b0ZpbGxNb2RlLCBvYmplY3QsIHN0eWxlLCBmYWxsYmFja0NvbG9yKTsKK30KKworUmVuZGVyU1ZH
UmVzb3VyY2UqIFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIENvbG9yJiBmYWxsYmFj
a0NvbG9yKQoreworICAgIHJldHVybiByZXF1ZXN0UGFpbnRpbmdSZXNvdXJjZShBcHBseVRvU3Ry
b2tlTW9kZSwgb2JqZWN0LCBzdHlsZSwgZmFsbGJhY2tDb2xvcik7Cit9CisKK1JlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvciogUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdS
ZXNvdXJjZSgpCit7CisgICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogc19z
aGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UgPSAwOworICAgIGlmICghc19zaGFyZWRTb2xpZFBh
aW50aW5nUmVzb3VyY2UpCisgICAgICAgIHNfc2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlID0g
bmV3IFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjsKKyAgICByZXR1cm4gc19zaGFyZWRTb2xp
ZFBhaW50aW5nUmVzb3VyY2U7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JM
YXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihSZW5kZXJPYmplY3QqIG9iamVjdCwg
Ym9vbCBuZWVkc0xheW91dCkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBpZiAobmVlZHNM
YXlvdXQpCisgICAgICAgIG9iamVjdC0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CisKKyAgICAvLyBJ
bnZhbGlkYXRlIHJlc291cmNlcyBpbiBhbmNlc3RvciBjaGFpbiwgaWYgbmVlZGVkLgorICAgIFJl
bmRlck9iamVjdCogY3VycmVudCA9IG9iamVjdC0+cGFyZW50KCk7CisgICAgd2hpbGUgKGN1cnJl
bnQpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmlzU1ZHUmVzb3VyY2VDb250YWluZXIoKSkgewor
ICAgICAgICAgICAgY3VycmVudC0+dG9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcigpLT5yZW1v
dmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnQoKTsKKyAgICB9Cit9CisKK30KKwor
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAko
cmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
Lmg6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlX2gKKyNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2Vf
aAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgor
I2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2VudW0gUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHsKKyAgICBNYXNrZXJSZXNvdXJjZVR5cGUs
CisgICAgTWFya2VyUmVzb3VyY2VUeXBlLAorICAgIFBhdHRlcm5SZXNvdXJjZVR5cGUsCisgICAg
TGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGUsCisgICAgUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5
cGUsCisgICAgU29saWRDb2xvclJlc291cmNlVHlwZSwKKyAgICBGaWx0ZXJSZXNvdXJjZVR5cGUs
CisgICAgQ2xpcHBlclJlc291cmNlVHlwZQorfTsKKworZW51bSBSZW5kZXJTVkdSZXNvdXJjZU1v
ZGUgeworICAgIEFwcGx5VG9EZWZhdWx0TW9kZSA9IDEgPDwgMCwgLy8gdXNlZCBmb3IgYWxsIHJl
c291cmNlcyBleGNlcHQgZ3JhZGllbnQvcGF0dGVybgorICAgIEFwcGx5VG9GaWxsTW9kZSAgICA9
IDEgPDwgMSwKKyAgICBBcHBseVRvU3Ryb2tlTW9kZSAgPSAxIDw8IDIsCisgICAgQXBwbHlUb1Rl
eHRNb2RlICAgID0gMSA8PCAzIC8vIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBBcHBseVRve0Zp
bGx8U3Ryb2tlfU1vZGUKK307CisKK2NsYXNzIENvbG9yOworY2xhc3MgRmxvYXRSZWN0OworY2xh
c3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgUGF0aDsKK2NsYXNzIFJlbmRlck9iamVjdDsKK2Ns
YXNzIFJlbmRlclN0eWxlOworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOworCitj
bGFzcyBSZW5kZXJTVkdSZXNvdXJjZSB7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHUmVzb3VyY2Uo
KSB7IH0KKyAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSZXNvdXJjZSgpIHsgfQorCisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9u
ID0gdHJ1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSkgPSAwOworCisgICAg
dmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBH
cmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29u
dGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCopIHsgfQorICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgPSAwOworCisgICAgdmly
dHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgPSAwOworCisg
ICAgdGVtcGxhdGU8Y2xhc3MgUmVuZGVyZXI+CisgICAgUmVuZGVyZXIqIGNhc3QoKQorICAgIHsK
KyAgICAgICAgaWYgKFJlbmRlcmVyOjpzX3Jlc291cmNlVHlwZSA9PSByZXNvdXJjZVR5cGUoKSkK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJlcio+KHRoaXMpOworCisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIEhlbHBlciB1dGlsaXRpZXMgdXNlZCBpbiB0
aGUgcmVuZGVyIHRyZWUgdG8gYWNjZXNzIHJlc291cmNlcyB1c2VkIGZvciBwYWludGluZyBzaGFw
ZXMvdGV4dCAoZ3JhZGllbnRzICYgcGF0dGVybnMgJiBzb2xpZCBjb2xvcnMgb25seSkKKyAgICBz
dGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlKFJlbmRlck9iamVj
dCosIGNvbnN0IFJlbmRlclN0eWxlKiwgQ29sb3ImIGZhbGxiYWNrQ29sb3IpOworICAgIHN0YXRp
YyBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJTdHlsZSosIENvbG9yJiBmYWxsYmFja0NvbG9yKTsKKyAgICBzdGF0aWMg
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2Uo
KTsKKworICAgIHN0YXRpYyB2b2lkIG1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFs
aWRhdGlvbihSZW5kZXJPYmplY3QqLCBib29sIG5lZWRzTGF5b3V0ID0gdHJ1ZSk7Cit9OworCit9
CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHA6NzUyNzIpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqICAg
ICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5
LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIgorCisj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKKyNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNW
R0NsaXBQYXRoRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJT
VkdJbWFnZUJ1ZmZlclRvb2xzLmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJT
VkdSZW5kZXJTdXBwb3J0LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCisjaW5jbHVkZSAi
U1ZHU3R5bGVkRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50LmgiCisjaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCisjaW5jbHVkZSAiU1ZHVXNlRWxlbWVu
dC5oIgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnNfcmVz
b3VyY2VUeXBlID0gQ2xpcHBlclJlc291cmNlVHlwZTsKKworUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIoU1ZHQ2xpcFBhdGhFbGVtZW50KiBub2RlKQor
ICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKKyAgICAsIG1faW52YWxpZGF0
aW9uQmxvY2tlZChmYWxzZSkKK3sKK30KKworUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjp+UmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKCkKK3sKKyAgICBpZiAobV9jbGlwcGVyLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlQWxsVmFsdWVzKG1fY2xpcHBlcik7CisgICAg
bV9jbGlwcGVyLmNsZWFyKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpy
ZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbikKK3sKKyAg
ICBpZiAobV9pbnZhbGlkYXRpb25CbG9ja2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Ns
aXBCb3VuZGFyaWVzID0gRmxvYXRSZWN0KCk7CisgICAgaWYgKCFtX2NsaXBwZXIuaXNFbXB0eSgp
KSB7CisgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2NsaXBwZXIpOworICAgICAgICBtX2NsaXBw
ZXIuY2xlYXIoKTsKKyAgICB9CisKKyAgICBtYXJrQWxsQ2xpZW50c0ZvckludmFsaWRhdGlvbiht
YXJrRm9ySW52YWxpZGF0aW9uID8gTGF5b3V0QW5kQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBh
cmVudE9ubHlJbnZhbGlkYXRpb24pOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
cjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCogY2xpZW50LCBib29sIG1hcmtG
b3JJbnZhbGlkYXRpb24pCit7CisgICAgQVNTRVJUKGNsaWVudCk7CisgICAgaWYgKG1faW52YWxp
ZGF0aW9uQmxvY2tlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2xpcHBlci5jb250
YWlucyhjbGllbnQpKQorICAgICAgICBkZWxldGUgbV9jbGlwcGVyLnRha2UoY2xpZW50KTsKKwor
ICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9u
ID8gQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOworfQor
Citib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNp
Z25lZCBzaG9ydCByZXNvdXJjZU1vZGUpCit7CisgICAgQVNTRVJUKG9iamVjdCk7CisgICAgQVNT
RVJUKGNvbnRleHQpOworI2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQocmVzb3VyY2VNb2RlID09
IEFwcGx5VG9EZWZhdWx0TW9kZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXNvdXJjZU1v
ZGUpOworI2VuZGlmCisKKyAgICByZXR1cm4gYXBwbHlDbGlwcGluZ1RvQ29udGV4dChvYmplY3Qs
IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKSwgb2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpLCBjb250ZXh0KTsKK30KKworYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXI6OnBhdGhPbmx5Q2xpcHBpbmcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIG9iamVjdEJvdW5kaW5nQm94KQoreworICAgIC8vIElmIHRoZSBjdXJyZW50IGNsaXAt
cGF0aCBnZXRzIGNsaXBwZWQgaXRzZWxmLCB3ZSBoYXZlIHRvIGZhbGxiYWNrIHRvIG1hc2tpbmcu
CisgICAgaWYgKCFzdHlsZSgpLT5zdmdTdHlsZSgpLT5jbGlwcGVyUmVzb3VyY2UoKS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXaW5kUnVsZSBjbGlwUnVsZSA9IFJVTEVf
Tk9OWkVSTzsKKyAgICBQYXRoIGNsaXBQYXRoID0gUGF0aCgpOworCisgICAgLy8gSWYgY2xpcC1w
YXRoIG9ubHkgY29udGFpbnMgb25lIHZpc2libGUgc2hhcGUgb3IgcGF0aCwgd2UgY2FuIHVzZSBw
YXRoLWJhc2VkIGNsaXBwaW5nLiBJbnZpc2libGUKKyAgICAvLyBzaGFwZXMgZG9uJ3QgYWZmZWN0
IHRoZSBjbGlwcGluZyBhbmQgY2FuIGJlIGlnbm9yZWQuIElmIGNsaXAtcGF0aCBjb250YWlucyBt
b3JlIHRoYW4gb25lCisgICAgLy8gdmlzaWJsZSBzaGFwZSwgdGhlIGFkZGl0aXZlIGNsaXBwaW5n
IG1heSBub3Qgd29yaywgY2F1c2VkIGJ5IHRoZSBjbGlwUnVsZS4gRXZlbk9kZAorICAgIC8vIGFz
IHdlbGwgYXMgTm9uWmVybyBjYW4gY2F1c2Ugc2VsZi1jbGlwcGluZyBvZiB0aGUgZWxlbWVudHMu
CisgICAgLy8gU2VlIGFsc28gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL3BhaW50aW5nLmh0bWwj
RmlsbFJ1bGVQcm9wZXJ0eQorICAgIGZvciAoTm9kZSogY2hpbGROb2RlID0gbm9kZSgpLT5maXJz
dENoaWxkKCk7IGNoaWxkTm9kZTsgY2hpbGROb2RlID0gY2hpbGROb2RlLT5uZXh0U2libGluZygp
KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRlcmVy
KCk7CisgICAgICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgLy8gT25seSBzaGFwZXMgb3IgcGF0aHMgYXJlIHN1cHBvcnRlZCBmb3IgZGlyZWN0IGNsaXBw
aW5nLiBXZSBuZWVkIHRvIGZhbGxiYWNrIHRvIG1hc2tpbmcgZm9yIHRleHRzLgorICAgICAgICBp
ZiAocmVuZGVyZXItPmlzU1ZHVGV4dCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0Vs
ZW1lbnQqPihjaGlsZE5vZGUpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogc3R5bGVk
ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihjaGlsZE5vZGUp
OworICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICAg
ICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+ZGlzcGxheSgpID09IE5PTkUgfHwgc3R5bGUtPnZpc2li
aWxpdHkoKSAhPSBWSVNJQkxFKQorICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb25z
dCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICAgICAg
Ly8gQ3VycmVudCBzaGFwZSBpbiBjbGlwLXBhdGggZ2V0cyBjbGlwcGVkIHRvby4gRmFsbGJhY2sg
dG8gbWFza2luZy4KKyAgICAgICAgaWYgKCFzdmdTdHlsZS0+Y2xpcHBlclJlc291cmNlKCkuaXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBGYWxsYmFjayB0
byBtYXNraW5nLCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGNsaXBwaW5nIHBhdGguCisgICAg
ICAgIGlmIChjbGlwUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHN0eWxlZC0+dG9DbGlw
UGF0aChjbGlwUGF0aCk7CisgICAgICAgICAgICBjbGlwUnVsZSA9IHN2Z1N0eWxlLT5jbGlwUnVs
ZSgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgLy8gT25seSBvbmUgdmlzaWJsZSBzaGFwZS9wYXRoIHdhcyBmb3VuZC4gRGlyZWN0bHkgY29u
dGludWUgY2xpcHBpbmcgYW5kIHRyYW5zZm9ybSB0aGUgY29udGVudCB0byB1c2Vyc3BhY2UgaWYg
bmVjZXNzYXJ5LgorICAgIGlmIChzdGF0aWNfY2FzdDxTVkdDbGlwUGF0aEVsZW1lbnQqPihub2Rl
KCkpLT5jbGlwUGF0aFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVD
VEJPVU5ESU5HQk9YKSB7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CisgICAg
ICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgpLCBvYmplY3RCb3Vu
ZGluZ0JveC55KCkpOworICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKG9iamVjdEJv
dW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpKTsKKyAgICAgICAg
Y2xpcFBhdGgudHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgfQorICAgIC8vIFRoZSBTVkcgc3Bl
Y2lmaWNhdGlvbiB3YW50cyB1cyB0byBjbGlwIGV2ZXJ5dGhpbmcsIGlmIGNsaXAtcGF0aCBkb2Vz
bid0IGhhdmUgYSBjaGlsZC4KKyAgICBpZiAoY2xpcFBhdGguaXNFbXB0eSgpKQorICAgICAgICBj
bGlwUGF0aC5hZGRSZWN0KEZsb2F0UmVjdCgpKTsKKyAgICBjb250ZXh0LT5jbGlwUGF0aChjbGlw
UGF0aCwgY2xpcFJ1bGUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlclNWR1Jl
c291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJPYmplY3QqIG9iamVj
dCwgY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVw
YWludFJlY3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoIW1fY2xpcHBl
ci5jb250YWlucyhvYmplY3QpKQorICAgICAgICBtX2NsaXBwZXIuc2V0KG9iamVjdCwgbmV3IENs
aXBwZXJEYXRhKTsKKworICAgIGJvb2wgc2hvdWxkQ3JlYXRlQ2xpcERhdGEgPSBmYWxzZTsKKyAg
ICBDbGlwcGVyRGF0YSogY2xpcHBlckRhdGEgPSBtX2NsaXBwZXIuZ2V0KG9iamVjdCk7CisgICAg
aWYgKCFjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZSkgeworICAgICAgICBpZiAocGF0aE9ubHlD
bGlwcGluZyhjb250ZXh0LCBvYmplY3RCb3VuZGluZ0JveCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgc2hvdWxkQ3JlYXRlQ2xpcERhdGEgPSB0cnVlOworICAgIH0KKworICAg
IEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKKyAgICBTVkdJbWFnZUJ1ZmZlclRv
b2xzOjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3Rl
bShvYmplY3QsIGFic29sdXRlVHJhbnNmb3JtKTsKKworICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRh
cmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHJlcGFpbnRSZWN0KTsKKyAgICBG
bG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6
OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcihvYmplY3QsIGFic29sdXRlVGFy
Z2V0UmVjdCk7CisKKyAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcERhdGEgJiYgIWNsYW1wZWRBYnNv
bHV0ZVRhcmdldFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghU1ZHSW1hZ2VCdWZmZXJU
b29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVUYXJnZXRSZWN0LCBjbGFtcGVkQWJzb2x1
dGVUYXJnZXRSZWN0LCBjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZSwgQ29sb3JTcGFjZURldmlj
ZVJHQikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0KiBtYXNrQ29udGV4dCA9IGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlLT5jb250ZXh0KCk7
CisgICAgICAgIEFTU0VSVChtYXNrQ29udGV4dCk7CisKKyAgICAgICAgLy8gVGhlIHNhdmUvcmVz
dG9yZSBwYWlyIGlzIG5lZWRlZCBmb3IgY2xpcFRvSW1hZ2VCdWZmZXIgLSBpdCBkb2Vzbid0IHdv
cmsgd2l0aG91dCBpdCBvbiBub24tQ2cgcGxhdGZvcm1zLgorICAgICAgICBtYXNrQ29udGV4dC0+
c2F2ZSgpOworICAgICAgICBtYXNrQ29udGV4dC0+dHJhbnNsYXRlKC1jbGFtcGVkQWJzb2x1dGVU
YXJnZXRSZWN0LngoKSwgLWNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QueSgpKTsKKyAgICAgICAg
bWFza0NvbnRleHQtPmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9ybSk7CisKKyAgICAgICAgLy8g
Y2xpcFBhdGggY2FuIGFsc28gYmUgY2xpcHBlZCBieSBhbm90aGVyIGNsaXBQYXRoLgorICAgICAg
ICBpZiAoU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVk
UmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHRoaXMpKSB7CisgICAgICAgICAgICBpZiAoUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gcmVzb3VyY2VzLT5jbGlwcGVyKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIWNsaXBwZXItPmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQodGhpcywg
b2JqZWN0Qm91bmRpbmdCb3gsIHJlcGFpbnRSZWN0LCBtYXNrQ29udGV4dCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbWFza0NvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGRyYXdDb250ZW50SW50b01hc2tJbWFnZShjbGlwcGVyRGF0YSwgb2JqZWN0
Qm91bmRpbmdCb3gpOworICAgICAgICBtYXNrQ29udGV4dC0+cmVzdG9yZSgpOworICAgIH0KKwor
ICAgIGlmICghY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnRleHQs
IGFic29sdXRlVHJhbnNmb3JtLCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBjbGlwcGVyRGF0
YS0+Y2xpcE1hc2tJbWFnZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UoQ2xpcHBlckRhdGEqIGNs
aXBwZXJEYXRhLCBjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94KQoreworICAgIEFT
U0VSVChjbGlwcGVyRGF0YSk7CisgICAgQVNTRVJUKGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdl
KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0NvbnRleHQgPSBjbGlwcGVyRGF0YS0+Y2xp
cE1hc2tJbWFnZS0+Y29udGV4dCgpOworICAgIEFTU0VSVChtYXNrQ29udGV4dCk7CisKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKKyAgICBTVkdDbGlwUGF0
aEVsZW1lbnQqIGNsaXBQYXRoID0gc3RhdGljX2Nhc3Q8U1ZHQ2xpcFBhdGhFbGVtZW50Kj4obm9k
ZSgpKTsKKyAgICBpZiAoY2xpcFBhdGgtPmNsaXBQYXRoVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6
OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKKyAgICAgICAgbWFza0NvbnRlbnRU
cmFuc2Zvcm1hdGlvbi50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgpLCBvYmplY3RCb3Vu
ZGluZ0JveC55KCkpOworICAgICAgICBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uLnNjYWxlTm9u
VW5pZm9ybShvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpLCBvYmplY3RCb3VuZGluZ0JveC5oZWln
aHQoKSk7CisgICAgICAgIG1hc2tDb250ZXh0LT5jb25jYXRDVE0obWFza0NvbnRlbnRUcmFuc2Zv
cm1hdGlvbik7CisgICAgfQorCisgICAgLy8gRHJhdyBhbGwgY2xpcFBhdGggY2hpbGRyZW4gaW50
byBhIGdsb2JhbCBtYXNrLgorICAgIGZvciAoTm9kZSogY2hpbGROb2RlID0gbm9kZSgpLT5maXJz
dENoaWxkKCk7IGNoaWxkTm9kZTsgY2hpbGROb2RlID0gY2hpbGROb2RlLT5uZXh0U2libGluZygp
KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZE5vZGUtPnJlbmRlcmVy
KCk7CisgICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwgIXJlbmRlcmVyKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVy
LT5zdHlsZSgpOworICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gTk9O
RSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBXaW5kUnVsZSBuZXdDbGlwUnVsZSA9IHN0eWxlLT5zdmdTdHlsZSgpLT5j
bGlwUnVsZSgpOworICAgICAgICBib29sIGlzVXNlRWxlbWVudCA9IHJlbmRlcmVyLT5pc1NWR1No
YWRvd1RyZWVSb290Q29udGFpbmVyKCk7CisgICAgICAgIGlmIChpc1VzZUVsZW1lbnQpIHsKKyAg
ICAgICAgICAgIFNWR1VzZUVsZW1lbnQqIHVzZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdVc2VF
bGVtZW50Kj4oY2hpbGROb2RlKTsKKyAgICAgICAgICAgIHJlbmRlcmVyID0gdXNlRWxlbWVudC0+
cmVuZGVyZXJDbGlwQ2hpbGQoKTsKKyAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoIXVzZUVsZW1lbnQtPmhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6Y2xpcF9ydWxlQXR0cikpCisgICAgICAgICAgICAgICAgbmV3Q2xpcFJ1
bGUgPSByZW5kZXJlci0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2xpcFJ1bGUoKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIE9ubHkgc2hhcGVzLCBwYXRocyBhbmQgdGV4dHMgYXJlIGFsbG93ZWQg
Zm9yIGNsaXBwaW5nLgorICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgoKSAmJiAhcmVu
ZGVyZXItPmlzU1ZHVGV4dCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8g
U2F2ZSB0aGUgb2xkIFJlbmRlclN0eWxlIG9mIHRoZSBjdXJyZW50IG9iamVjdCBmb3IgcmVzdG9y
aW5nIGFmdGVyIGRyYXdpbmcKKyAgICAgICAgLy8gaXQgdG8gdGhlIE1hc2tJbWFnZS4gVGhlIG5l
dyBpbnRlcm1lZGlhdGUgUmVuZGVyU3R5bGUgbmVlZHMgdG8gaW5oZXJpdCBmcm9tCisgICAgICAg
IC8vIHRoZSBvbGQgb25lLgorICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9sZFJlbmRlclN0
eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3
UmVuZGVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUob2xkUmVuZGVyU3R5bGUuZ2V0KCkpOwor
ICAgICAgICBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBuZXdSZW5kZXJTdHlsZS5nZXQoKS0+
YWNjZXNzU1ZHU3R5bGUoKTsKKyAgICAgICAgc3ZnU3R5bGUtPnNldEZpbGxQYWludChTVkdQYWlu
dDo6ZGVmYXVsdEZpbGwoKSk7CisgICAgICAgIHN2Z1N0eWxlLT5zZXRTdHJva2VQYWludChTVkdQ
YWludDo6ZGVmYXVsdFN0cm9rZSgpKTsKKyAgICAgICAgc3ZnU3R5bGUtPnNldEZpbGxSdWxlKG5l
d0NsaXBSdWxlKTsKKyAgICAgICAgbmV3UmVuZGVyU3R5bGUuZ2V0KCktPnNldE9wYWNpdHkoMS4w
Zik7CisgICAgICAgIHN2Z1N0eWxlLT5zZXRGaWxsT3BhY2l0eSgxLjBmKTsKKyAgICAgICAgc3Zn
U3R5bGUtPnNldFN0cm9rZU9wYWNpdHkoMS4wZik7CisgICAgICAgIHN2Z1N0eWxlLT5zZXRGaWx0
ZXJSZXNvdXJjZShTdHJpbmcoKSk7CisgICAgICAgIHN2Z1N0eWxlLT5zZXRNYXNrZXJSZXNvdXJj
ZShTdHJpbmcoKSk7CisKKyAgICAgICAgLy8gVGhlIHNldFN0eWxlKCkgY2FsbCByZXN1bHRzIGlu
IGEgc3R5bGVEaWRDaGFuZ2UoKSBjYWxsLCB3aGljaCBpbiB0dXJuIGludmFsaWRhdGlvbnMgdGhl
IHJlc291cmNlcy4KKyAgICAgICAgLy8gQXMgd2UncmUgbXV0YXRpbmcgdGhlIHJlc291cmNlIG9u
IHB1cnBvc2UsIGJsb2NrIHVwZGF0ZXMgdW50aWwgd2UndmUgcmVzZXR0ZWQgdGhlIHN0eWxlIGFn
YWluLgorICAgICAgICBtX2ludmFsaWRhdGlvbkJsb2NrZWQgPSB0cnVlOworICAgICAgICByZW5k
ZXJlci0+c2V0U3R5bGUobmV3UmVuZGVyU3R5bGUucmVsZWFzZSgpKTsKKworICAgICAgICAvLyBJ
biB0aGUgY2FzZSBvZiBhIDx1c2U+IGVsZW1lbnQsIHdlIG9idGFpbmVkIGl0cyByZW5kZXJlcmUg
YWJvdmUsIHRvIHJldHJpZXZlIGl0cyBjbGlwUnVsZS4KKyAgICAgICAgLy8gV2UgaGF2ZSB0byBw
YXNzIHRoZSA8dXNlPiByZW5kZXJlciBpdHNlbGYgdG8gcmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZm
ZXIoKSB0byBhcHBseSBpdCdzIHgveS90cmFuc2Zvcm0vZXRjLiB2YWx1ZXMgd2hlbiByZW5kZXJp
bmcuCisgICAgICAgIC8vIFNvIGlmIGlzVXNlRWxlbWVudCBpcyB0cnVlLCByZWZldGNoIHRoZSBj
aGlsZE5vZGUtPnJlbmRlcmVyKCksIGFzIHJlbmRlcmVyIGdvdCBvdmVycmlkZW4gYWJvdmUuCisg
ICAgICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKGNs
aXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlLmdldCgpLCBpc1VzZUVsZW1lbnQgPyBjaGlsZE5vZGUt
PnJlbmRlcmVyKCkgOiByZW5kZXJlciwgbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbik7CisKKyAg
ICAgICAgcmVuZGVyZXItPnNldFN0eWxlKG9sZFJlbmRlclN0eWxlLnJlbGVhc2UoKSk7CisgICAg
ICAgIG1faW52YWxpZGF0aW9uQmxvY2tlZCA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlQ2xpcENv
bnRlbnRSZXBhaW50UmVjdCgpCit7CisgICAgLy8gVGhpcyBpcyBhIHJvdWdoIGhldXJpc3RpYyB0
byBhcHByYWlzZSB0aGUgY2xpcCBzaXplIGFuZCBkb2Vzbid0IGNvbnNpZGVyIGNsaXAgb24gY2xp
cC4KKyAgICBmb3IgKE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUoKS0+Zmlyc3RDaGlsZCgpOyBjaGls
ZE5vZGU7IGNoaWxkTm9kZSA9IGNoaWxkTm9kZS0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2RlLT5yZW5kZXJlcigpOworICAgICAgICBp
ZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0VsZW1lbnQq
PihjaGlsZE5vZGUpLT5pc1N0eWxlZCgpIHx8ICFyZW5kZXJlcikKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgoKSAmJiAhcmVuZGVyZXItPmlz
U1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRl
cmVyLT5zdHlsZSgpOworICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0g
Tk9ORSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIG1fY2xpcEJvdW5kYXJpZXMudW5pdGUocmVuZGVyZXItPmxvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKSk7CisgICAgfQorfQorCitib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6
aGl0VGVzdENsaXBDb250ZW50KGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIGNv
bnN0IEZsb2F0UG9pbnQmIG5vZGVBdFBvaW50KQoreworICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBu
b2RlQXRQb2ludDsKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0Fy
ZWEodGhpcywgcG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc3RhdGlj
X2Nhc3Q8U1ZHQ2xpcFBhdGhFbGVtZW50Kj4obm9kZSgpKS0+Y2xpcFBhdGhVbml0cygpID09IFNW
R1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgeworICAgICAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG9i
amVjdEJvdW5kaW5nQm94LngoKSwgb2JqZWN0Qm91bmRpbmdCb3gueSgpKTsKKyAgICAgICAgdHJh
bnNmb3JtLnNjYWxlTm9uVW5pZm9ybShvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpLCBvYmplY3RC
b3VuZGluZ0JveC5oZWlnaHQoKSk7CisgICAgICAgIHBvaW50ID0gdHJhbnNmb3JtLmludmVyc2Uo
KS5tYXBQb2ludChwb2ludCk7CisgICAgfQorCisgICAgZm9yIChOb2RlKiBjaGlsZE5vZGUgPSBu
b2RlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGROb2RlOyBjaGlsZE5vZGUgPSBjaGlsZE5vZGUtPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9k
ZS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8
ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVu
ZGVyZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNT
VkdQYXRoKCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hh
ZG93VHJlZVJvb3RDb250YWluZXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBJ
bnRQb2ludCBoaXRQb2ludDsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQoaGl0UG9pbnQp
OworICAgICAgICBpZiAocmVuZGVyZXItPm5vZGVBdEZsb2F0UG9pbnQoSGl0VGVzdFJlcXVlc3Qo
SGl0VGVzdFJlcXVlc3Q6OlNWR0NsaXBDb250ZW50KSwgcmVzdWx0LCBwb2ludCwgSGl0VGVzdEZv
cmVncm91bmQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpyZXNvdXJj
ZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIC8vIFJlc291cmNlIHdh
cyBub3QgbGF5b3V0ZWQgeWV0LiBHaXZlIGJhY2sgdGhlIGJvdW5kaW5nQm94IG9mIHRoZSBvYmpl
Y3QuCisgICAgaWYgKHNlbGZOZWVkc0xheW91dCgpKQorICAgICAgICByZXR1cm4gb2JqZWN0LT5v
YmplY3RCb3VuZGluZ0JveCgpOworICAgIAorICAgIGlmIChtX2NsaXBCb3VuZGFyaWVzLmlzRW1w
dHkoKSkKKyAgICAgICAgY2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVjdCgpOworCisgICAg
aWYgKHN0YXRpY19jYXN0PFNWR0NsaXBQYXRoRWxlbWVudCo+KG5vZGUoKSktPmNsaXBQYXRoVW5p
dHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsK
KyAgICAgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3Vu
ZGluZ0JveCgpOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgICAgICB0
cmFuc2Zvcm0udHJhbnNsYXRlKG9iamVjdEJvdW5kaW5nQm94LngoKSwgb2JqZWN0Qm91bmRpbmdC
b3gueSgpKTsKKyAgICAgICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShvYmplY3RCb3VuZGlu
Z0JveC53aWR0aCgpLCBvYmplY3RCb3VuZGluZ0JveC5oZWlnaHQoKSk7CisgICAgICAgIHJldHVy
biB0cmFuc2Zvcm0ubWFwUmVjdChtX2NsaXBCb3VuZGFyaWVzKTsKKyAgICB9CisKKyAgICByZXR1
cm4gbV9jbGlwQm91bmRhcmllczsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmgJKHJldmlzaW9uIDc1MjcyKQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuaDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcl9oCisj
ZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcl9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlBhdGgu
aCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlNW
R0NsaXBQYXRoRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgorCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RydWN0IENsaXBwZXJEYXRhIDogRmFzdEFsbG9jQmFzZSB7CisgICAgT3du
UHRyPEltYWdlQnVmZmVyPiBjbGlwTWFza0ltYWdlOworfTsKKworY2xhc3MgUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyIDogcHVibGljIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsKK3B1Ymxp
YzoKKyAgICBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIoU1ZHQ2xpcFBhdGhFbGVtZW50Kik7Cisg
ICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKCk7CisKKyAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyIjsgfQorCisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUo
Ym9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24g
PSB0cnVlKTsKKworICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNl
TW9kZSk7CisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJP
YmplY3QqKTsKKworICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIENsaXBwZXJSZXNvdXJjZVR5cGU7IH0KKyAgICAKKyAgICBib29s
IGhpdFRlc3RDbGlwQ29udGVudChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFBvaW50Jik7
CisKKyAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIGNsaXBQYXRoVW5pdHMoKSBjb25zdCB7
IHJldHVybiB0b1VuaXRUeXBlKHN0YXRpY19jYXN0PFNWR0NsaXBQYXRoRWxlbWVudCo+KG5vZGUo
KSktPmNsaXBQYXRoVW5pdHMoKSk7IH0KKworICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVR5
cGUgc19yZXNvdXJjZVR5cGU7Citwcml2YXRlOgorICAgIC8vIGNsaXBQYXRoIGNhbiBiZSBjbGlw
cGVkIHRvbywgYnV0IGRvbid0IGhhdmUgYSBib3VuZGluZ0JveCBvciByZXBhaW50UmVjdC4gU28g
d2UgY2FuJ3QgY2FsbAorICAgIC8vIGFwcGx5UmVzb3VyY2UgZGlyZWN0bHkgYW5kIHVzZSB0aGUg
cmVjdHMgZnJvbSB0aGUgb2JqZWN0LCBzaW5jZSB0aGV5IGFyZSBlbXB0eSBmb3IgUmVuZGVyU1ZH
UmVzb3VyY2VzCisgICAgYm9vbCBhcHBseUNsaXBwaW5nVG9Db250ZXh0KFJlbmRlck9iamVjdCos
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dCopOwor
ICAgIGJvb2wgcGF0aE9ubHlDbGlwcGluZyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICBib29sIGRyYXdDb250ZW50SW50b01hc2tJbWFnZShDbGlwcGVyRGF0YSosIGNv
bnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gpOworICAgIHZvaWQgY2FsY3VsYXRlQ2xp
cENvbnRlbnRSZXBhaW50UmVjdCgpOworCisgICAgYm9vbCBtX2ludmFsaWRhdGlvbkJsb2NrZWQ7
CisgICAgRmxvYXRSZWN0IG1fY2xpcEJvdW5kYXJpZXM7CisgICAgSGFzaE1hcDxSZW5kZXJPYmpl
Y3QqLCBDbGlwcGVyRGF0YSo+IG1fY2xpcHBlcjsKK307CisKK30KKworI2VuZGlmCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyLmNwcAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgi
CisKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIgorI2luY2x1
ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIGlubGluZSBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIHN2Z0V4dGVuc2lvbnNG
cm9tTm9kZShOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICBBU1NFUlQobm9k
ZS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIG5vZGUtPmRvY3VtZW50KCktPmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKTsKK30KKworUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OlJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyKFNWR1N0eWxlZEVsZW1lbnQqIG5vZGUpCisgICAgOiBSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIobm9kZSkKKyAgICAsIG1faWQobm9kZS0+aGFzSUQoKSA/IG5vZGUtPmdl
dElkQXR0cmlidXRlKCkgOiBudWxsQXRvbSkKKyAgICAsIG1fcmVnaXN0ZXJlZChmYWxzZSkKK3sK
K30KKworUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6On5SZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lcigpCit7CisgICAgaWYgKG1fcmVnaXN0ZXJlZCkKKyAgICAgICAgc3ZnRXh0ZW5zaW9uc0Zy
b21Ob2RlKG5vZGUoKSktPnJlbW92ZVJlc291cmNlKG1faWQpOworfQorCit2b2lkIFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyOjpsYXlvdXQoKQoreworICAgIC8vIEludmFsaWRhdGUgYWxsIHJl
c291cmNlcyBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCisgICAgaWYgKG1fZXZlckhhZExheW91dCAm
JiBzZWxmTmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgp
OworCisgICAgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpsYXlvdXQoKTsKK30KKwordm9pZCBS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6ZGVzdHJveSgpCit7CisgICAgU1ZHUmVzb3VyY2Vz
Q2FjaGU6OnJlc291cmNlRGVzdHJveWVkKHRoaXMpOworICAgIFJlbmRlclNWR0hpZGRlbkNvbnRh
aW5lcjo6ZGVzdHJveSgpOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKQoreworICAgIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2Uo
ZGlmZiwgb2xkU3R5bGUpOworCisgICAgaWYgKCFtX3JlZ2lzdGVyZWQpIHsKKyAgICAgICAgbV9y
ZWdpc3RlcmVkID0gdHJ1ZTsKKyAgICAgICAgcmVnaXN0ZXJSZXNvdXJjZSgpOworICAgIH0KK30K
Kwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6aWRDaGFuZ2VkKCkKK3sKKyAgICAv
LyBJbnZhbGlkYXRlIGFsbCBvdXIgY3VycmVudCBjbGllbnRzLgorICAgIHJlbW92ZUFsbENsaWVu
dHNGcm9tQ2FjaGUoKTsKKworICAgIC8vIFJlbW92ZSBvbGQgaWQsIHRoYXQgaXMgZ3VhcmFudGVl
ZCB0byBiZSBwcmVzZW50IGluIGNhY2hlLgorICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0
ZW5zaW9ucyA9IHN2Z0V4dGVuc2lvbnNGcm9tTm9kZShub2RlKCkpOworICAgIGV4dGVuc2lvbnMt
PnJlbW92ZVJlc291cmNlKG1faWQpOworICAgIG1faWQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bm9kZSgpKS0+Z2V0SWRBdHRyaWJ1dGUoKTsKKworICAgIHJlZ2lzdGVyUmVzb3VyY2UoKTsKK30K
Kwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6bWFya0FsbENsaWVudHNGb3JJbnZh
bGlkYXRpb24oSW52YWxpZGF0aW9uTW9kZSBtb2RlKQoreworICAgIGlmIChtX2NsaWVudHMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIG5lZWRzTGF5b3V0ID0gbW9kZSA9
PSBMYXlvdXRBbmRCb3VuZGFyaWVzSW52YWxpZGF0aW9uOworICAgIGJvb2wgbWFya0ZvckludmFs
aWRhdGlvbiA9IG1vZGUgIT0gUGFyZW50T25seUludmFsaWRhdGlvbjsKKworICAgIEhhc2hTZXQ8
UmVuZGVyT2JqZWN0Kj46Oml0ZXJhdG9yIGVuZCA9IG1fY2xpZW50cy5lbmQoKTsKKyAgICBmb3Ig
KEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJPYmplY3QqIGNsaWVudCA9ICppdDsK
KyAgICAgICAgaWYgKGNsaWVudC0+aXNTVkdSZXNvdXJjZUNvbnRhaW5lcigpKSB7CisgICAgICAg
ICAgICBjbGllbnQtPnRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoKS0+cmVtb3ZlQWxsQ2xp
ZW50c0Zyb21DYWNoZShtYXJrRm9ySW52YWxpZGF0aW9uKTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hcmtGb3JJbnZhbGlkYXRpb24pCisgICAgICAg
ICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGNsaWVudCwgbW9kZSk7CisKKyAgICAgICAg
aWYgKG5lZWRzTGF5b3V0KQorICAgICAgICAgICAgY2xpZW50LT5zZXROZWVkc0xheW91dCh0cnVl
KTsKKworICAgICAgICAvLyBJbnZhbGlkYXRlIHJlc291cmNlcyBpbiBhbmNlc3RvciBjaGFpbiwg
aWYgbmVlZGVkLgorICAgICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBjbGllbnQtPnBhcmVu
dCgpOworICAgICAgICB3aGlsZSAoY3VycmVudCkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnQt
PmlzU1ZHUmVzb3VyY2VDb250YWluZXIoKSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnQtPnRv
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoKS0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSht
YXJrRm9ySW52YWxpZGF0aW9uKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudCgpOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjptYXJrQ2xpZW50
Rm9ySW52YWxpZGF0aW9uKFJlbmRlck9iamVjdCogY2xpZW50LCBJbnZhbGlkYXRpb25Nb2RlIG1v
ZGUpCit7CisgICAgQVNTRVJUKGNsaWVudCk7CisgICAgQVNTRVJUKCFtX2NsaWVudHMuaXNFbXB0
eSgpKTsKKworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTGF5b3V0QW5kQm91bmRhcmll
c0ludmFsaWRhdGlvbjoKKyAgICBjYXNlIEJvdW5kYXJpZXNJbnZhbGlkYXRpb246CisgICAgICAg
IGNsaWVudC0+c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUmVwYWludEludmFsaWRhdGlvbjoKKyAgICAgICAgaWYgKGNsaWVudC0+dmlldygpKQor
ICAgICAgICAgICAgY2xpZW50LT5yZXBhaW50KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UGFyZW50T25seUludmFsaWRhdGlvbjoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lk
IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjphZGRDbGllbnQoUmVuZGVyT2JqZWN0KiBjbGll
bnQpCit7CisgICAgQVNTRVJUKGNsaWVudCk7CisgICAgbV9jbGllbnRzLmFkZChjbGllbnQpOwor
fQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZW1vdmVDbGllbnQoUmVuZGVy
T2JqZWN0KiBjbGllbnQpCit7CisgICAgQVNTRVJUKGNsaWVudCk7CisgICAgbV9jbGllbnRzLnJl
bW92ZShjbGllbnQpOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdp
c3RlclJlc291cmNlKCkKK3sKKyAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lvbnMg
PSBzdmdFeHRlbnNpb25zRnJvbU5vZGUobm9kZSgpKTsKKyAgICBpZiAoIWV4dGVuc2lvbnMtPmlz
UGVuZGluZ1Jlc291cmNlKG1faWQpKSB7CisgICAgICAgIGV4dGVuc2lvbnMtPmFkZFJlc291cmNl
KG1faWQsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgT3duUHRyPFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6U1ZHUGVuZGluZ0VsZW1lbnRzPiBjbGllbnRzKGV4dGVuc2lvbnMt
PnJlbW92ZVBlbmRpbmdSZXNvdXJjZShtX2lkKSk7CisKKyAgICAvLyBDYWNoZSB1cyB3aXRoIHRo
ZSBuZXcgaWQuCisgICAgZXh0ZW5zaW9ucy0+YWRkUmVzb3VyY2UobV9pZCwgdGhpcyk7CisKKyAg
ICAvLyBVcGRhdGUgY2FjaGVkIHJlc291cmNlcyBvZiBwZW5kaW5nIGNsaWVudHMuCisgICAgY29u
c3QgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpTVkdQZW5kaW5nRWxlbWVudHM6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGNsaWVudHMtPmVuZCgpOworICAgIGZvciAoU1ZHRG9jdW1lbnRFeHRlbnNpb25z
OjpTVkdQZW5kaW5nRWxlbWVudHM6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2xpZW50cy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSAo
Kml0KS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50VXBkYXRlZEZyb21FbGVt
ZW50KHJlbmRlcmVyLCByZW5kZXJlci0+c3R5bGUoKSk7CisgICAgICAgIHJlbmRlcmVyLT5zZXRO
ZWVkc0xheW91dCh0cnVlKTsKKyAgICB9Cit9CisKKy8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGJl
bG9uZyBoZXJlLgorQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjp0
cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcmVzb3VyY2VUcmFuc2Zvcm0pCit7CisgICAgaWYgKCFvYmplY3QtPmlz
U1ZHUGF0aCgpKQorICAgICAgICByZXR1cm4gcmVzb3VyY2VUcmFuc2Zvcm07CisKKyAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4ob2JqZWN0LT5ub2RlKCkpOworICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSByZXNvdXJjZVRyYW5zZm9ybTsKKyAgICB0cmFuc2Zvcm0ubXVsdGlw
bHkoZWxlbWVudC0+Z2V0U2NyZWVuQ1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0
ZSkpOworICAgIHJldHVybiB0cmFuc2Zvcm07Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaAko
cmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyLmg6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcl9oCisjZGVm
aW5lIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5j
bHVkZSAiUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBSZW5kZXJTVkdSZXNvdXJjZSB7CitwdWJs
aWM6CisgICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoU1ZHU3R5bGVkRWxlbWVudCopOwor
ICAgIHZpcnR1YWwgflJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCk7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUpOworCisgICAgdmlydHVhbCBib29sIGlzU1ZHUmVzb3VyY2VDb250YWluZXIoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lciogdG9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcigpIHsgcmV0dXJuIHRoaXM7IH0KKwor
ICAgIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtT25Ob25TY2FsaW5nU3Ryb2tlKFJl
bmRlck9iamVjdCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcmVzb3VyY2VUcmFuc2Zvcm0pOwor
CisgICAgdm9pZCBpZENoYW5nZWQoKTsKKworcHJvdGVjdGVkOgorICAgIGVudW0gSW52YWxpZGF0
aW9uTW9kZSB7CisgICAgICAgIExheW91dEFuZEJvdW5kYXJpZXNJbnZhbGlkYXRpb24sCisgICAg
ICAgIEJvdW5kYXJpZXNJbnZhbGlkYXRpb24sCisgICAgICAgIFJlcGFpbnRJbnZhbGlkYXRpb24s
CisgICAgICAgIFBhcmVudE9ubHlJbnZhbGlkYXRpb24KKyAgICB9OworCisgICAgLy8gVXNlZCBm
cm9tIHRoZSBpbnZhbGlkYXRlQ2xpZW50L2ludmFsaWRhdGVDbGllbnRzIG1ldGhvZHMgZnJvbSBj
bGFzc2VzLCBpbmhlcml0aW5nIGZyb20gdXMuCisgICAgdm9pZCBtYXJrQWxsQ2xpZW50c0Zvcklu
dmFsaWRhdGlvbihJbnZhbGlkYXRpb25Nb2RlKTsKKyAgICB2b2lkIG1hcmtDbGllbnRGb3JJbnZh
bGlkYXRpb24oUmVuZGVyT2JqZWN0KiwgSW52YWxpZGF0aW9uTW9kZSk7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIFNWR1Jlc291cmNlc0NhY2hlOworICAgIHZvaWQgYWRkQ2xpZW50KFJl
bmRlck9iamVjdCopOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFJlbmRlck9iamVjdCopOworCitw
cml2YXRlOgorICAgIHZvaWQgcmVnaXN0ZXJSZXNvdXJjZSgpOworCisgICAgQXRvbWljU3RyaW5n
IG1faWQ7CisgICAgYm9vbCBtX3JlZ2lzdGVyZWQ7CisgICAgSGFzaFNldDxSZW5kZXJPYmplY3Qq
PiBtX2NsaWVudHM7Cit9OworCitpbmxpbmUgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGdl
dFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyQnlJZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEF0b21pY1N0cmluZyYgaWQpCit7CisgICAgaWYgKGlkLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHJlbmRlclJlc291
cmNlID0gZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVzb3VyY2VCeUlkKGlkKSkK
KyAgICAgICAgcmV0dXJuIHJlbmRlclJlc291cmNlOworCisgICAgcmV0dXJuIDA7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFJlbmRlcmVyPgorUmVuZGVyZXIqIGdldFJlbmRlclNWR1Jlc291cmNl
QnlJZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgaWQpCit7CisgICAg
aWYgKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBjb250YWluZXIgPSBnZXRSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lckJ5SWQoZG9jdW1lbnQsIGlkKSkKKyAgICAgICAgcmV0dXJuIGNvbnRh
aW5lci0+Y2FzdDxSZW5kZXJlcj4oKTsKKworICAgIHJldHVybiAwOworfQorCit9CisKKyNlbmRp
ZgorI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAJKHJldmlzaW9uIDc1MjcyKQkoZnJvbSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgor
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgor
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAi
U1ZHRmlsdGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIlNWR0ltYWdl
QnVmZmVyVG9vbHMuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1N0eWxl
ZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKK3N0YXRpYyBjb25zdCBmbG9h
dCBrTWF4RmlsdGVyU2l6ZSA9IDUwMDAuMGY7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpzX3Jlc291cmNlVHlwZSA9IEZpbHRlclJlc291cmNlVHlwZTsKKworUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyKFNWR0ZpbHRlckVsZW1l
bnQqIG5vZGUpCisgICAgOiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcihub2RlKQoreworfQor
CitSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6flJlbmRlclNWR1Jlc291cmNlRmlsdGVyKCkKK3sK
KyAgICBpZiAobV9maWx0ZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkZWxl
dGVBbGxWYWx1ZXMobV9maWx0ZXIpOworICAgIG1fZmlsdGVyLmNsZWFyKCk7Cit9CisKK3ZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9vbCBt
YXJrRm9ySW52YWxpZGF0aW9uKQoreworICAgIGlmICghbV9maWx0ZXIuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2ZpbHRlcik7CisgICAgICAgIG1fZmlsdGVyLmNsZWFy
KCk7CisgICAgfQorCisgICAgbWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24obWFya0Zvcklu
dmFsaWRhdGlvbiA/IExheW91dEFuZEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5
SW52YWxpZGF0aW9uKTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVtb3Zl
Q2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCogY2xpZW50LCBib29sIG1hcmtGb3JJbnZhbGlk
YXRpb24pCit7CisgICAgQVNTRVJUKGNsaWVudCk7CisKKyAgICBpZiAobV9maWx0ZXIuY29udGFp
bnMoY2xpZW50KSkKKyAgICAgICAgZGVsZXRlIG1fZmlsdGVyLnRha2UoY2xpZW50KTsKKworICAg
IG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8g
Qm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOworfQorCitQ
YXNzUmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpidWls
ZFByaW1pdGl2ZXMoRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgU1ZHRmlsdGVyRWxlbWVudCogZmls
dGVyRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQqPihub2RlKCkpOworICAg
IGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudC0+cHJpbWl0aXZl
VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7
CisKKyAgICAvLyBBZGQgZWZmZWN0cyB0byB0aGUgYnVpbGRlcgorICAgIFJlZlB0cjxTVkdGaWx0
ZXJCdWlsZGVyPiBidWlsZGVyID0gU1ZHRmlsdGVyQnVpbGRlcjo6Y3JlYXRlKGZpbHRlcik7Cisg
ICAgZm9yIChOb2RlKiBub2RlID0gZmlsdGVyRWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBu
b2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoIW5vZGUtPmlzU1ZHRWxl
bWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgU1ZHRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKTsKKyAgICAgICAgaWYgKCFlbGVt
ZW50LT5pc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKiBlZmZlY3RFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4oZWxlbWVudCk7
CisgICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQtPmJ1
aWxkKGJ1aWxkZXIuZ2V0KCksIGZpbHRlcik7CisgICAgICAgIGlmICghZWZmZWN0KSB7CisgICAg
ICAgICAgICBidWlsZGVyLT5jbGVhckVmZmVjdHMoKTsKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisgICAgICAgIGJ1aWxkZXItPmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNl
cyhlZmZlY3QpOworICAgICAgICBlZmZlY3RFbGVtZW50LT5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMo
cHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlLCBlZmZlY3QuZ2V0KCkpOworICAgICAgICBidWlsZGVy
LT5hZGQoZWZmZWN0RWxlbWVudC0+cmVzdWx0KCksIGVmZmVjdCk7CisgICAgfQorICAgIHJldHVy
biBidWlsZGVyLnJlbGVhc2UoKTsKK30KKworYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6
Zml0c0luTWF4aW11bUltYWdlU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIEZsb2F0U2l6ZSYg
c2NhbGUpCit7CisgICAgYm9vbCBtYXRjaGVzRmlsdGVyU2l6ZSA9IHRydWU7CisgICAgaWYgKHNp
emUud2lkdGgoKSA+IGtNYXhGaWx0ZXJTaXplKSB7CisgICAgICAgIHNjYWxlLnNldFdpZHRoKHNj
YWxlLndpZHRoKCkgKiBrTWF4RmlsdGVyU2l6ZSAvIHNpemUud2lkdGgoKSk7CisgICAgICAgIG1h
dGNoZXNGaWx0ZXJTaXplID0gZmFsc2U7CisgICAgfQorICAgIGlmIChzaXplLmhlaWdodCgpID4g
a01heEZpbHRlclNpemUpIHsKKyAgICAgICAgc2NhbGUuc2V0SGVpZ2h0KHNjYWxlLmhlaWdodCgp
ICoga01heEZpbHRlclNpemUgLyBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgbWF0Y2hlc0ZpbHRl
clNpemUgPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gbWF0Y2hlc0ZpbHRlclNpemU7Cit9
CisKK2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5z
aWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKQoreworICAgIEFTU0VSVChvYmplY3QpOworICAgIEFT
U0VSVChjb250ZXh0KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKHJlc291cmNlTW9kZSA9
PSBBcHBseVRvRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVzb3VyY2VN
b2RlKTsKKyNlbmRpZgorCisgICAgLy8gUmV0dXJuaW5nIGZhbHNlIGhlcmUsIHRvIGF2b2lkIGRy
YXdpbmdzIG9udG8gdGhlIGNvbnRleHQuIFdlIGp1c3Qgd2FudCB0bworICAgIC8vIGRyYXcgdGhl
IHN0b3JlZCBmaWx0ZXIgb3V0cHV0LCBub3QgdGhlIHVuZmlsdGVyZWQgb2JqZWN0IGFzIHdlbGwu
CisgICAgaWYgKG1fZmlsdGVyLmNvbnRhaW5zKG9iamVjdCkpIHsKKyAgICAgICAgRmlsdGVyRGF0
YSogZmlsdGVyRGF0YSA9IG1fZmlsdGVyLmdldChvYmplY3QpOworICAgICAgICBpZiAoZmlsdGVy
RGF0YS0+YnVpbGRlZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBkZWxl
dGUgbV9maWx0ZXIudGFrZShvYmplY3QpOyAvLyBPb3BzLCBoYXZlIHRvIHJlYnVpbGQsIGdvIHRo
cm91Z2ggbm9ybWFsIGNvZGUgcGF0aAorICAgIH0KKworICAgIE93blB0cjxGaWx0ZXJEYXRhPiBm
aWx0ZXJEYXRhKG5ldyBGaWx0ZXJEYXRhKTsKKyAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdC
b3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CisKKyAgICBTVkdGaWx0ZXJFbGVtZW50
KiBmaWx0ZXJFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyRWxlbWVudCo+KG5vZGUoKSk7
CisgICAgZmlsdGVyRGF0YS0+Ym91bmRhcmllcyA9IGZpbHRlckVsZW1lbnQtPmZpbHRlckJvdW5k
aW5nQm94KHRhcmdldEJvdW5kaW5nQm94KTsKKyAgICBpZiAoZmlsdGVyRGF0YS0+Ym91bmRhcmll
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIERldGVybWluZSBh
YnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggZm9yIGZpbHRlci4gCisgICAgQWZmaW5lVHJh
bnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOworICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1
bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKG9iamVjdCwg
YWJzb2x1dGVUcmFuc2Zvcm0pOworICAgIGlmICghYWJzb2x1dGVUcmFuc2Zvcm0uaXNJbnZlcnRp
YmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBv
ZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1
Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2VzIGZvciBmZVRpbGUuCisgICAgZmlsdGVyRGF0YS0+c2hl
YXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zv
cm0ueFNjYWxlKCksIDAsIDAsIGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpLCBhYnNvbHV0ZVRy
YW5zZm9ybS5lKCksIGFic29sdXRlVHJhbnNmb3JtLmYoKSk7CisKKyAgICAvLyBEZXRlcm1pbmUg
YWJzb2x1dGUgYm91bmRhcmllcyBvZiB0aGUgZmlsdGVyIGFuZCB0aGUgZHJhd2luZyByZWdpb24u
CisgICAgRmxvYXRSZWN0IGFic29sdXRlRmlsdGVyQm91bmRhcmllcyA9IGZpbHRlckRhdGEtPnNo
ZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+Ym91bmRhcmllcyk7
CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBvYmplY3QtPnN0cm9rZUJvdW5kaW5nQm94
KCk7CisgICAgZHJhd2luZ1JlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyRGF0YS0+Ym91bmRhcmllcyk7
CisgICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZpbHRlckRhdGEtPnNoZWFy
RnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZHJhd2luZ1JlZ2lvbik7CisKKyAgICAvLyBD
cmVhdGUgdGhlIFNWR0ZpbHRlciBvYmplY3QuCisgICAgYm9vbCBwcmltaXRpdmVCb3VuZGluZ0Jv
eE1vZGUgPSBmaWx0ZXJFbGVtZW50LT5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6
U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKKyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIg
PSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9y
bSwgYWJzb2x1dGVEcmF3aW5nUmVnaW9uLCB0YXJnZXRCb3VuZGluZ0JveCwgZmlsdGVyRGF0YS0+
Ym91bmRhcmllcywgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKTsKKworICAgIC8vIENyZWF0ZSBh
bGwgcmVsZXZhbnQgZmlsdGVyIHByaW1pdGl2ZXMuCisgICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9
IGJ1aWxkUHJpbWl0aXZlcyhmaWx0ZXJEYXRhLT5maWx0ZXIuZ2V0KCkpOworICAgIGlmICghZmls
dGVyRGF0YS0+YnVpbGRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2FsY3Vs
YXRlIHRoZSBzY2FsZSBmYWN0b3IgZm9yIHRoZSB1c2Ugb2YgZmlsdGVyUmVzLgorICAgIC8vIEFs
c28gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjRmlsdGVyRWZmZWN0
c1JlZ2lvbgorICAgIEZsb2F0U2l6ZSBzY2FsZSgxLCAxKTsKKyAgICBpZiAoZmlsdGVyRWxlbWVu
dC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpmaWx0ZXJSZXNBdHRyKSkgeworICAgICAgICBzY2Fs
ZS5zZXRXaWR0aChmaWx0ZXJFbGVtZW50LT5maWx0ZXJSZXNYKCkgLyBhYnNvbHV0ZUZpbHRlckJv
dW5kYXJpZXMud2lkdGgoKSk7CisgICAgICAgIHNjYWxlLnNldEhlaWdodChmaWx0ZXJFbGVtZW50
LT5maWx0ZXJSZXNZKCkgLyBhYnNvbHV0ZUZpbHRlckJvdW5kYXJpZXMuaGVpZ2h0KCkpOworICAg
IH0KKworICAgIGlmIChzY2FsZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIERldGVybWluZSBzY2FsZSBmYWN0b3IgZm9yIGZpbHRlci4gVGhlIHNpemUgb2YgaW50
ZXJtZWRpYXRlIEltYWdlQnVmZmVycyBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4ga01heEZpbHRl
clNpemUuCisgICAgRmxvYXRSZWN0IHRlbXBTb3VyY2VSZWN0ID0gYWJzb2x1dGVEcmF3aW5nUmVn
aW9uOworICAgIHRlbXBTb3VyY2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdo
dCgpKTsKKyAgICBmaXRzSW5NYXhpbXVtSW1hZ2VTaXplKHRlbXBTb3VyY2VSZWN0LnNpemUoKSwg
c2NhbGUpOworCisgICAgLy8gU2V0IHRoZSBzY2FsZSBsZXZlbCBpbiBTVkdGaWx0ZXIuCisgICAg
ZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKKworICAgIEZp
bHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3Qo
KTsKKyAgICBpZiAoIWxhc3RFZmZlY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24obGFzdEVmZmVjdCwgZmlsdGVyRGF0YS0+ZmlsdGVyLmdldCgpKTsKKyAgICBGbG9h
dFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpOworICAgIC8vIEF0
IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLAorICAgIC8v
IHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KKyAg
ICBpZiAoIWZpdHNJbk1heGltdW1JbWFnZVNpemUoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7
CisgICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7
CisgICAgICAgIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlOjpkZXRlcm1pbmVGaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24obGFzdEVmZmVjdCwgZmlsdGVyRGF0YS0+ZmlsdGVyLmdldCgp
KTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgZHJhd2luZ1JlZ2lvbiBpcyBlbXB0eSwgd2UgaGF2
ZSBzb21ldGhpbmcgbGlrZSA8ZyBmaWx0ZXI9Ii4uIi8+LgorICAgIC8vIEV2ZW4gaWYgdGhlIHRh
cmdldCBvYmplY3RCb3VuZGluZ0JveCgpIGlzIGVtcHR5LCB3ZSBzdGlsbCBoYXZlIHRvIGRyYXcg
dGhlIGxhc3QgZWZmZWN0IHJlc3VsdCBpbWFnZSBpbiBwb3N0QXBwbHlSZXNvdXJjZS4KKyAgICBp
ZiAoZHJhd2luZ1JlZ2lvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2ZpbHRlci5j
b250YWlucyhvYmplY3QpKTsKKyAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29u
dGV4dDsKKyAgICAgICAgbV9maWx0ZXIuc2V0KG9iamVjdCwgZmlsdGVyRGF0YS5sZWFrUHRyKCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYWJzb2x1dGVEcmF3aW5nUmVn
aW9uLnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKKworICAgIE93blB0cjxJ
bWFnZUJ1ZmZlcj4gc291cmNlR3JhcGhpYzsKKyAgICBpZiAoIVNWR0ltYWdlQnVmZmVyVG9vbHM6
OmNyZWF0ZUltYWdlQnVmZmVyKGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgYWJzb2x1dGVEcmF3aW5n
UmVnaW9uLCBzb3VyY2VHcmFwaGljLCBDb2xvclNwYWNlTGluZWFyUkdCKSkgeworICAgICAgICBB
U1NFUlQoIW1fZmlsdGVyLmNvbnRhaW5zKG9iamVjdCkpOworICAgICAgICBmaWx0ZXJEYXRhLT5z
YXZlZENvbnRleHQgPSBjb250ZXh0OworICAgICAgICBtX2ZpbHRlci5zZXQob2JqZWN0LCBmaWx0
ZXJEYXRhLmxlYWtQdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgR3JhcGhpY3NDb250ZXh0KiBzb3VyY2VHcmFwaGljQ29udGV4dCA9IHNvdXJjZUdyYXBoaWMt
PmNvbnRleHQoKTsKKyAgICBBU1NFUlQoc291cmNlR3JhcGhpY0NvbnRleHQpOworICAKKyAgICBz
b3VyY2VHcmFwaGljQ29udGV4dC0+dHJhbnNsYXRlKC1hYnNvbHV0ZURyYXdpbmdSZWdpb24ueCgp
LCAtYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnkoKSk7CisgICAgaWYgKHNjYWxlLndpZHRoKCkgIT0g
MSB8fCBzY2FsZS5oZWlnaHQoKSAhPSAxKQorICAgICAgICBzb3VyY2VHcmFwaGljQ29udGV4dC0+
c2NhbGUoc2NhbGUpOworCisgICAgc291cmNlR3JhcGhpY0NvbnRleHQtPmNvbmNhdENUTShmaWx0
ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgc291cmNlR3JhcGhpY0Nv
bnRleHQtPmNsZWFyUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZURyYXdpbmdS
ZWdpb24uc2l6ZSgpKSk7CisgICAgZmlsdGVyRGF0YS0+c291cmNlR3JhcGhpY0J1ZmZlciA9IHNv
dXJjZUdyYXBoaWMucmVsZWFzZSgpOworICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9IGNv
bnRleHQ7CisKKyAgICBjb250ZXh0ID0gc291cmNlR3JhcGhpY0NvbnRleHQ7CisKKyAgICBBU1NF
UlQoIW1fZmlsdGVyLmNvbnRhaW5zKG9iamVjdCkpOworICAgIG1fZmlsdGVyLnNldChvYmplY3Qs
IGZpbHRlckRhdGEubGVha1B0cigpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9i
amVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VN
b2RlLCBjb25zdCBQYXRoKikKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQoY29u
dGV4dCk7CisjaWZuZGVmIE5ERUJVRworICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgPT0gQXBwbHlU
b0RlZmF1bHRNb2RlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlc291cmNlTW9kZSk7Cisj
ZW5kaWYKKworICAgIGlmICghbV9maWx0ZXIuY29udGFpbnMob2JqZWN0KSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IG1fZmlsdGVyLmdldChvYmplY3Qp
OworICAgIGlmICghZmlsdGVyRGF0YS0+YnVpbGRlZCkgeworICAgICAgICBpZiAoIWZpbHRlckRh
dGEtPnNhdmVkQ29udGV4dCkgeworICAgICAgICAgICAgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKG9i
amVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb250ZXh0
ID0gZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0OworICAgICAgICBmaWx0ZXJEYXRhLT5zYXZlZENv
bnRleHQgPSAwOworI2lmICFQTEFURk9STShDRykKKyAgICAgICAgaWYgKGZpbHRlckRhdGEtPnNv
dXJjZUdyYXBoaWNCdWZmZXIpCisgICAgICAgICAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGlj
QnVmZmVyLT50cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbG9yU3Bh
Y2VMaW5lYXJSR0IpOworI2VuZGlmCisgICAgfQorCisgICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZm
ZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOworICAgIAorICAgIGlmIChs
YXN0RWZmZWN0ICYmICFmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVm
ZmVjdC0+ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIC8v
IFRoaXMgaXMgdGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3QuIEl0IGp1c3QgbmVlZHMg
dG8gYmUgY2FsbGVkIG9uIHRoZQorICAgICAgICAvLyBpbml0aWFsIGZpbHRlcmluZyBwcm9jZXNz
LiBXZSBqdXN0IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0IG9uIGEKKyAgICAgICAgLy8g
c2Vjb25kIGRyYXdpbmcuCisgICAgICAgIGlmICghZmlsdGVyRGF0YS0+YnVpbGRlZCkgeworICAg
ICAgICAgICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRTb3VyY2VJbWFnZShmaWx0ZXJEYXRhLT5z
b3VyY2VHcmFwaGljQnVmZmVyLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBsYXN0RWZmZWN0LT5h
cHBseSgpOworI2lmICFQTEFURk9STShDRykKKyAgICAgICAgICAgIEltYWdlQnVmZmVyKiByZXN1
bHRJbWFnZSA9IGxhc3RFZmZlY3QtPmFzSW1hZ2VCdWZmZXIoKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHRJbWFnZSkKKyAgICAgICAgICAgICAgICByZXN1bHRJbWFnZS0+dHJhbnNmb3JtQ29sb3JT
cGFjZShDb2xvclNwYWNlTGluZWFyUkdCLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyNlbmRpZgor
ICAgICAgICAgICAgZmlsdGVyRGF0YS0+YnVpbGRlZCA9IHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5hc0ltYWdlQnVmZmVy
KCk7CisgICAgICAgIGlmIChyZXN1bHRJbWFnZSkgeworICAgICAgICAgICAgY29udGV4dC0+Y29u
Y2F0Q1RNKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKSk7
CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0YS0+
ZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEtPmZpbHRl
ci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKSk7CisgICAgICAgICAgICBjb250ZXh0LT5j
bGlwKGxhc3RFZmZlY3QtPm1heEVmZmVjdFJlY3QoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5k
cmF3SW1hZ2VCdWZmZXIocmVzdWx0SW1hZ2UsIG9iamVjdC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgp
LCBsYXN0RWZmZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnNjYWxlKGZpbHRlckRhdGEtPmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpKTsKKworICAgICAg
ICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJh
bnNmb3JtKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGlj
QnVmZmVyLmNsZWFyKCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6
cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoU1ZH
RmlsdGVyRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQqPihu
b2RlKCkpKQorICAgICAgICByZXR1cm4gZWxlbWVudC0+ZmlsdGVyQm91bmRpbmdCb3gob2JqZWN0
LT5vYmplY3RCb3VuZGluZ0JveCgpKTsKKworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30KKwor
fQorI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuaAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmg6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiAgICAgICAgICAgICAgIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqICAgICAgICAgICAgICAgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXJfaAorI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcl9oCisKKyNpZiBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRl
ci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdVbml0VHlw
ZXMuaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dHJ1Y3QgRmlsdGVyRGF0YSB7CisgICAgRmlsdGVyRGF0YSgpCisgICAgICAgIDogc2F2ZWRDb250
ZXh0KDApCisgICAgICAgICwgYnVpbGRlZChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgUmVm
UHRyPFNWR0ZpbHRlcj4gZmlsdGVyOworICAgIFJlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWls
ZGVyOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc291cmNlR3JhcGhpY0J1ZmZlcjsKKyAgICBH
cmFwaGljc0NvbnRleHQqIHNhdmVkQ29udGV4dDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gc2hlYXJG
cmVlQWJzb2x1dGVUcmFuc2Zvcm07CisgICAgRmxvYXRSZWN0IGJvdW5kYXJpZXM7CisgICAgRmxv
YXRTaXplIHNjYWxlOworICAgIGJvb2wgYnVpbGRlZDsKK307CisKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKKworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgOiBwdWJsaWMgUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIgeworcHVibGljOgorICAgIFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
KFNWR0ZpbHRlckVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cigpOworCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1
cm4gIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyIjsgfQorCisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29s
IG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKKworICAgIHZpcnR1YWwgYm9vbCBhcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVu
c2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCBy
ZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKKworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291
cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kik7CisKKyAgICBQYXNzUmVmUHRyPFNWR0ZpbHRl
ckJ1aWxkZXI+IGJ1aWxkUHJpbWl0aXZlcyhGaWx0ZXIqKTsKKworICAgIFNWR1VuaXRUeXBlczo6
U1ZHVW5pdFR5cGUgZmlsdGVyVW5pdHMoKSBjb25zdCB7IHJldHVybiB0b1VuaXRUeXBlKHN0YXRp
Y19jYXN0PFNWR0ZpbHRlckVsZW1lbnQqPihub2RlKCkpLT5maWx0ZXJVbml0cygpKTsgfQorICAg
IFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMoKSBjb25zdCB7IHJldHVy
biB0b1VuaXRUeXBlKHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQqPihub2RlKCkpLT5wcmlt
aXRpdmVVbml0cygpKTsgfQorCisgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVz
b3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KKyAgICBzdGF0aWMg
UmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBlOworCitwcml2YXRlOgorICAgIGJv
b2wgZml0c0luTWF4aW11bUltYWdlU2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmKTsK
KworICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmlsdGVyRGF0YSo+IG1fZmlsdGVyOworfTsK
KworfQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwCShyZXZpc2lv
biA3NTI3MikJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUuY3BwOjc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIKKyNpbmNsdWRlICJTVkdGRUltYWdlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
UHJpbWl0aXZlOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyRWZmZWN0
KiBlZmZlY3QsIFNWR0ZpbHRlciogZmlsdGVyKQoreworICAgIEZsb2F0UmVjdCB1bml0ZVJlY3Q7
CisgICAgRmxvYXRSZWN0IHN1YnJlZ2lvbkJvdW5kaW5nQm94ID0gZWZmZWN0LT5lZmZlY3RCb3Vu
ZGFyaWVzKCk7CisgICAgRmxvYXRSZWN0IHN1YnJlZ2lvbiA9IHN1YnJlZ2lvbkJvdW5kaW5nQm94
OworCisgICAgaWYgKGVmZmVjdC0+ZmlsdGVyRWZmZWN0VHlwZSgpICE9IEZpbHRlckVmZmVjdFR5
cGVUaWxlKSB7CisgICAgICAgIC8vIEZFVHVyYnVsZW5jZSwgRkVJbWFnZSBhbmQgRkVGbG9vZCBk
b24ndCBoYXZlIGlucHV0IGVmZmVjdHMsIHRha2UgdGhlIGZpbHRlciByZWdpb24gYXMgdW5pdGUg
cmVjdC4KKyAgICAgICAgaWYgKHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gZWZmZWN0
LT5pbnB1dEVmZmVjdHMoKS5zaXplKCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZklucHV0RWZmZWN0czsgKytpKQorICAgICAgICAgICAgICAgIHVuaXRl
UmVjdC51bml0ZShkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZWZmZWN0LT5pbnB1
dEVmZmVjdChpKSwgZmlsdGVyKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdW5pdGVS
ZWN0ID0gZmlsdGVyLT5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihlZmZlY3QtPmlucHV0RWZm
ZWN0KDApLCBmaWx0ZXIpOworICAgICAgICB1bml0ZVJlY3QgPSBmaWx0ZXItPmZpbHRlclJlZ2lv
bkluVXNlclNwYWNlKCk7CisgICAgfQorCisgICAgaWYgKGZpbHRlci0+ZWZmZWN0Qm91bmRpbmdC
b3hNb2RlKCkpIHsKKyAgICAgICAgc3VicmVnaW9uID0gdW5pdGVSZWN0OworICAgICAgICAvLyBB
dm9pZCB0aGUgY2FsbGluZyBvZiBhIHZpcnR1YWwgbWV0aG9kIHNldmVyYWwgdGltZXMuCisgICAg
ICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IGZpbHRlci0+dGFyZ2V0Qm91bmRpbmdC
b3goKTsKKworICAgICAgICBpZiAoZWZmZWN0LT5oYXNYKCkpCisgICAgICAgICAgICBzdWJyZWdp
b24uc2V0WCh0YXJnZXRCb3VuZGluZ0JveC54KCkgKyBzdWJyZWdpb25Cb3VuZGluZ0JveC54KCkg
KiB0YXJnZXRCb3VuZGluZ0JveC53aWR0aCgpKTsKKworICAgICAgICBpZiAoZWZmZWN0LT5oYXNZ
KCkpCisgICAgICAgICAgICBzdWJyZWdpb24uc2V0WSh0YXJnZXRCb3VuZGluZ0JveC55KCkgKyBz
dWJyZWdpb25Cb3VuZGluZ0JveC55KCkgKiB0YXJnZXRCb3VuZGluZ0JveC5oZWlnaHQoKSk7CisK
KyAgICAgICAgaWYgKGVmZmVjdC0+aGFzV2lkdGgoKSkKKyAgICAgICAgICAgIHN1YnJlZ2lvbi5z
ZXRXaWR0aChzdWJyZWdpb25Cb3VuZGluZ0JveC53aWR0aCgpICogdGFyZ2V0Qm91bmRpbmdCb3gu
d2lkdGgoKSk7CisKKyAgICAgICAgaWYgKGVmZmVjdC0+aGFzSGVpZ2h0KCkpCisgICAgICAgICAg
ICBzdWJyZWdpb24uc2V0SGVpZ2h0KHN1YnJlZ2lvbkJvdW5kaW5nQm94LmhlaWdodCgpICogdGFy
Z2V0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghZWZm
ZWN0LT5oYXNYKCkpCisgICAgICAgICAgICBzdWJyZWdpb24uc2V0WCh1bml0ZVJlY3QueCgpKTsK
KworICAgICAgICBpZiAoIWVmZmVjdC0+aGFzWSgpKQorICAgICAgICAgICAgc3VicmVnaW9uLnNl
dFkodW5pdGVSZWN0LnkoKSk7CisKKyAgICAgICAgaWYgKCFlZmZlY3QtPmhhc1dpZHRoKCkpCisg
ICAgICAgICAgICBzdWJyZWdpb24uc2V0V2lkdGgodW5pdGVSZWN0LndpZHRoKCkpOworCisgICAg
ICAgIGlmICghZWZmZWN0LT5oYXNIZWlnaHQoKSkKKyAgICAgICAgICAgIHN1YnJlZ2lvbi5zZXRI
ZWlnaHQodW5pdGVSZWN0LmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBlZmZlY3QtPnNldEZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdpb24pOworCisgICAgRmxvYXRSZWN0IGFic29sdXRl
U3VicmVnaW9uID0gZmlsdGVyLT5tYXBMb2NhbFJlY3RUb0Fic29sdXRlUmVjdChzdWJyZWdpb24p
OworICAgIEZsb2F0U2l6ZSBmaWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyLT5maWx0ZXJSZXNvbHV0
aW9uKCk7CisgICAgYWJzb2x1dGVTdWJyZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbi53aWR0
aCgpLCBmaWx0ZXJSZXNvbHV0aW9uLmhlaWdodCgpKTsKKworICAgIC8vIEZFSW1hZ2UgbmVlZHMg
dGhlIHVuY2xpcHBlZCBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZXMgdG8gZGV0ZXJt
aW5lIHRoZSBjb3JyZWN0CisgICAgLy8gZGVzdGluYXRpb24gcmVjdCBpbiBjb21iaW5hdGlvbiB3
aXRoIHByZXNlcnZlQXNwZWN0UmF0aW8uCisgICAgaWYgKGVmZmVjdC0+ZmlsdGVyRWZmZWN0VHlw
ZSgpID09IEZpbHRlckVmZmVjdFR5cGVJbWFnZSkKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxG
RUltYWdlKj4oZWZmZWN0KS0+c2V0QWJzb2x1dGVTdWJyZWdpb24oYWJzb2x1dGVTdWJyZWdpb24p
OworCisgICAgLy8gQ2xpcCBldmVyeSBmaWx0ZXIgZWZmZWN0IHRvIHRoZSBmaWx0ZXIgcmVnaW9u
LgorICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IGZpbHRlci0+Zmls
dGVyUmVnaW9uKCk7CisgICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVy
UmVzb2x1dGlvbi53aWR0aCgpLCBmaWx0ZXJSZXNvbHV0aW9uLmhlaWdodCgpKTsKKyAgICBhYnNv
bHV0ZVN1YnJlZ2lvbi5pbnRlcnNlY3QoYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24pOworCisg
ICAgZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVTdWJy
ZWdpb24pKTsKKyAgICByZXR1cm4gc3VicmVnaW9uOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZS5oCShyZXZpc2lvbiA3NTI3MikJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZworICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmVfaAorI2RlZmluZSBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZV9oCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKworI2luY2x1ZGUgIlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIgorI2luY2x1
ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyUHJpbWl0aXZlIDogcHVibGljIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lciB7Citw
dWJsaWM6CisKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZShT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIGZpbHRlclByaW1pdGl2ZUVsZW1l
bnQpCisgICAgICAgIDogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyKGZpbHRlclByaW1pdGl2ZUVs
ZW1lbnQpCisgICAgeworICAgIH0KKworICAgIC8vIFRoZXkgZGVwZW5kIG9uIHRoZSBSZW5kZXJP
YmplY3QgYXJndW1lbnQgb2YgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2Uu
CisgICAgc3RhdGljIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24o
RmlsdGVyRWZmZWN0KiBlZmZlY3QsIFNWR0ZpbHRlciogZmlsdGVyKTsKKworcHJpdmF0ZToKKyAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUiOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZHUmVz
b3VyY2VGaWx0ZXJQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklM
VEVSUykKKworI2VuZGlmIC8vIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlX2gKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5jcHAJKHJldmlzaW9uIDc1MjcyKQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50LmNwcDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgiCisKKyNpbmNs
dWRlICJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCisjaW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJUb29s
cy5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50OjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50KFNWR0dyYWRpZW50RWxlbWVudCogbm9kZSkK
KyAgICA6IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKG5vZGUpCisgICAgLCBtX3Nob3VsZENv
bGxlY3RHcmFkaWVudEF0dHJpYnV0ZXModHJ1ZSkKKyNpZiBQTEFURk9STShDRykKKyAgICAsIG1f
c2F2ZWRDb250ZXh0KDApCisjZW5kaWYKK3sKK30KKworUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dDo6flJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQoKQoreworICAgIGlmIChtX2dyYWRpZW50Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlQWxsVmFsdWVzKG1fZ3JhZGll
bnQpOworICAgIG1fZ3JhZGllbnQuY2xlYXIoKTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50OjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRh
dGlvbikKK3sKKyAgICBpZiAoIW1fZ3JhZGllbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIGRlbGV0
ZUFsbFZhbHVlcyhtX2dyYWRpZW50KTsKKyAgICAgICAgbV9ncmFkaWVudC5jbGVhcigpOworICAg
IH0KKworICAgIG1fc2hvdWxkQ29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyA9IHRydWU7CisgICAg
bWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IFJlcGFp
bnRJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKK30KKwordm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50OjpyZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0
KiBjbGllbnQsIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbikKK3sKKyAgICBBU1NFUlQoY2xpZW50
KTsKKworICAgIGlmIChtX2dyYWRpZW50LmNvbnRhaW5zKGNsaWVudCkpCisgICAgICAgIGRlbGV0
ZSBtX2dyYWRpZW50LnRha2UoY2xpZW50KTsKKworICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRp
b24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gUmVwYWludEludmFsaWRhdGlvbiA6IFBh
cmVudE9ubHlJbnZhbGlkYXRpb24pOworfQorCisjaWYgUExBVEZPUk0oQ0cpCitzdGF0aWMgaW5s
aW5lIGJvb2wgY3JlYXRlTWFza0FuZFN3YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KEdyYXBoaWNz
Q29udGV4dComIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dComIHNhdmVkQ29udGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0
KQoreworICAgIFJlbmRlck9iamVjdCogdGV4dFJvb3RCbG9jayA9IFJlbmRlclNWR1RleHQ6Omxv
Y2F0ZVJlbmRlclNWR1RleHRBbmNlc3RvcihvYmplY3QpOworICAgIEFTU0VSVCh0ZXh0Um9vdEJs
b2NrKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKKyAgICBTVkdJ
bWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29v
cmRpbmF0ZVN5c3RlbSh0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRyYW5zZm9ybSk7CisKKyAgICBG
bG9hdFJlY3QgYWJzb2x1dGVUYXJnZXRSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdCh0
ZXh0Um9vdEJsb2NrLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBGbG9h
dFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNs
YW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcih0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0
ZVRhcmdldFJlY3QpOworICAgIGlmIChjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNr
SW1hZ2U7CisgICAgaWYgKCFTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihh
YnNvbHV0ZVRhcmdldFJlY3QsIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIG1hc2tJbWFnZSwg
Q29sb3JTcGFjZURldmljZVJHQikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBo
aWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOworICAg
IEFTU0VSVChtYXNrSW1hZ2VDb250ZXh0KTsKKworICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5z
bGF0ZSgtY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC54KCksIC1jbGFtcGVkQWJzb2x1dGVUYXJn
ZXRSZWN0LnkoKSk7CisgICAgbWFza0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKGFic29sdXRlVHJh
bnNmb3JtKTsKKworICAgIEFTU0VSVChtYXNrSW1hZ2UpOworICAgIHNhdmVkQ29udGV4dCA9IGNv
bnRleHQ7CisgICAgY29udGV4dCA9IG1hc2tJbWFnZUNvbnRleHQ7CisgICAgaW1hZ2VCdWZmZXIg
PSBtYXNrSW1hZ2UucmVsZWFzZSgpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5s
aW5lIEFmZmluZVRyYW5zZm9ybSBjbGlwVG9UZXh0TWFzayhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPd25QdHI8
SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBib3VuZGluZ0JveE1v
ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50VHJhbnNmb3JtKQoreworICAgIFJlbmRlck9iamVjdCog
dGV4dFJvb3RCbG9jayA9IFJlbmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3Rv
cihvYmplY3QpOworICAgIEFTU0VSVCh0ZXh0Um9vdEJsb2NrKTsKKworICAgIHRhcmdldFJlY3Qg
PSB0ZXh0Um9vdEJsb2NrLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworCisgICAg
QWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOworICAgIFNWR0ltYWdlQnVmZmVyVG9v
bHM6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVt
KHRleHRSb290QmxvY2ssIGFic29sdXRlVHJhbnNmb3JtKTsKKworICAgIEZsb2F0UmVjdCBhYnNv
bHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRhcmdldFJlY3QpOwor
ICAgIEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0ID0gU1ZHSW1hZ2VCdWZmZXJU
b29sczo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKHRleHRSb290QmxvY2ss
IGFic29sdXRlVGFyZ2V0UmVjdCk7CisKKyAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGlwVG9J
bWFnZUJ1ZmZlcihjb250ZXh0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY2xhbXBlZEFic29sdXRlVGFy
Z2V0UmVjdCwgaW1hZ2VCdWZmZXIpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKKyAg
ICBpZiAoYm91bmRpbmdCb3hNb2RlKSB7CisgICAgICAgIEZsb2F0UmVjdCBtYXNrQm91bmRpbmdC
b3ggPSB0ZXh0Um9vdEJsb2NrLT5vYmplY3RCb3VuZGluZ0JveCgpOworICAgICAgICBtYXRyaXgu
dHJhbnNsYXRlKG1hc2tCb3VuZGluZ0JveC54KCksIG1hc2tCb3VuZGluZ0JveC55KCkpOworICAg
ICAgICBtYXRyaXguc2NhbGVOb25Vbmlmb3JtKG1hc2tCb3VuZGluZ0JveC53aWR0aCgpLCBtYXNr
Qm91bmRpbmdCb3guaGVpZ2h0KCkpOworICAgIH0KKyAgICBtYXRyaXgubXVsdExlZnQoZ3JhZGll
bnRUcmFuc2Zvcm0pOworICAgIHJldHVybiBtYXRyaXg7Cit9CisjZW5kaWYKKworYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVk
IHNob3J0IHJlc291cmNlTW9kZSkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQo
c3R5bGUpOworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9
IEFwcGx5VG9EZWZhdWx0TW9kZSk7CisKKyAgICAvLyBCZSBzdXJlIHRvIHN5bmNocm9uaXplIGFs
bCBTVkcgcHJvcGVydGllcyBvbiB0aGUgZ3JhZGllbnRFbGVtZW50IF9iZWZvcmVfIHByb2Nlc3Np
bmcgYW55IGZ1cnRoZXIuCisgICAgLy8gT3RoZXJ3aGlzZSB0aGUgY2FsbCB0byBjb2xsZWN0R3Jh
ZGllbnRBdHRyaWJ1dGVzKCkgaW4gY3JlYXRlVGlsZUltYWdlKCksIG1heSBjYXVzZSB0aGUgU1ZH
IERPTSBwcm9wZXJ0eQorICAgIC8vIHN5bmNocm9uaXphdGlvbiB0byBraWNrIGluLCB3aGljaCBj
YXVzZXMgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpIHRvIGJlIGNhbGxlZCwgd2hpY2ggaW4g
dHVybiBkZWxldGVzIG91cgorICAgIC8vIEdyYWRpZW50RGF0YSBvYmplY3QhIExlYXZpbmcgb3V0
IHRoZSBsaW5lIGJlbG93IHdpbGwgY2F1c2Ugc3ZnL2R5bmFtaWMtdXBkYXRlcy9TVkcqR3JhZGll
bnRFbGVtZW50LXN2Z2RvbSogdG8gY3Jhc2guCisgICAgU1ZHR3JhZGllbnRFbGVtZW50KiBncmFk
aWVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdHcmFkaWVudEVsZW1lbnQqPihub2RlKCkpOwor
ICAgIGlmICghZ3JhZGllbnRFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAobV9zaG91bGRDb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKSB7CisgICAgICAgIGdyYWRpZW50
RWxlbWVudC0+dXBkYXRlQW5pbWF0ZWRTVkdBdHRyaWJ1dGUoYW55UU5hbWUoKSk7CisgICAgICAg
IGNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMoZ3JhZGllbnRFbGVtZW50KTsKKyAgICAgICAgbV9z
aG91bGRDb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzID0gZmFsc2U7CisgICAgfQorCisgICAgLy8g
U3BlYzogV2hlbiB0aGUgZ2VvbWV0cnkgb2YgdGhlIGFwcGxpY2FibGUgZWxlbWVudCBoYXMgbm8g
d2lkdGggb3IgaGVpZ2h0IGFuZCBvYmplY3RCb3VuZGluZ0JveCBpcyBzcGVjaWZpZWQsCisgICAg
Ly8gdGhlbiB0aGUgZ2l2ZW4gZWZmZWN0IChlLmcuIGEgZ3JhZGllbnQgb3IgYSBmaWx0ZXIpIHdp
bGwgYmUgaWdub3JlZC4KKyAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmplY3Qt
Pm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpICYmIG9iamVj
dEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFtX2dyYWRpZW50LmNvbnRhaW5zKG9iamVjdCkpCisgICAgICAgIG1fZ3JhZGllbnQuc2V0KG9i
amVjdCwgbmV3IEdyYWRpZW50RGF0YSk7CisKKyAgICBHcmFkaWVudERhdGEqIGdyYWRpZW50RGF0
YSA9IG1fZ3JhZGllbnQuZ2V0KG9iamVjdCk7CisgICAgYm9vbCBpc1BhaW50aW5nVGV4dCA9IHJl
c291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZTsKKworICAgIC8vIENyZWF0ZSBncmFkaWVudCBv
YmplY3QKKyAgICBpZiAoIWdyYWRpZW50RGF0YS0+Z3JhZGllbnQpIHsKKyAgICAgICAgYnVpbGRH
cmFkaWVudChncmFkaWVudERhdGEsIGdyYWRpZW50RWxlbWVudCk7CisKKyAgICAgICAgLy8gQ0cg
cGxhdGZvcm1zIHdpbGwgaGFuZGxlIHRoZSBncmFkaWVudCBzcGFjZSB0cmFuc2Zvcm0gZm9yIHRl
eHQgYWZ0ZXIgYXBwbHlpbmcgdGhlCisgICAgICAgIC8vIHJlc291cmNlLCBzbyBkb24ndCBhcHBs
eSBpdCBoZXJlLiBGb3Igbm9uLUNHIHBsYXRmb3Jtcywgd2Ugd2FudCB0aGUgdGV4dCBib3VuZGlu
ZworICAgICAgICAvLyBib3ggYXBwbGllZCB0byB0aGUgZ3JhZGllbnQgc3BhY2UgdHJhbnNmb3Jt
IG5vdywgc28gdGhlIGdyYWRpZW50IHNoYWRlciBjYW4gdXNlIGl0LgorI2lmIFBMQVRGT1JNKENH
KQorICAgICAgICBpZiAoYm91bmRpbmdCb3hNb2RlKCkgJiYgIW9iamVjdEJvdW5kaW5nQm94Lmlz
RW1wdHkoKSAmJiAhaXNQYWludGluZ1RleHQpIHsKKyNlbHNlCisgICAgICAgIGlmIChib3VuZGlu
Z0JveE1vZGUoKSAmJiAhb2JqZWN0Qm91bmRpbmdCb3guaXNFbXB0eSgpKSB7CisjZW5kaWYKKyAg
ICAgICAgICAgIGdyYWRpZW50RGF0YS0+dXNlcnNwYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZShvYmpl
Y3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CisgICAgICAgICAgICBn
cmFkaWVudERhdGEtPnVzZXJzcGFjZVRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91
bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOworICAgICAgICB9
CisKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50VHJhbnNmb3JtOworICAgICAgICBj
YWxjdWxhdGVHcmFkaWVudFRyYW5zZm9ybShncmFkaWVudFRyYW5zZm9ybSk7CisKKyAgICAgICAg
Z3JhZGllbnREYXRhLT51c2Vyc3BhY2VUcmFuc2Zvcm0ubXVsdExlZnQoZ3JhZGllbnRUcmFuc2Zv
cm0pOworICAgICAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJh
bnNmb3JtKGdyYWRpZW50RGF0YS0+dXNlcnNwYWNlVHJhbnNmb3JtKTsKKyAgICB9CisKKyAgICBp
ZiAoIWdyYWRpZW50RGF0YS0+Z3JhZGllbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIERyYXcgZ3JhZGllbnQKKyAgICBjb250ZXh0LT5zYXZlKCk7CisKKyAgICBpZiAoaXNQYWlu
dGluZ1RleHQpIHsKKyNpZiBQTEFURk9STShDRykKKyAgICAgICAgaWYgKCFjcmVhdGVNYXNrQW5k
U3dhcENvbnRleHRGb3JUZXh0R3JhZGllbnQoY29udGV4dCwgbV9zYXZlZENvbnRleHQsIG1faW1h
Z2VCdWZmZXIsIG9iamVjdCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgY29u
dGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSA/
IFRleHRNb2RlRmlsbCA6IFRleHRNb2RlU3Ryb2tlKTsKKyAgICB9CisKKyAgICBjb25zdCBTVkdS
ZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3Zn
U3R5bGUpOworCisgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkgeworICAg
ICAgICBjb250ZXh0LT5zZXRBbHBoYShzdmdTdHlsZS0+ZmlsbE9wYWNpdHkoKSk7CisgICAgICAg
IGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChncmFkaWVudERhdGEtPmdyYWRpZW50KTsKKyAgICAg
ICAgY29udGV4dC0+c2V0RmlsbFJ1bGUoc3ZnU3R5bGUtPmZpbGxSdWxlKCkpOworICAgIH0gZWxz
ZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpIHsKKyAgICAgICAgaWYgKHN2
Z1N0eWxlLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0UpCisgICAgICAg
ICAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKHRy
YW5zZm9ybU9uTm9uU2NhbGluZ1N0cm9rZShvYmplY3QsIGdyYWRpZW50RGF0YS0+dXNlcnNwYWNl
VHJhbnNmb3JtKSk7CisgICAgICAgIGNvbnRleHQtPnNldEFscGhhKHN2Z1N0eWxlLT5zdHJva2VP
cGFjaXR5KCkpOworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VHcmFkaWVudChncmFkaWVudERh
dGEtPmdyYWRpZW50KTsKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHls
ZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5z
aWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQoreworICAgIEFTU0VS
VChjb250ZXh0KTsKKyAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9k
ZSk7CisKKyAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSB7CisjaWYgUExB
VEZPUk0oQ0cpCisgICAgICAgIC8vIENHIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGdy
YWRpZW50IG9uIHRleHQKKyAgICAgICAgaWYgKG1fc2F2ZWRDb250ZXh0ICYmIG1fZ3JhZGllbnQu
Y29udGFpbnMob2JqZWN0KSkgeworICAgICAgICAgICAgR3JhZGllbnREYXRhKiBncmFkaWVudERh
dGEgPSBtX2dyYWRpZW50LmdldChvYmplY3QpOworCisgICAgICAgICAgICAvLyBSZXN0b3JlIG9u
LXNjcmVlbiBkcmF3aW5nIGNvbnRleHQKKyAgICAgICAgICAgIGNvbnRleHQgPSBtX3NhdmVkQ29u
dGV4dDsKKyAgICAgICAgICAgIG1fc2F2ZWRDb250ZXh0ID0gMDsKKworICAgICAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIGdyYWRpZW50VHJhbnNmb3JtOworICAgICAgICAgICAgY2FsY3VsYXRlR3Jh
ZGllbnRUcmFuc2Zvcm0oZ3JhZGllbnRUcmFuc2Zvcm0pOworCisgICAgICAgICAgICBGbG9hdFJl
Y3QgdGFyZ2V0UmVjdDsKKyAgICAgICAgICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQtPnNldEdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0oY2xpcFRvVGV4dE1hc2soY29udGV4dCwgbV9pbWFnZUJ1ZmZl
ciwgdGFyZ2V0UmVjdCwgb2JqZWN0LCBib3VuZGluZ0JveE1vZGUoKSwgZ3JhZGllbnRUcmFuc2Zv
cm0pKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChncmFkaWVudERhdGEt
PmdyYWRpZW50KTsKKworICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QodGFyZ2V0UmVjdCk7
CisgICAgICAgICAgICBtX2ltYWdlQnVmZmVyLmNsZWFyKCk7CisgICAgICAgIH0KKyNlbHNlCisg
ICAgICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOworI2VuZGlmCisgICAgfSBlbHNlIGlmIChwYXRo
KSB7CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCisgICAgICAg
ICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7CisgICAgICAgIGVsc2UgaWYgKHJlc291cmNl
TW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQorICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0
aCgqcGF0aCk7CisgICAgfQorCisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCit2b2lkIFJl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFkZFN0b3BzKEdyYWRpZW50RGF0YSogZ3JhZGllbnRE
YXRhLCBjb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4mIHN0b3BzKSBjb25zdAorewor
ICAgIEFTU0VSVChncmFkaWVudERhdGEtPmdyYWRpZW50KTsKKworICAgIGNvbnN0IFZlY3RvcjxH
cmFkaWVudDo6Q29sb3JTdG9wPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RvcHMuZW5kKCk7Cisg
ICAgZm9yIChWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
c3RvcHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBncmFkaWVudERhdGEtPmdy
YWRpZW50LT5hZGRDb2xvclN0b3AoKml0KTsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAkocmV2
aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuaDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
ICAgICAgICAgICAgICAgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50X2gKKyNkZWZpbmUg
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudF9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YWRpZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgorCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3Qg
R3JhZGllbnREYXRhIHsKKyAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50OworICAgIEFmZmlu
ZVRyYW5zZm9ybSB1c2Vyc3BhY2VUcmFuc2Zvcm07Cit9OworCitjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CisKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQgOiBwdWJsaWMgUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIgeworcHVibGljOgorICAgIFJlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQoU1ZHR3JhZGllbnRFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUo
Ym9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24g
PSB0cnVlKTsKKworICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNl
TW9kZSk7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBh
dGgqKTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9i
amVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGFk
ZFN0b3BzKEdyYWRpZW50RGF0YSosIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiYp
IGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zvcm0oQWZmaW5lVHJhbnNm
b3JtJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKFNW
R0dyYWRpZW50RWxlbWVudCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFkaWVudChH
cmFkaWVudERhdGEqLCBTVkdHcmFkaWVudEVsZW1lbnQqKSBjb25zdCA9IDA7CisKK3ByaXZhdGU6
CisgICAgYm9vbCBtX3Nob3VsZENvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMgOiAxOworICAgIEhh
c2hNYXA8UmVuZGVyT2JqZWN0KiwgR3JhZGllbnREYXRhKj4gbV9ncmFkaWVudDsKKworI2lmIFBM
QVRGT1JNKENHKQorICAgIEdyYXBoaWNzQ29udGV4dCogbV9zYXZlZENvbnRleHQ7CisgICAgT3du
UHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworI2VuZGlmCit9OworCit9CisKKyNlbmRp
ZgorI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VM
aW5lYXJHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwCShyZXZpc2lvbiA3NTI3MikJKGZyb20g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHA6NzUy
NzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFk
aWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oIgorCisjaW5jbHVkZSAiTGlu
ZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiU1ZHTGluZWFyR3JhZGllbnRFbGVt
ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIFJl
bmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OnNfcmVzb3VyY2VUeXBlID0gTGluZWFyR3Jh
ZGllbnRSZXNvdXJjZVR5cGU7CisKK1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OlJl
bmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQoU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KiBu
b2RlKQorICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudChub2RlKQoreworfQorCitSZW5k
ZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50Ojp+UmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFk
aWVudCgpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudDo6Y29s
bGVjdEdyYWRpZW50QXR0cmlidXRlcyhTVkdHcmFkaWVudEVsZW1lbnQqIGdyYWRpZW50RWxlbWVu
dCkKK3sKKyAgICBtX2F0dHJpYnV0ZXMgPSBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMoKTsKKyAg
ICBzdGF0aWNfY2FzdDxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQqPihncmFkaWVudEVsZW1lbnQp
LT5jb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKG1fYXR0cmlidXRlcyk7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudDo6YnVpbGRHcmFkaWVudChHcmFkaWVudERhdGEq
IGdyYWRpZW50RGF0YSwgU1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQpIGNvbnN0
Cit7CisgICAgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KiBsaW5lYXJHcmFkaWVudEVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQqPihncmFkaWVudEVsZW1lbnQp
OworCisgICAgLy8gRGV0ZXJtaW5lIGdyYWRpZW50IHN0YXJ0L2VuZCBwb2ludHMKKyAgICBGbG9h
dFBvaW50IHN0YXJ0UG9pbnQ7CisgICAgRmxvYXRQb2ludCBlbmRQb2ludDsKKyAgICBsaW5lYXJH
cmFkaWVudEVsZW1lbnQtPmNhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRzKG1fYXR0cmlidXRlcywgc3Rh
cnRQb2ludCwgZW5kUG9pbnQpOworCisgICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudCA9IEdyYWRp
ZW50OjpjcmVhdGUoc3RhcnRQb2ludCwgZW5kUG9pbnQpOworICAgIGdyYWRpZW50RGF0YS0+Z3Jh
ZGllbnQtPnNldFNwcmVhZE1ldGhvZChtX2F0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCkpOworCisg
ICAgLy8gQWRkIHN0b3BzCisgICAgYWRkU3RvcHMoZ3JhZGllbnREYXRhLCBtX2F0dHJpYnV0ZXMu
c3RvcHMoKSk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgJKHJldmlzaW9u
IDc1MjcyKQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdy
YWRpZW50Lmg6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VMaW5lYXJHcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3Jh
ZGllbnRfaAorI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50X2gKKworI2lm
IEVOQUJMRShTVkcpCisjaW5jbHVkZSAiTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDsKKworY2xhc3MgUmVuZGVyU1ZHUmVz
b3VyY2VMaW5lYXJHcmFkaWVudCA6IHB1YmxpYyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50IHsK
K3B1YmxpYzoKKyAgICBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50KFNWR0xpbmVhckdy
YWRpZW50RWxlbWVudCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1Jlc291cmNlTGluZWFyR3Jh
ZGllbnQoKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsg
cmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50IjsgfQorCisgICAgdmlydHVh
bCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19y
ZXNvdXJjZVR5cGU7IH0KKyAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3Vy
Y2VUeXBlOworCisgICAgdmlydHVhbCBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBj
YWxjdWxhdGVHcmFkaWVudFRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyB0
cmFuc2Zvcm0gPSBtX2F0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKFNWR0dyYWRpZW50RWxlbWVudCopOwor
ICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KEdyYWRpZW50RGF0YSosIFNWR0dyYWRpZW50
RWxlbWVudCopIGNvbnN0OworCitwcml2YXRlOgorICAgIExpbmVhckdyYWRpZW50QXR0cmlidXRl
cyBtX2F0dHJpYnV0ZXM7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAJKHJldmlz
aW9uIDc1MjcyKQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtl
ci5jcHA6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR0NvbnRhaW5lci5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdNYXJrZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorI2lu
Y2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR1Jlc291cmNl
VHlwZSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6c19yZXNvdXJjZVR5cGUgPSBNYXJrZXJSZXNv
dXJjZVR5cGU7CisKK1JlbmRlclNWR1Jlc291cmNlTWFya2VyOjpSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlcihTVkdNYXJrZXJFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIobm9kZSkKK3sKK30KKworUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6On5SZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlcigpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6Omxh
eW91dCgpCit7CisgICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIGlmIG91ciBsYXlvdXQg
Y2hhbmdlZC4KKyAgICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91dCgpKQor
ICAgICAgICByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7CisKKyAgICAvLyBSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIgb3ZlcndyaXRlcyBsYXlvdXQoKS4gV2UgbmVlZCB0aGUKKyAgICAvLyBs
YXlvdXRpbmcgb2YgUmVuZGVyU1ZHQ29udGFpbmVyIGZvciBjYWxjdWxhdGluZyAgbG9jYWwKKyAg
ICAvLyB0cmFuc2Zvcm1hdGlvbnMgYW5kIHJlcGFpbnQuCisgICAgUmVuZGVyU1ZHQ29udGFpbmVy
OjpsYXlvdXQoKTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6cmVtb3ZlQWxs
Q2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCit7CisgICAgbWFya0Fs
bENsaWVudHNGb3JJbnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IExheW91dEFuZEJv
dW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKK30KKwordm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9i
amVjdCogY2xpZW50LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCit7CisgICAgQVNTRVJUKGNs
aWVudCk7CisgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihjbGllbnQsIG1hcmtGb3JJbnZh
bGlkYXRpb24gPyBCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFyZW50T25seUludmFsaWRhdGlv
bik7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmFwcGx5Vmlld3BvcnRDbGlw
KFBhaW50SW5mbyYgcGFpbnRJbmZvKQoreworICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0Ojppc092
ZXJmbG93SGlkZGVuKHRoaXMpKQorICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChtX3Zp
ZXdwb3J0KTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjptYXJrZXJC
b3VuZGFyaWVzKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWFya2VyVHJhbnNmb3JtYXRpb24pIGNv
bnN0Cit7CisgICAgRmxvYXRSZWN0IGNvb3JkaW5hdGVzID0gUmVuZGVyU1ZHQ29udGFpbmVyOjpy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworCisgICAgLy8gTWFwIHJlcGFpbnQgcmVj
dCBpbnRvIHBhcmVudCBjb29yZGluYXRlIHNwYWNlLCBpbiB3aGljaCB0aGUgbWFya2VyIGJvdW5k
YXJpZXMgaGF2ZSB0byBiZSBldmFsdWF0ZWQKKyAgICBjb29yZGluYXRlcyA9IGxvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0oKS5tYXBSZWN0KGNvb3JkaW5hdGVzKTsKKworICAgIHJldHVybiBtYXJrZXJU
cmFuc2Zvcm1hdGlvbi5tYXBSZWN0KGNvb3JkaW5hdGVzKTsKK30KKworY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgp
IGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdwb3J0VHJhbnNsYXRpb24odmlld3Bv
cnRUcmFuc2Zvcm0oKSk7CisgICAgbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtID0gdmlld3BvcnRU
cmFuc2xhdGlvbi50cmFuc2xhdGVSaWdodChtX3ZpZXdwb3J0LngoKSwgbV92aWV3cG9ydC55KCkp
OworICAgIHJldHVybiBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07CisgICAgLy8gSWYgdGhpcyBj
bGFzcyB3ZXJlIGV2ZXIgZ2l2ZW4gYSBsb2NhbFRyYW5zZm9ybSgpLCB0aGVuIHRoZSBhYm92ZSB3
b3VsZCByZWFkOgorICAgIC8vIHJldHVybiB2aWV3cG9ydFRyYW5zZm9ybSgpICogbG9jYWxUcmFu
c2Zvcm0oKSAqIHZpZXdwb3J0VHJhbnNsYXRpb247Cit9CisKK0Zsb2F0UG9pbnQgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXI6OnJlZmVyZW5jZVBvaW50KCkgY29uc3QKK3sKKyAgICBTVkdNYXJrZXJF
bGVtZW50KiBtYXJrZXIgPSBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4obm9kZSgpKTsK
KyAgICBBU1NFUlQobWFya2VyKTsKKworICAgIHJldHVybiBGbG9hdFBvaW50KG1hcmtlci0+cmVm
WCgpLnZhbHVlKG1hcmtlciksIG1hcmtlci0+cmVmWSgpLnZhbHVlKG1hcmtlcikpOworfQorCitm
bG9hdCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6YW5nbGUoKSBjb25zdAoreworICAgIFNWR01h
cmtlckVsZW1lbnQqIG1hcmtlciA9IHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQqPihub2Rl
KCkpOworICAgIEFTU0VSVChtYXJrZXIpOworCisgICAgZmxvYXQgYW5nbGUgPSAtMTsKKyAgICBp
ZiAobWFya2VyLT5vcmllbnRUeXBlKCkgPT0gU1ZHTWFya2VyRWxlbWVudDo6U1ZHX01BUktFUl9P
UklFTlRfQU5HTEUpCisgICAgICAgIGFuZ2xlID0gbWFya2VyLT5vcmllbnRBbmdsZSgpLnZhbHVl
KCk7CisKKyAgICByZXR1cm4gYW5nbGU7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlcjo6bWFya2VyVHJhbnNmb3JtYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb3Jp
Z2luLCBmbG9hdCBhdXRvQW5nbGUsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAoreworICAgIFNW
R01hcmtlckVsZW1lbnQqIG1hcmtlciA9IHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQqPihu
b2RlKCkpOworICAgIEFTU0VSVChtYXJrZXIpOworCisgICAgZmxvYXQgbWFya2VyQW5nbGUgPSBh
bmdsZSgpOworICAgIGJvb2wgdXNlU3Ryb2tlV2lkdGggPSAobWFya2VyLT5tYXJrZXJVbml0cygp
ID09IFNWR01hcmtlckVsZW1lbnQ6OlNWR19NQVJLRVJVTklUU19TVFJPS0VXSURUSCk7CisKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob3Jp
Z2luLngoKSwgb3JpZ2luLnkoKSk7CisgICAgdHJhbnNmb3JtLnJvdGF0ZShtYXJrZXJBbmdsZSA9
PSAtMSA/IGF1dG9BbmdsZSA6IG1hcmtlckFuZ2xlKTsKKyAgICB0cmFuc2Zvcm0gPSBtYXJrZXJD
b250ZW50VHJhbnNmb3JtYXRpb24odHJhbnNmb3JtLCByZWZlcmVuY2VQb2ludCgpLCB1c2VTdHJv
a2VXaWR0aCA/IHN0cm9rZVdpZHRoIDogLTEpOworICAgIHJldHVybiB0cmFuc2Zvcm07Cit9CisK
K3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmRyYXcoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIFBhaW50SW5mbyBpbmZv
KHBhaW50SW5mbyk7CisgICAgaW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgaW5mby5hcHBseVRy
YW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoaW5mbywg
MCwgMCk7CisgICAgaW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK0FmZmluZVRyYW5zZm9y
bSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bWFya2VyQ29udGVudFRyYW5zZm9ybWF0aW9uKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgY29udGVudFRyYW5zZm9ybWF0aW9uLCBjb25zdCBGbG9hdFBv
aW50JiBvcmlnaW4sIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAoreworICAgIC8vIFRoZSAnb3Jp
Z2luJyBjb29yZGluYXRlIG1hcHMgdG8gU1ZHcyByZWZYL3JlZlksIGdpdmVuIGluIGNvb3JkaW5h
dGVzIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydCBlc3RhYmxpc2hlZCBieSB0aGUgbWFya2VyCisg
ICAgRmxvYXRQb2ludCBtYXBwZWRPcmlnaW4gPSB2aWV3cG9ydFRyYW5zZm9ybSgpLm1hcFBvaW50
KG9yaWdpbik7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtYXRpb24gPSBjb250ZW50
VHJhbnNmb3JtYXRpb247CisgICAgaWYgKHN0cm9rZVdpZHRoICE9IC0xKQorICAgICAgICB0cmFu
c2Zvcm1hdGlvbi5zY2FsZU5vblVuaWZvcm0oc3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRoKTsKKwor
ICAgIHRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZSgtbWFwcGVkT3JpZ2luLngoKSwgLW1hcHBlZE9y
aWdpbi55KCkpOworICAgIHJldHVybiB0cmFuc2Zvcm1hdGlvbjsKK30KKworQWZmaW5lVHJhbnNm
b3JtIFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjp2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0Cit7
CisgICAgU1ZHTWFya2VyRWxlbWVudCogbWFya2VyID0gc3RhdGljX2Nhc3Q8U1ZHTWFya2VyRWxl
bWVudCo+KG5vZGUoKSk7CisgICAgQVNTRVJUKG1hcmtlcik7CisKKyAgICByZXR1cm4gbWFya2Vy
LT52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKG1fdmlld3BvcnQud2lkdGgoKSwgbV92aWV3cG9ydC5o
ZWlnaHQoKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmNhbGNWaWV3cG9y
dCgpCit7CisgICAgaWYgKCFzZWxmTmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgU1ZHTWFya2VyRWxlbWVudCogbWFya2VyID0gc3RhdGljX2Nhc3Q8U1ZHTWFya2VyRWxlbWVu
dCo+KG5vZGUoKSk7CisgICAgQVNTRVJUKG1hcmtlcik7CisKKyAgICBmbG9hdCB3ID0gbWFya2Vy
LT5tYXJrZXJXaWR0aCgpLnZhbHVlKG1hcmtlcik7CisgICAgZmxvYXQgaCA9IG1hcmtlci0+bWFy
a2VySGVpZ2h0KCkudmFsdWUobWFya2VyKTsKKyAgICBtX3ZpZXdwb3J0ID0gRmxvYXRSZWN0KDAs
IDAsIHcsIGgpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmgJKHJldmlzaW9u
IDc1MjcyKQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5o
Ojc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcl9oCisjZGVmaW5lIFJlbmRlclNW
R1Jlc291cmNlTWFya2VyX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuaCIKKyNpbmNsdWRlICJTVkdNYXJrZXJFbGVtZW50LmgiCisjaW5jbHVkZSAi
U1ZHU3R5bGVkRWxlbWVudC5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CisKK2NsYXNzIFJlbmRlclNW
R1Jlc291cmNlTWFya2VyIDogcHVibGljIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsKK3B1
YmxpYzoKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcihTVkdNYXJrZXJFbGVtZW50Kik7Cisg
ICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIoKTsKKworICAgIHZpcnR1YWwgY29u
c3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlciI7IH0KKworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJv
b2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVD
bGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0g
dHJ1ZSk7CisKKyAgICB2b2lkIGRyYXcoUGFpbnRJbmZvJiwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jik7CisKKyAgICAvLyBDYWxjdWxhdGVzIG1hcmtlciBib3VuZGFyaWVzLCBtYXBwZWQgdG8gdGhl
IHRhcmdldCBlbGVtZW50J3MgY29vcmRpbmF0ZSBzcGFjZQorICAgIEZsb2F0UmVjdCBtYXJrZXJC
b3VuZGFyaWVzKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWFya2VyVHJhbnNmb3JtYXRpb24pIGNv
bnN0OworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5Vmlld3BvcnRDbGlwKFBhaW50SW5mbyYpOwor
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ZpZXdwb3J0
KCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpIGNvbnN0OworICAgIEFmZmluZVRyYW5zZm9ybSBtYXJrZXJUcmFuc2Zvcm1hdGlv
bihjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlLCBmbG9hdCBzdHJva2VXaWR0
aCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
LCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCkgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJl
bmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisKKyAgICBGbG9hdFBvaW50IHJl
ZmVyZW5jZVBvaW50KCkgY29uc3Q7CisgICAgZmxvYXQgYW5nbGUoKSBjb25zdDsKKyAgICBTVkdN
YXJrZXJFbGVtZW50OjpTVkdNYXJrZXJVbml0c1R5cGUgbWFya2VyVW5pdHMoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50OjpTVkdNYXJrZXJVbml0c1R5cGU+KHN0
YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQqPihub2RlKCkpLT5tYXJrZXJVbml0cygpKTsgfQor
CisgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3Qg
eyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KKyAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VU
eXBlIHNfcmVzb3VyY2VUeXBlOworCitwcml2YXRlOgorICAgIC8vIEdlbmVyYXRlcyBhIHRyYW5z
Zm9ybWF0aW9uIG1hdHJpeCB1c2FibGUgdG8gcmVuZGVyIG1hcmtlciBjb250ZW50LiBIYW5kbGVz
IHNjYWxpbmcgdGhlIG1hcmtlciBjb250ZW50CisgICAgLy8gYWNvcmRpbmcgdG8gU1ZHcyBtYXJr
ZXJVbml0cz0ic3Ryb2tlV2lkdGgiIGNvbmNlcHQsIHdoZW4gYSBzdHJva2VXaWR0aCB2YWx1ZSAh
PSAtMSBpcyBwYXNzZWQgaW4uCisgICAgQWZmaW5lVHJhbnNmb3JtIG1hcmtlckNvbnRlbnRUcmFu
c2Zvcm1hdGlvbihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwg
Y29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBzdHJva2VXaWR0aCA9IC0xKSBjb25zdDsK
KworICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0OworCisgICAg
bXV0YWJsZSBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOworICAgIEZs
b2F0UmVjdCBtX3ZpZXdwb3J0OworfTsKKworfQorI2VuZGlmCisKKyNlbmRpZgpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCShy
ZXZpc2lvbiA3NTI3MikJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwOjc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlTWFza2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykK
KyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIgorCisjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZH
RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKKyNpbmNsdWRlICJT
VkdNYXNrRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdVbml0VHlwZXMuaCIKKworI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIFJlbmRlclNWR1Jlc291cmNlTWFz
a2VyOjpzX3Jlc291cmNlVHlwZSA9IE1hc2tlclJlc291cmNlVHlwZTsKKworUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXI6OlJlbmRlclNWR1Jlc291cmNlTWFza2VyKFNWR01hc2tFbGVtZW50KiBub2Rl
KQorICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKK3sKK30KKworUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXI6On5SZW5kZXJTVkdSZXNvdXJjZU1hc2tlcigpCit7CisgICAgaWYg
KG1fbWFza2VyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlQWxsVmFs
dWVzKG1fbWFza2VyKTsKKyAgICBtX21hc2tlci5jbGVhcigpOworfQorCit2b2lkIFJlbmRlclNW
R1Jlc291cmNlTWFza2VyOjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0Zvcklu
dmFsaWRhdGlvbikKK3sKKyAgICBtX21hc2tDb250ZW50Qm91bmRhcmllcyA9IEZsb2F0UmVjdCgp
OworICAgIGlmICghbV9tYXNrZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIGRlbGV0ZUFsbFZhbHVl
cyhtX21hc2tlcik7CisgICAgICAgIG1fbWFza2VyLmNsZWFyKCk7CisgICAgfQorCisgICAgbWFy
a0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IExheW91dEFu
ZEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKK30KKwor
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRl
ck9iamVjdCogY2xpZW50LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCit7CisgICAgQVNTRVJU
KGNsaWVudCk7CisKKyAgICBpZiAobV9tYXNrZXIuY29udGFpbnMoY2xpZW50KSkKKyAgICAgICAg
ZGVsZXRlIG1fbWFza2VyLnRha2UoY2xpZW50KTsKKworICAgIG1hcmtDbGllbnRGb3JJbnZhbGlk
YXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRhdGlv
biA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOworfQorCitib29sIFJlbmRlclNWR1Jlc291cmNl
TWFza2VyOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSos
IEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkK
K3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisjaWZuZGVmIE5E
RUJVRworICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgPT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHJlc291cmNlTW9kZSk7CisjZW5kaWYKKworICAgIGlmICgh
bV9tYXNrZXIuY29udGFpbnMob2JqZWN0KSkKKyAgICAgICAgbV9tYXNrZXIuc2V0KG9iamVjdCwg
bmV3IE1hc2tlckRhdGEpOworCisgICAgTWFza2VyRGF0YSogbWFza2VyRGF0YSA9IG1fbWFza2Vy
LmdldChvYmplY3QpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwor
ICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1v
c3RTVkdDb29yZGluYXRlU3lzdGVtKG9iamVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0pOworCisgICAg
RmxvYXRSZWN0IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3Qo
b2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBGbG9hdFJlY3Qg
Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRB
YnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcihvYmplY3QsIGFic29sdXRlVGFyZ2V0UmVjdCk7
CisKKyAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSAmJiAhY2xhbXBlZEFic29sdXRlVGFy
Z2V0UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHTWFza0VsZW1lbnQqIG1hc2tFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpOworICAgICAgICBpZiAoIW1h
c2tFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghU1ZH
SW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVUYXJnZXRSZWN0LCBj
bGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UsIENvbG9yU3Bh
Y2VMaW5lYXJSR0IpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEdyYXBo
aWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Y29u
dGV4dCgpOworICAgICAgICBBU1NFUlQobWFza0ltYWdlQ29udGV4dCk7CisKKyAgICAgICAgLy8g
VGhlIHNhdmUvcmVzdG9yZSBwYWlyIGlzIG5lZWRlZCBmb3IgY2xpcFRvSW1hZ2VCdWZmZXIgLSBp
dCBkb2Vzbid0IHdvcmsgd2l0aG91dCBpdCBvbiBub24tQ2cgcGxhdGZvcm1zLgorICAgICAgICBt
YXNrSW1hZ2VDb250ZXh0LT5zYXZlKCk7CisgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5z
bGF0ZSgtY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC54KCksIC1jbGFtcGVkQWJzb2x1dGVUYXJn
ZXRSZWN0LnkoKSk7CisgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmNvbmNhdENUTShhYnNvbHV0
ZVRyYW5zZm9ybSk7CisKKyAgICAgICAgZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKG1hc2tlckRh
dGEsIG1hc2tFbGVtZW50LCBvYmplY3QpOworICAgIH0KKworICAgIGlmICghbWFza2VyRGF0YS0+
bWFza0ltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTVkdJbWFnZUJ1ZmZlclRv
b2xzOjpjbGlwVG9JbWFnZUJ1ZmZlcihjb250ZXh0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY2xhbXBl
ZEFic29sdXRlVGFyZ2V0UmVjdCwgbWFza2VyRGF0YS0+bWFza0ltYWdlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6ZHJhd0NvbnRlbnRJbnRv
TWFza0ltYWdlKE1hc2tlckRhdGEqIG1hc2tlckRhdGEsIGNvbnN0IFNWR01hc2tFbGVtZW50KiBt
YXNrRWxlbWVudCwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgR3JhcGhpY3NDb250ZXh0
KiBtYXNrSW1hZ2VDb250ZXh0ID0gbWFza2VyRGF0YS0+bWFza0ltYWdlLT5jb250ZXh0KCk7Cisg
ICAgQVNTRVJUKG1hc2tJbWFnZUNvbnRleHQpOworCisgICAgLy8gRXZlbnR1YWxseSBhZGp1c3Qg
dGhlIG1hc2sgaW1hZ2UgY29udGV4dCBhY2NvcmRpbmcgdG8gdGhlIHRhcmdldCBvYmplY3RCb3Vu
ZGluZ0JveC4KKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbjsK
KyAgICBpZiAobWFza0VsZW1lbnQtPm1hc2tDb250ZW50VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6
OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKKyAgICAgICAgRmxvYXRSZWN0IG9i
amVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOworICAgICAgICBt
YXNrQ29udGVudFRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54KCks
IG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CisgICAgICAgIG1hc2tDb250ZW50VHJhbnNmb3JtYXRp
b24uc2NhbGVOb25Vbmlmb3JtKG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJvdW5k
aW5nQm94LmhlaWdodCgpKTsKKyAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKG1h
c2tDb250ZW50VHJhbnNmb3JtYXRpb24pOworICAgIH0KKworICAgIC8vIERyYXcgdGhlIGNvbnRl
bnQgaW50byB0aGUgSW1hZ2VCdWZmZXIuCisgICAgZm9yIChOb2RlKiBub2RlID0gbWFza0VsZW1l
bnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAg
IGlmICghbm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihu
b2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgICAgIGlm
ICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNpYmlsaXR5
KCkgIT0gVklTSUJMRSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBTVkdJbWFnZUJ1
ZmZlclRvb2xzOjpyZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihtYXNrZXJEYXRhLT5tYXNrSW1h
Z2UuZ2V0KCksIHJlbmRlcmVyLCBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uKTsKKyAgICB9CisK
KyAgICBtYXNrSW1hZ2VDb250ZXh0LT5yZXN0b3JlKCk7CisKKyNpZiAhUExBVEZPUk0oQ0cpCisg
ICAgbWFza2VyRGF0YS0+bWFza0ltYWdlLT50cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2VE
ZXZpY2VSR0IsIENvbG9yU3BhY2VMaW5lYXJSR0IpOworI2VuZGlmCisKKyAgICAvLyBDcmVhdGUg
dGhlIGx1bWluYW5jZSBtYXNrLgorICAgIEludFJlY3QgbWFza0ltYWdlUmVjdChJbnRQb2ludCgp
LCBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UtPnNpemUoKSk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4g
c3JjUGl4ZWxBcnJheSA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKG1hc2tJbWFnZVJlY3QpOworCisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9
IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQg
PSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsK
KyAgICAgICAgdW5zaWduZWQgY2hhciBhID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsT2Zmc2V0
ICsgMyk7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1
bnNpZ25lZCBjaGFyIHIgPSBzcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxPZmZzZXQpOworICAgICAg
ICB1bnNpZ25lZCBjaGFyIGcgPSBzcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxPZmZzZXQgKyAxKTsK
KyAgICAgICAgdW5zaWduZWQgY2hhciBiID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsT2Zmc2V0
ICsgMik7CisKKyAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQg
KyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7CisgICAgICAgIHNyY1BpeGVsQXJy
YXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgIH0KKworICAgIG1hc2tlckRhdGEt
Pm1hc2tJbWFnZS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY1BpeGVsQXJyYXkuZ2V0KCks
IG1hc2tJbWFnZVJlY3Quc2l6ZSgpLCBtYXNrSW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKK30KKwor
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6Y2FsY3VsYXRlTWFza0NvbnRlbnRSZXBhaW50
UmVjdCgpCit7CisgICAgZm9yIChOb2RlKiBjaGlsZE5vZGUgPSBub2RlKCktPmZpcnN0Q2hpbGQo
KTsgY2hpbGROb2RlOyBjaGlsZE5vZGUgPSBjaGlsZE5vZGUtPm5leHRTaWJsaW5nKCkpIHsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKKyAg
ICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxl
KCk7CisgICAgICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0
eWxlLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgbV9tYXNrQ29udGVudEJvdW5kYXJpZXMudW5pdGUocmVuZGVyZXItPmxvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpKSk7CisgICAgfQorfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6
OnJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgU1ZHTWFz
a0VsZW1lbnQqIG1hc2tFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2Rl
KCkpOworICAgIEFTU0VSVChtYXNrRWxlbWVudCk7CisKKyAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91
bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgRmxvYXRSZWN0IG1h
c2tCb3VuZGFyaWVzID0gbWFza0VsZW1lbnQtPm1hc2tCb3VuZGluZ0JveChvYmplY3RCb3VuZGlu
Z0JveCk7CisKKyAgICAvLyBSZXNvdXJjZSB3YXMgbm90IGxheW91dGVkIHlldC4gR2l2ZSBiYWNr
IGNsaXBwaW5nIHJlY3Qgb2YgdGhlIG1hc2suCisgICAgaWYgKHNlbGZOZWVkc0xheW91dCgpKQor
ICAgICAgICByZXR1cm4gbWFza0JvdW5kYXJpZXM7CisKKyAgICBpZiAobV9tYXNrQ29udGVudEJv
dW5kYXJpZXMuaXNFbXB0eSgpKQorICAgICAgICBjYWxjdWxhdGVNYXNrQ29udGVudFJlcGFpbnRS
ZWN0KCk7CisKKyAgICBGbG9hdFJlY3QgbWFza1JlY3QgPSBtX21hc2tDb250ZW50Qm91bmRhcmll
czsKKyAgICBpZiAobWFza0VsZW1lbnQtPm1hc2tDb250ZW50VW5pdHMoKSA9PSBTVkdVbml0VHlw
ZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKKyAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybTsKKyAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShvYmplY3RCb3Vu
ZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CisgICAgICAgIHRyYW5zZm9ybS5z
Y2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdC
b3guaGVpZ2h0KCkpOworICAgICAgICBtYXNrUmVjdCA9IHRyYW5zZm9ybS5tYXBSZWN0KG1hc2tS
ZWN0KTsKKyAgICB9CisKKyAgICBtYXNrUmVjdC5pbnRlcnNlY3QobWFza0JvdW5kYXJpZXMpOwor
ICAgIHJldHVybiBtYXNrUmVjdDsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5o
CShyZXZpc2lvbiA3NTI3MikJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIuaDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZU1hc2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXJfaAorI2RlZmlu
ZSBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcl9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiU1ZHTWFza0VsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdVbml0VHlwZXMuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBNYXNrZXJEYXRh
IHsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZTsKK307CisKK2NsYXNzIFJlbmRl
clNWR1Jlc291cmNlTWFza2VyIDogcHVibGljIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsK
K3B1YmxpYzoKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcihTVkdNYXNrRWxlbWVudCopOwor
ICAgIHZpcnR1YWwgflJlbmRlclNWR1Jlc291cmNlTWFza2VyKCk7CisKKyAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShi
b29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
Q2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9
IHRydWUpOworICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJl
bmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9k
ZSk7CisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmpl
Y3QqKTsKKworICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgbWFza1VuaXRzKCkgY29uc3Qg
eyByZXR1cm4gdG9Vbml0VHlwZShzdGF0aWNfY2FzdDxTVkdNYXNrRWxlbWVudCo+KG5vZGUoKSkt
Pm1hc2tVbml0cygpKTsgfQorICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgbWFza0NvbnRl
bnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIHRvVW5pdFR5cGUoc3RhdGljX2Nhc3Q8U1ZHTWFza0Vs
ZW1lbnQqPihub2RlKCkpLT5tYXNrQ29udGVudFVuaXRzKCkpOyB9CisKKyAgICB2aXJ0dWFsIFJl
bmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCB7IHJldHVybiBzX3Jlc291
cmNlVHlwZTsgfQorICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgc19yZXNvdXJjZVR5
cGU7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkcmF3Q29udGVudEludG9NYXNrSW1hZ2UoTWFza2Vy
RGF0YSosIGNvbnN0IFNWR01hc2tFbGVtZW50KiwgUmVuZGVyT2JqZWN0Kik7CisgICAgdm9pZCBj
YWxjdWxhdGVNYXNrQ29udGVudFJlcGFpbnRSZWN0KCk7CisKKyAgICBGbG9hdFJlY3QgbV9tYXNr
Q29udGVudEJvdW5kYXJpZXM7CisgICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBNYXNrZXJEYXRh
Kj4gbV9tYXNrZXI7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAkocmV2aXNp
b24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5jcHA6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgiCisKKyNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuQXR0
cmlidXRlcy5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJTVkdJbWFn
ZUJ1ZmZlclRvb2xzLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm46OnNfcmVzb3VyY2VUeXBlID0gUGF0dGVyblJlc291cmNlVHlwZTsKKworUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuOjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4oU1ZHUGF0dGVybkVsZW1l
bnQqIG5vZGUpCisgICAgOiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcihub2RlKQorICAgICwg
bV9zaG91bGRDb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXModHJ1ZSkKK3sKK30KKworUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuOjp+UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuKCkKK3sKKyAgICBpZiAo
bV9wYXR0ZXJuLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlQWxsVmFs
dWVzKG1fcGF0dGVybik7CisgICAgbV9wYXR0ZXJuLmNsZWFyKCk7Cit9CisKK3ZvaWQgUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuOjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0Zv
ckludmFsaWRhdGlvbikKK3sKKyAgICBpZiAoIW1fcGF0dGVybi5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgZGVsZXRlQWxsVmFsdWVzKG1fcGF0dGVybik7CisgICAgICAgIG1fcGF0dGVybi5jbGVhcigp
OworICAgIH0KKworICAgIG1fc2hvdWxkQ29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzID0gdHJ1ZTsK
KyAgICBtYXJrQWxsQ2xpZW50c0ZvckludmFsaWRhdGlvbihtYXJrRm9ySW52YWxpZGF0aW9uID8g
UmVwYWludEludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOworfQorCit2b2lk
IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9i
amVjdCogY2xpZW50LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCit7CisgICAgQVNTRVJUKGNs
aWVudCk7CisKKyAgICBpZiAobV9wYXR0ZXJuLmNvbnRhaW5zKGNsaWVudCkpCisgICAgICAgIGRl
bGV0ZSBtX3BhdHRlcm4udGFrZShjbGllbnQpOworCisgICAgbWFya0NsaWVudEZvckludmFsaWRh
dGlvbihjbGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBSZXBhaW50SW52YWxpZGF0aW9uIDog
UGFyZW50T25seUludmFsaWRhdGlvbik7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSogc3R5
bGUsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9k
ZSkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQoc3R5bGUpOworICAgIEFTU0VS
VChjb250ZXh0KTsKKyAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9k
ZSk7CisKKyAgICAvLyBCZSBzdXJlIHRvIHN5bmNocm9uaXplIGFsbCBTVkcgcHJvcGVydGllcyBv
biB0aGUgcGF0dGVybkVsZW1lbnQgX2JlZm9yZV8gcHJvY2Vzc2luZyBhbnkgZnVydGhlci4KKyAg
ICAvLyBPdGhlcndoaXNlIHRoZSBjYWxsIHRvIGNvbGxlY3RQYXR0ZXJuQXR0cmlidXRlcygpIGJl
bG93LCBtYXkgY2F1c2UgdGhlIFNWRyBET00gcHJvcGVydHkKKyAgICAvLyBzeW5jaHJvbml6YXRp
b24gdG8ga2ljayBpbiwgd2hpY2ggY2F1c2VzIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoKSB0
byBiZSBjYWxsZWQsIHdoaWNoIGluIHR1cm4gZGVsZXRlcyBvdXIKKyAgICAvLyBQYXR0ZXJuRGF0
YSBvYmplY3QhIExlYXZpbmcgb3V0IHRoZSBsaW5lIGJlbG93IHdpbGwgY2F1c2Ugc3ZnL2R5bmFt
aWMtdXBkYXRlcy9TVkdQYXR0ZXJuRWxlbWVudC1zdmdkb20qIHRvIGNyYXNoLgorICAgIFNWR1Bh
dHRlcm5FbGVtZW50KiBwYXR0ZXJuRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1BhdHRlcm5FbGVt
ZW50Kj4obm9kZSgpKTsKKyAgICBpZiAoIXBhdHRlcm5FbGVtZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAobV9zaG91bGRDb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMpIHsKKyAg
ICAgICAgcGF0dGVybkVsZW1lbnQtPnVwZGF0ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGFueVFOYW1l
KCkpOworCisgICAgICAgIG1fYXR0cmlidXRlcyA9IFBhdHRlcm5BdHRyaWJ1dGVzKCk7CisgICAg
ICAgIHBhdHRlcm5FbGVtZW50LT5jb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMobV9hdHRyaWJ1dGVz
KTsKKyAgICAgICAgbV9zaG91bGRDb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMgPSBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBTcGVjOiBXaGVuIHRoZSBnZW9tZXRyeSBvZiB0aGUgYXBwbGljYWJsZSBl
bGVtZW50IGhhcyBubyB3aWR0aCBvciBoZWlnaHQgYW5kIG9iamVjdEJvdW5kaW5nQm94IGlzIHNw
ZWNpZmllZCwKKyAgICAvLyB0aGVuIHRoZSBnaXZlbiBlZmZlY3QgKGUuZy4gYSBncmFkaWVudCBv
ciBhIGZpbHRlcikgd2lsbCBiZSBpZ25vcmVkLgorICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGlu
Z0JveCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBpZiAobV9hdHRyaWJ1dGVz
LmJvdW5kaW5nQm94TW9kZSgpICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3BhdHRlcm4uY29udGFpbnMob2JqZWN0KSkK
KyAgICAgICAgbV9wYXR0ZXJuLnNldChvYmplY3QsIG5ldyBQYXR0ZXJuRGF0YSk7CisKKyAgICBQ
YXR0ZXJuRGF0YSogcGF0dGVybkRhdGEgPSBtX3BhdHRlcm4uZ2V0KG9iamVjdCk7CisgICAgaWYg
KCFwYXR0ZXJuRGF0YS0+cGF0dGVybikgeworICAgICAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZXRl
cm1pbmUgdGhlIHBhdHRlcm4gY29udGVudCBlbGVtZW50IHJvb3QsIHN0b3AgaGVyZS4KKyAgICAg
ICAgaWYgKCFtX2F0dHJpYnV0ZXMucGF0dGVybkNvbnRlbnRFbGVtZW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gQ29tcHV0ZSBhbGwgbmVjZXNzYXJ5IHRyYW5z
Zm9ybWF0aW9ucyB0byBidWlsZCB0aGUgdGlsZSBpbWFnZSAmIHRoZSBwYXR0ZXJuLgorICAgICAg
ICBGbG9hdFJlY3QgdGlsZUJvdW5kYXJpZXM7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0aWxl
SW1hZ2VUcmFuc2Zvcm07CisgICAgICAgIGlmICghYnVpbGRUaWxlSW1hZ2VUcmFuc2Zvcm0ob2Jq
ZWN0LCBtX2F0dHJpYnV0ZXMsIHBhdHRlcm5FbGVtZW50LCB0aWxlQm91bmRhcmllcywgdGlsZUlt
YWdlVHJhbnNmb3JtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBBZmZp
bmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm07CisgICAgICAgIFNWR0ltYWdlQnVmZmVyVG9v
bHM6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVt
KG9iamVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0pOworCisgICAgICAgIEZsb2F0UmVjdCBhYnNvbHV0
ZVRpbGVCb3VuZGFyaWVzID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdCh0aWxlQm91bmRhcmll
cyk7CisKKyAgICAgICAgLy8gQnVpbGQgdGlsZSBpbWFnZS4KKyAgICAgICAgT3duUHRyPEltYWdl
QnVmZmVyPiB0aWxlSW1hZ2UgPSBjcmVhdGVUaWxlSW1hZ2Uob2JqZWN0LCBtX2F0dHJpYnV0ZXMs
IHRpbGVCb3VuZGFyaWVzLCBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCB0aWxlSW1hZ2VUcmFuc2Zv
cm0pOworICAgICAgICBpZiAoIXRpbGVJbWFnZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcGllZEltYWdlID0gdGlsZUltYWdlLT5jb3B5SW1h
Z2UoKTsKKyAgICAgICAgaWYgKCFjb3BpZWRJbWFnZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAvLyBCdWlsZCBwYXR0ZXJuLgorICAgICAgICBwYXR0ZXJuRGF0YS0+cGF0
dGVybiA9IFBhdHRlcm46OmNyZWF0ZShjb3BpZWRJbWFnZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAg
IGlmICghcGF0dGVybkRhdGEtPnBhdHRlcm4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgLy8gQ29tcHV0ZSBwYXR0ZXJuIHNwYWNlIHRyYW5zZm9ybWF0aW9uLgorICAgICAg
ICBwYXR0ZXJuRGF0YS0+dHJhbnNmb3JtLnRyYW5zbGF0ZSh0aWxlQm91bmRhcmllcy54KCksIHRp
bGVCb3VuZGFyaWVzLnkoKSk7CisgICAgICAgIHBhdHRlcm5EYXRhLT50cmFuc2Zvcm0uc2NhbGUo
dGlsZUJvdW5kYXJpZXMud2lkdGgoKSAvIGFic29sdXRlVGlsZUJvdW5kYXJpZXMud2lkdGgoKSwg
dGlsZUJvdW5kYXJpZXMuaGVpZ2h0KCkgLyBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLmhlaWdodCgp
KTsKKworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybSA9IG1fYXR0cmli
dXRlcy5wYXR0ZXJuVHJhbnNmb3JtKCk7CisgICAgICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5p
c0lkZW50aXR5KCkpCisgICAgICAgICAgICBwYXR0ZXJuRGF0YS0+dHJhbnNmb3JtLm11bHRpcGx5
KHBhdHRlcm5UcmFuc2Zvcm0pOworCisgICAgICAgIHBhdHRlcm5EYXRhLT5wYXR0ZXJuLT5zZXRQ
YXR0ZXJuU3BhY2VUcmFuc2Zvcm0ocGF0dGVybkRhdGEtPnRyYW5zZm9ybSk7CisgICAgfQorCisg
ICAgLy8gRHJhdyBwYXR0ZXJuCisgICAgY29udGV4dC0+c2F2ZSgpOworCisgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CisgICAgQVNTRVJUKHN2
Z1N0eWxlKTsKKworICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsKKyAg
ICAgICAgY29udGV4dC0+c2V0QWxwaGEoc3ZnU3R5bGUtPmZpbGxPcGFjaXR5KCkpOworICAgICAg
ICBjb250ZXh0LT5zZXRGaWxsUGF0dGVybihwYXR0ZXJuRGF0YS0+cGF0dGVybik7CisgICAgICAg
IGNvbnRleHQtPnNldEZpbGxSdWxlKHN2Z1N0eWxlLT5maWxsUnVsZSgpKTsKKyAgICB9IGVsc2Ug
aWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKSB7CisgICAgICAgIGlmIChzdmdT
dHlsZS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFKQorICAgICAgICAg
ICAgcGF0dGVybkRhdGEtPnBhdHRlcm4tPnNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybSh0cmFuc2Zv
cm1Pbk5vblNjYWxpbmdTdHJva2Uob2JqZWN0LCBwYXR0ZXJuRGF0YS0+dHJhbnNmb3JtKSk7Cisg
ICAgICAgIGNvbnRleHQtPnNldEFscGhhKHN2Z1N0eWxlLT5zdHJva2VPcGFjaXR5KCkpOworICAg
ICAgICBjb250ZXh0LT5zZXRTdHJva2VQYXR0ZXJuKHBhdHRlcm5EYXRhLT5wYXR0ZXJuKTsKKyAg
ICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0
LCBzdHlsZSwgb2JqZWN0KTsKKyAgICB9CisKKyAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlU
b1RleHRNb2RlKSB7CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUp
IHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShUZXh0TW9kZUZpbGwp
OworCisjaWYgUExBVEZPUk0oQ0cpCisgICAgICAgICAgICBjb250ZXh0LT5hcHBseUZpbGxQYXR0
ZXJuKCk7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRv
U3Ryb2tlTW9kZSkgeworICAgICAgICAgICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKFRl
eHRNb2RlU3Ryb2tlKTsKKworI2lmIFBMQVRGT1JNKENHKQorICAgICAgICAgICAgY29udGV4dC0+
YXBwbHlTdHJva2VQYXR0ZXJuKCk7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWdu
ZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQoreworICAgIEFTU0VSVChj
b250ZXh0KTsKKyAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7
CisKKyAgICBpZiAocGF0aCAmJiAhKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsK
KyAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKKyAgICAgICAgICAg
IGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKKyAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2Rl
ICYgQXBwbHlUb1N0cm9rZU1vZGUpCisgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpw
YXRoKTsKKyAgICB9CisKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgRmxvYXRSZWN0IGNhbGN1bGF0ZVBhdHRlcm5Cb3VuZGFyaWVzKGNvbnN0IFBhdHRlcm5BdHRy
aWJ1dGVzJiBhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNWR1Bh
dHRlcm5FbGVtZW50KiBwYXR0ZXJuRWxlbWVudCkKK3sKKyAgICBBU1NFUlQocGF0dGVybkVsZW1l
bnQpOworCisgICAgaWYgKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpCisgICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoYXR0cmlidXRlcy54KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVj
dEJvdW5kaW5nQm94LndpZHRoKCkgKyBvYmplY3RCb3VuZGluZ0JveC54KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlcy55KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVj
dEJvdW5kaW5nQm94LmhlaWdodCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMud2lkdGgoKS52YWx1ZUFzUGVyY2VudGFnZSgpICog
b2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGVzLmhlaWdodCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC5o
ZWlnaHQoKSk7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0KGF0dHJpYnV0ZXMueCgpLnZhbHVlKHBh
dHRlcm5FbGVtZW50KSwKKyAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMueSgpLnZhbHVl
KHBhdHRlcm5FbGVtZW50KSwKKyAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMud2lkdGgo
KS52YWx1ZShwYXR0ZXJuRWxlbWVudCksCisgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVz
LmhlaWdodCgpLnZhbHVlKHBhdHRlcm5FbGVtZW50KSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuOjpidWlsZFRpbGVJbWFnZVRyYW5zZm9ybShSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNWR1BhdHRlcm5F
bGVtZW50KiBwYXR0ZXJuRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QmIHBhdHRlcm5Cb3VuZGFyaWVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdAoreworICAgIEFTU0VSVChyZW5k
ZXJlcik7CisgICAgQVNTRVJUKHBhdHRlcm5FbGVtZW50KTsKKworICAgIEZsb2F0UmVjdCBvYmpl
Y3RCb3VuZGluZ0JveCA9IHJlbmRlcmVyLT5vYmplY3RCb3VuZGluZ0JveCgpOworICAgIHBhdHRl
cm5Cb3VuZGFyaWVzID0gY2FsY3VsYXRlUGF0dGVybkJvdW5kYXJpZXMoYXR0cmlidXRlcywgb2Jq
ZWN0Qm91bmRpbmdCb3gsIHBhdHRlcm5FbGVtZW50KTsgCisgICAgaWYgKHBhdHRlcm5Cb3VuZGFy
aWVzLndpZHRoKCkgPD0gMCB8fCBwYXR0ZXJuQm91bmRhcmllcy5oZWlnaHQoKSA8PSAwKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdmlld0JveENUTSA9IHBh
dHRlcm5FbGVtZW50LT52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHBhdHRlcm5FbGVtZW50LT52aWV3
Qm94KCksIHBhdHRlcm5FbGVtZW50LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCksIHBhdHRlcm5Cb3Vu
ZGFyaWVzLndpZHRoKCksIHBhdHRlcm5Cb3VuZGFyaWVzLmhlaWdodCgpKTsKKworICAgIC8vIEFw
cGx5IHZpZXdCb3gvb2JqZWN0Qm91bmRpbmdCb3ggdHJhbnNmb3JtYXRpb25zLgorICAgIGlmICgh
dmlld0JveENUTS5pc0lkZW50aXR5KCkpCisgICAgICAgIHRpbGVJbWFnZVRyYW5zZm9ybSA9IHZp
ZXdCb3hDVE07CisgICAgZWxzZSBpZiAoYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGVDb250ZW50
KCkpIHsKKyAgICAgICAgdGlsZUltYWdlVHJhbnNmb3JtLnRyYW5zbGF0ZShvYmplY3RCb3VuZGlu
Z0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CisgICAgICAgIHRpbGVJbWFnZVRyYW5z
Zm9ybS5zY2FsZShvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpLCBvYmplY3RCb3VuZGluZ0JveC5o
ZWlnaHQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NPd25QdHI8SW1h
Z2VCdWZmZXI+IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6Y3JlYXRlVGlsZUltYWdlKFJlbmRl
ck9iamVjdCogb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmIGF0dHJp
YnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHRpbGVCb3VuZGFyaWVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0aWxlSW1hZ2VUcmFuc2Zvcm0pIGNvbnN0Cit7CisgICAgQVNT
RVJUKG9iamVjdCk7CisKKyAgICAvLyBDbGFtcCB0aWxlIGltYWdlIHNpemUgYWdhaW5zdCBTVkcg
dmlld3BvcnQgc2l6ZSwgYXMgbGFzdCByZXNvcnQsIHRvIGF2b2lkIGFsbG9jYXRpbmcgaHVnZSBp
bWFnZSBidWZmZXJzLgorICAgIEZsb2F0UmVjdCBjb250ZW50Qm94UmVjdCA9IFNWR1JlbmRlclN1
cHBvcnQ6OmZpbmRUcmVlUm9vdE9iamVjdChvYmplY3QpLT5jb250ZW50Qm94UmVjdCgpOworCisg
ICAgRmxvYXRSZWN0IGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzID0gYWJzb2x1dGVUaWxl
Qm91bmRhcmllczsKKyAgICBpZiAoY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMud2lkdGgo
KSA+IGNvbnRlbnRCb3hSZWN0LndpZHRoKCkpCisgICAgICAgIGNsYW1wZWRBYnNvbHV0ZVRpbGVC
b3VuZGFyaWVzLnNldFdpZHRoKGNvbnRlbnRCb3hSZWN0LndpZHRoKCkpOworCisgICAgaWYgKGNs
YW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLmhlaWdodCgpID4gY29udGVudEJveFJlY3QuaGVp
Z2h0KCkpCisgICAgICAgIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLnNldEhlaWdodChj
b250ZW50Qm94UmVjdC5oZWlnaHQoKSk7CisKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJ
bWFnZTsKKworICAgIGlmICghU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIo
YWJzb2x1dGVUaWxlQm91bmRhcmllcywgY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMsIHRp
bGVJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQikpCisgICAgICAgIHJldHVybiBQYXNzT3duUHRy
PEltYWdlQnVmZmVyPigpOworCisgICAgR3JhcGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250ZXh0
ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7CisgICAgQVNTRVJUKHRpbGVJbWFnZUNvbnRleHQpOwor
CisgICAgLy8gVGhlIGltYWdlIGJ1ZmZlciByZXByZXNlbnRzIHRoZSBmaW5hbCByZW5kZXJlZCBz
aXplLCBzbyB0aGUgY29udGVudCBoYXMgdG8gYmUgc2NhbGVkICh0byBhdm9pZCBwaXhlbGF0aW9u
KS4KKyAgICB0aWxlSW1hZ2VDb250ZXh0LT5zY2FsZShGbG9hdFNpemUoYWJzb2x1dGVUaWxlQm91
bmRhcmllcy53aWR0aCgpIC8gdGlsZUJvdW5kYXJpZXMud2lkdGgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVUaWxlQm91bmRhcmllcy5oZWlnaHQoKSAv
IHRpbGVCb3VuZGFyaWVzLmhlaWdodCgpKSk7CisKKyAgICAvLyBBcHBseSB0aWxlIGltYWdlIHRy
YW5zZm9ybWF0aW9ucy4KKyAgICBpZiAoIXRpbGVJbWFnZVRyYW5zZm9ybS5pc0lkZW50aXR5KCkp
CisgICAgICAgIHRpbGVJbWFnZUNvbnRleHQtPmNvbmNhdENUTSh0aWxlSW1hZ2VUcmFuc2Zvcm0p
OworCisgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKKworICAgIC8v
IERyYXcgdGhlIGNvbnRlbnQgaW50byB0aGUgSW1hZ2VCdWZmZXIuCisgICAgZm9yIChOb2RlKiBu
b2RlID0gYXR0cmlidXRlcy5wYXR0ZXJuQ29udGVudEVsZW1lbnQoKS0+Zmlyc3RDaGlsZCgpOyBu
b2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoIW5vZGUtPmlz
U1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSktPmlzU3R5bGVk
KCkgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
U1ZHSW1hZ2VCdWZmZXJUb29sczo6cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIodGlsZUltYWdl
LmdldCgpLCBub2RlLT5yZW5kZXJlcigpLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOworICAgIH0K
KworICAgIHJldHVybiB0aWxlSW1hZ2UucmVsZWFzZSgpOworfQorCit9CisKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
aAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlUGF0dGVybi5oOjc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybl9oCisj
ZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybl9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlBhdHRl
cm5BdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIK
KyNpbmNsdWRlICJTVkdQYXR0ZXJuRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5o
IgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFBhdHRlcm5EYXRhIHsKKyAgICBSZWZQdHI8
UGF0dGVybj4gcGF0dGVybjsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworfTsKKwor
Y2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuIDogcHVibGljIFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4oU1ZHUGF0
dGVybkVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4oKTsK
KworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4iOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxs
Q2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFy
a0ZvckludmFsaWRhdGlvbiA9IHRydWUpOworCisgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWdu
ZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291
cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91
bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKworICAgIHZp
cnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IHNfcmVzb3VyY2VUeXBlOyB9CisgICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlVHlwZSBzX3Jl
c291cmNlVHlwZTsKKworcHJpdmF0ZToKKyAgICBib29sIGJ1aWxkVGlsZUltYWdlVHJhbnNmb3Jt
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiwgY29uc3QgU1ZHUGF0dGVy
bkVsZW1lbnQqLCBGbG9hdFJlY3QmIHBhdHRlcm5Cb3VuZGFyaWVzLCBBZmZpbmVUcmFuc2Zvcm0m
IHRpbGVJbWFnZVRyYW5zZm9ybSkgY29uc3Q7CisKKyAgICBQYXNzT3duUHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVUaWxlSW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMm
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVCb3VuZGFyaWVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGlsZUJvdW5k
YXJpZXMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdDsK
KworICAgIGJvb2wgbV9zaG91bGRDb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMgOiAxOworICAgIFBh
dHRlcm5BdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKyAgICBIYXNoTWFwPFJlbmRlck9iamVjdCos
IFBhdHRlcm5EYXRhKj4gbV9wYXR0ZXJuOworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZVJhZGlhbEdyYWRpZW50LmNwcAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwOjc1MjcyKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCIKKworI2luY2x1ZGUgIlJhZGlhbEdyYWRpZW50QXR0
cmlidXRlcy5oIgorI2luY2x1ZGUgIlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJj
ZVJhZGlhbEdyYWRpZW50OjpzX3Jlc291cmNlVHlwZSA9IFJhZGlhbEdyYWRpZW50UmVzb3VyY2VU
eXBlOworCitSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50OjpSZW5kZXJTVkdSZXNvdXJj
ZVJhZGlhbEdyYWRpZW50KFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCogbm9kZSkKKyAgICA6IFJl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQobm9kZSkKK3sKK30KKworUmVuZGVyU1ZHUmVzb3VyY2VS
YWRpYWxHcmFkaWVudDo6flJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQoKQoreworfQor
Cit2b2lkIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQ6OmNvbGxlY3RHcmFkaWVudEF0
dHJpYnV0ZXMoU1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQpCit7CisgICAgbV9h
dHRyaWJ1dGVzID0gUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzKCk7CisgICAgc3RhdGljX2Nhc3Q8
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KS0+Y29sbGVjdEdyYWRp
ZW50QXR0cmlidXRlcyhtX2F0dHJpYnV0ZXMpOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNl
UmFkaWFsR3JhZGllbnQ6OmJ1aWxkR3JhZGllbnQoR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEs
IFNWR0dyYWRpZW50RWxlbWVudCogZ3JhZGllbnRFbGVtZW50KSBjb25zdAoreworICAgIFNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudCogcmFkaWFsR3JhZGllbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KTsKKworICAgIC8vIERl
dGVybWluZSBncmFkaWVudCBmb2NhbC9jZW50ZXIgcG9pbnRzIGFuZCByYWRpdXMKKyAgICBGbG9h
dFBvaW50IGZvY2FsUG9pbnQ7CisgICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludDsKKyAgICBmbG9h
dCByYWRpdXM7CisgICAgcmFkaWFsR3JhZGllbnRFbGVtZW50LT5jYWxjdWxhdGVGb2NhbENlbnRl
clBvaW50c0FuZFJhZGl1cyhtX2F0dHJpYnV0ZXMsIGZvY2FsUG9pbnQsIGNlbnRlclBvaW50LCBy
YWRpdXMpOworCisgICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUo
Zm9jYWxQb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAvLyBTVkcgZG9lcyBub3Qgc3VwcG9ydCBhICJmb2N1cyByYWRpdXMiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyUG9pbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzKTsKKworICAgIGdy
YWRpZW50RGF0YS0+Z3JhZGllbnQtPnNldFNwcmVhZE1ldGhvZChtX2F0dHJpYnV0ZXMuc3ByZWFk
TWV0aG9kKCkpOworCisgICAgLy8gQWRkIHN0b3BzCisgICAgYWRkU3RvcHMoZ3JhZGllbnREYXRh
LCBtX2F0dHJpYnV0ZXMuc3RvcHMoKSk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50LmgJKHJldmlzaW9uIDc1MjcyKQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZVJhZGlhbEdyYWRpZW50Lmg6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1Jl
c291cmNlUmFkaWFsR3JhZGllbnRfaAorI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdy
YWRpZW50X2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmFkaWFsR3JhZGllbnRBdHRy
aWJ1dGVzLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDsKKworY2xh
c3MgUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudCA6IHB1YmxpYyBSZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50IHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50KFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1Jl
c291cmNlUmFkaWFsR3JhZGllbnQoKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Ijsg
fQorCisgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29u
c3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KKyAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3Vy
Y2VUeXBlIHNfcmVzb3VyY2VUeXBlOworCisgICAgdmlydHVhbCBib29sIGJvdW5kaW5nQm94TW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKTsgfQorICAg
IHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVHcmFkaWVudFRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkgeyB0cmFuc2Zvcm0gPSBtX2F0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0o
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKFNWR0dyYWRp
ZW50RWxlbWVudCopOworICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KEdyYWRpZW50RGF0
YSosIFNWR0dyYWRpZW50RWxlbWVudCopIGNvbnN0OworCitwcml2YXRlOgorICAgIFJhZGlhbEdy
YWRpZW50QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmNwcAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHA6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclN0
eWxlLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorCisjaWYgUExBVEZPUk0oU0tJ
QSkKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZW5kZXJTVkdSZXNvdXJjZVR5cGUgUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yOjpzX3Jlc291cmNlVHlwZSA9IFNvbGlkQ29sb3JSZXNvdXJjZVR5cGU7CisKK1JlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvcjo6UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKCkKK3sK
K30KKworUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjp+UmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yKCkKK3sKK30KKworYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OmFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiBzdHlsZSwgR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKQoreworICAg
IC8vIFdlIGFyZSBOT1QgYWxsb3dlZCB0byBBU1NFUlQob2JqZWN0KSBoZXJlLCB1bmxpa2UgYWxs
IG90aGVyIHJlc291cmNlcy4KKyAgICAvLyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IgaXMg
dGhlIG9ubHkgcmVzb3VyY2Ugd2hpY2ggbWF5IGJlIHVzZWQgZnJvbSBIVE1MLCB3aGVuIHJlbmRl
cmluZworICAgIC8vIFNWRyBGb250cyBmb3IgYSBIVE1MIGRvY3VtZW50LiBUaGlzIHdpbGwgYmUg
aW5kaWNhdGVkIGJ5IGEgbnVsbCBSZW5kZXJPYmplY3QgcG9pbnRlci4KKyAgICBBU1NFUlQoY29u
dGV4dCk7CisgICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwor
CisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUgPyBzdHlsZS0+c3Zn
U3R5bGUoKSA6IDA7CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gc3R5bGUgPyBzdHlsZS0+
Y29sb3JTcGFjZSgpIDogQ29sb3JTcGFjZURldmljZVJHQjsKKworICAgIGlmIChyZXNvdXJjZU1v
ZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsKKyAgICAgICAgY29udGV4dC0+c2V0QWxwaGEoc3ZnU3R5
bGUgPyBzdmdTdHlsZS0+ZmlsbE9wYWNpdHkoKSA6IDEuMGYpOworICAgICAgICBjb250ZXh0LT5z
ZXRGaWxsQ29sb3IobV9jb2xvciwgY29sb3JTcGFjZSk7CisgICAgICAgIGNvbnRleHQtPnNldEZp
bGxSdWxlKHN2Z1N0eWxlID8gc3ZnU3R5bGUtPmZpbGxSdWxlKCkgOiBSVUxFX05PTlpFUk8pOwor
CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpCisgICAgICAgICAg
ICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoVGV4dE1vZGVGaWxsKTsKKyAgICB9IGVsc2Ug
aWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKSB7CisgICAgICAgIGNvbnRleHQt
PnNldEFscGhhKHN2Z1N0eWxlID8gc3ZnU3R5bGUtPnN0cm9rZU9wYWNpdHkoKSA6IDEuMGYpOwor
ICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihtX2NvbG9yLCBjb2xvclNwYWNlKTsKKwor
ICAgICAgICBpZiAoc3R5bGUpCisgICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0
cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOworCisgICAgICAgIGlm
IChyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpCisgICAgICAgICAgICBjb250ZXh0LT5z
ZXRUZXh0RHJhd2luZ01vZGUoVGV4dE1vZGVTdHJva2UpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQg
c2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQoreworICAgIEFTU0VSVChjb250
ZXh0KTsKKyAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CisK
KyAgICBpZiAocGF0aCAmJiAhKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKKyAg
ICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKKyAgICAgICAgICAgIGNv
bnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKKyAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYg
QXBwbHlUb1N0cm9rZU1vZGUpCisgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRo
KTsKKyAgICB9Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCShyZXZpc2lvbiA3NTI3MikJ
KGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmg6NzUy
NzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yX2gKKyNkZWZpbmUgUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiQ29sb3Iu
aCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlU29saWRD
b2xvciA6IHB1YmxpYyBSZW5kZXJTVkdSZXNvdXJjZSB7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yKCk7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShi
b29sID0gdHJ1ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShS
ZW5kZXJPYmplY3QqLCBib29sID0gdHJ1ZSkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlS
ZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1
bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlS
ZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQg
cmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3Vy
Y2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorCisg
ICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KKyAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBl
IHNfcmVzb3VyY2VUeXBlOworCisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvcjsgfQorICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1f
Y29sb3IgPSBjb2xvcjsgfQorCitwcml2YXRlOgorICAgIENvbG9yIG1fY29sb3I7Cit9OworCit9
CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Um9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jv
b3QuY3BwCShyZXZpc2lvbiA3NTI3MikJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
Um9vdC5jcHA6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNjEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNyBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICAgICAgICAgICAgICAgICAgMjAwOSBHb29nbGUsIEluYy4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZH
Um9vdC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVz
dFJlc3VsdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNW
R0xlbmd0aC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKyNpbmNsdWRlICJTVkdS
ZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHU3R5
bGVkRWxlbWVudC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCisKKyNpZiBFTkFCTEUo
RklMVEVSUykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgorI2VuZGlmCisK
K3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZH
Um9vdDo6UmVuZGVyU1ZHUm9vdChTVkdTdHlsZWRFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVy
Qm94KG5vZGUpCisgICAgLCBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQoZmFsc2UpCisgICAgLCBtX25l
ZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRlKHRydWUpCit7CisgICAgc2V0UmVwbGFjZWQo
dHJ1ZSk7Cit9CisKK1JlbmRlclNWR1Jvb3Q6On5SZW5kZXJTVkdSb290KCkKK3sKK30KKwordm9p
ZCBSZW5kZXJTVkdSb290Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCit7CisgICAg
QVNTRVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKKworICAgIGludCBib3JkZXJB
bmRQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CisgICAgaW50IHdpZHRoID0gY29t
cHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGZhbHNlKSArIGJvcmRlckFuZFBhZGRpbmc7CisKKyAg
ICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgo
KS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkKKyAgICAgICAgd2lkdGggPSBtaW4od2lkdGgs
IHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBD
T05URU5UX0JPWCA/IGJvcmRlckFuZFBhZGRpbmcgOiAwKSk7CisKKyAgICBpZiAoc3R5bGUoKS0+
d2lkdGgoKS5pc1BlcmNlbnQoKSB8fCAoc3R5bGUoKS0+d2lkdGgoKS5pc0F1dG8oKSAmJiBzdHls
ZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKSkpIHsKKyAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGggPSAwOworICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHdpZHRo
OworICAgIH0gZWxzZQorICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gd2lkdGg7CisKKyAgICBzZXRQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzRGlydHkoZmFsc2UpOworfQorCitpbnQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxh
Y2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoKSBjb25zdAoreworICAgIGludCBy
ZXBsYWNlZFdpZHRoID0gUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoaW5j
bHVkZU1heFdpZHRoKTsKKyAgICBpZiAoIXN0eWxlKCktPmxvZ2ljYWxXaWR0aCgpLmlzUGVyY2Vu
dCgpKQorICAgICAgICByZXR1cm4gcmVwbGFjZWRXaWR0aDsKKworICAgIC8vIEZJWE1FOiBJbnZl
c3RpZ2F0ZSBpbiBzaXplIHJvdW5kaW5nIGlzc3VlcworICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9
IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2RlKCkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KHJvdW5kZihyZXBsYWNlZFdpZHRoICogc3ZnLT5jdXJyZW50U2NhbGUoKSkpOwor
fQorCitpbnQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNv
bnN0Cit7CisgICAgaW50IHJlcGxhY2VkSGVpZ2h0ID0gUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFj
ZWRMb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYgKCFzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkuaXNQ
ZXJjZW50KCkpCisgICAgICAgIHJldHVybiByZXBsYWNlZEhlaWdodDsKKworICAgIC8vIEZJWE1F
OiBJbnZlc3RpZ2F0ZSBpbiBzaXplIHJvdW5kaW5nIGlzc3VlcworICAgIFNWR1NWR0VsZW1lbnQq
IHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2RlKCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihyZXBsYWNlZEhlaWdodCAqIHN2Zy0+Y3VycmVudFNjYWxl
KCkpKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQoreworICAgIEFTU0VSVChu
ZWVkc0xheW91dCgpKTsKKworICAgIC8vIEFyYml0cmFyeSBhZmZpbmUgdHJhbnNmb3JtcyBhcmUg
aW5jb21wYXRpYmxlIHdpdGggTGF5b3V0U3RhdGUuCisgICAgdmlldygpLT5kaXNhYmxlTGF5b3V0
U3RhdGUoKTsKKworICAgIGJvb2wgbmVlZHNMYXlvdXQgPSBzZWxmTmVlZHNMYXlvdXQoKTsKKyAg
ICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdM
YXlvdXQoKSAmJiBuZWVkc0xheW91dCk7CisKKyAgICBJbnRTaXplIG9sZFNpemUod2lkdGgoKSwg
aGVpZ2h0KCkpOworICAgIGNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKKyAgICBjb21wdXRlTG9naWNh
bEhlaWdodCgpOworICAgIGNhbGNWaWV3cG9ydCgpOworCisgICAgU1ZHU1ZHRWxlbWVudCogc3Zn
ID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5vZGUoKSk7CisgICAgbV9pc0xheW91dFNp
emVDaGFuZ2VkID0gc3ZnLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSAmJiBvbGRTaXplICE9IHNpemUo
KTsKKworICAgIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKHRoaXMsIG5lZWRzTGF5
b3V0KTsKKyAgICBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgPSBmYWxzZTsKKworICAgIC8vIEF0IHRo
aXMgcG9pbnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkgZ3JhYmJlZCB0aGUgb2xkIGJvdW5kcywK
KyAgICAvLyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyByZXBhaW50QWZ0ZXJMYXlvdXQoKSB1c2Vz
IHRoZSBuZXcgYm91bmRzLgorICAgIGlmIChtX25lZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBk
YXRlKSB7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKKyAgICAgICAgbV9uZWVk
c0JvdW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIHJlcGFp
bnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKKworICAgIHZpZXcoKS0+ZW5hYmxlTGF5b3V0U3Rh
dGUoKTsKKyAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUm9v
dDo6c2VsZldpbGxQYWludCgpCit7CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgU1ZHUmVzb3Vy
Y2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVu
ZGVyT2JqZWN0KHRoaXMpOworICAgIHJldHVybiByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLT5maWx0
ZXIoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVy
U1ZHUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFy
ZW50WSkKK3sKKyAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBpc1Zpc2libGUgPSBzdHlsZSgpLT52aXNpYmls
aXR5KCkgPT0gVklTSUJMRTsKKyAgICBJbnRQb2ludCBwYXJlbnRPcmlnaW5JbkNvbnRhaW5lcihw
YXJlbnRYLCBwYXJlbnRZKTsKKyAgICBJbnRQb2ludCBib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5l
ciA9IHBhcmVudE9yaWdpbkluQ29udGFpbmVyICsgcGFyZW50T3JpZ2luVG9Cb3JkZXJCb3goKTsK
KworICAgIGlmIChoYXNCb3hEZWNvcmF0aW9ucygpICYmIChwYWludEluZm8ucGhhc2UgPT0gUGFp
bnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNo
aWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1Zpc2libGUpCisgICAgICAgIHBhaW50Qm94RGVjb3Jh
dGlvbnMocGFpbnRJbmZvLCBib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lci54KCksIGJvcmRlckJv
eE9yaWdpbkluQ29udGFpbmVyLnkoKSk7CisKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2VCbG9ja0JhY2tncm91bmQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEFuIGVt
cHR5IHZpZXdwb3J0IGRpc2FibGVzIHJlbmRlcmluZy4gIEZJWE1FOiBTaG91bGQgd2Ugc3RpbGwg
cmVuZGVyIGZpbHRlcnM/CisgICAgaWYgKG1fdmlld3BvcnRTaXplLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gRG9uJ3QgcGFpbnQgaWYgd2UgZG9uJ3QgaGF2ZSBraWRzLCBl
eGNlcHQgaWYgd2UgaGF2ZSBmaWx0ZXJzIHdlIHNob3VsZCBwYWludCB0aG9zZS4KKyAgICBpZiAo
IWZpcnN0Q2hpbGQoKSAmJiAhc2VsZldpbGxQYWludCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBNYWtlIGEgY29weSBvZiB0aGUgUGFpbnRJbmZvIGJlY2F1c2UgYXBwbHlUcmFuc2Zvcm0g
d2lsbCBtb2RpZnkgdGhlIGRhbWFnZSByZWN0LgorICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5m
byhwYWludEluZm8pOworICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKworICAg
IC8vIEFwcGx5IGluaXRpYWwgdmlld3BvcnQgY2xpcCAtIG5vdCBhZmZlY3RlZCBieSBvdmVyZmxv
dyBoYW5kbGluZworICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmNsaXAob3ZlcmZsb3dDbGlw
UmVjdChib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lci54KCksIGJvcmRlckJveE9yaWdpbkluQ29u
dGFpbmVyLnkoKSkpOworCisgICAgLy8gQ29udmVydCBmcm9tIGNvbnRhaW5lciBvZmZzZXRzICho
dG1sIHJlbmRlcmVycykgdG8gYSByZWxhdGl2ZSB0cmFuc2Zvcm0gKHN2ZyByZW5kZXJlcnMpLgor
ICAgIC8vIFRyYW5zZm9ybSBmcm9tIG91ciBwYWludCBjb250YWluZXIncyBjb29yZGluYXRlIHN5
c3RlbSB0byBvdXIgbG9jYWwgY29vcmRzLgorICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNm
b3JtKGxvY2FsVG9SZXBhaW50Q29udGFpbmVyVHJhbnNmb3JtKHBhcmVudE9yaWdpbkluQ29udGFp
bmVyKSk7CisKKyAgICBib29sIGNvbnRpbnVlUmVuZGVyaW5nID0gdHJ1ZTsKKyAgICBpZiAoY2hp
bGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCisgICAgICAgIGNvbnRp
bnVlUmVuZGVyaW5nID0gU1ZHUmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVu
dCh0aGlzLCBjaGlsZFBhaW50SW5mbyk7CisKKyAgICBpZiAoY29udGludWVSZW5kZXJpbmcpCisg
ICAgICAgIFJlbmRlckJveDo6cGFpbnQoY2hpbGRQYWludEluZm8sIDAsIDApOworCisgICAgaWYg
KGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQorICAgICAgICBT
VkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJ
bmZvLCBwYWludEluZm8uY29udGV4dCk7CisKKyAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5y
ZXN0b3JlKCk7CisKKyAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGlu
ZSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgp
LT5vdXRsaW5lV2lkdGgoKSAmJiBpc1Zpc2libGUpCisgICAgICAgIHBhaW50T3V0bGluZShwYWlu
dEluZm8uY29udGV4dCwgYm9yZGVyQm94T3JpZ2luSW5Db250YWluZXIueCgpLCBib3JkZXJCb3hP
cmlnaW5JbkNvbnRhaW5lci55KCksIHdpZHRoKCksIGhlaWdodCgpKTsKK30KKwordm9pZCBSZW5k
ZXJTVkdSb290OjpkZXN0cm95KCkKK3sKKyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50RGVz
dHJveWVkKHRoaXMpOworICAgIFJlbmRlckJveDo6ZGVzdHJveSgpOworfQorCit2b2lkIFJlbmRl
clNWR1Jvb3Q6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVu
ZGVyU3R5bGUqIG5ld1N0eWxlKQoreworICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZUxh
eW91dCkKKyAgICAgICAgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisgICAgUmVuZGVyQm94
OjpzdHlsZVdpbGxDaGFuZ2UoZGlmZiwgbmV3U3R5bGUpOworfQorCit2b2lkIFJlbmRlclNWR1Jv
b3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpCit7CisgICAgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRT
dHlsZSk7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCh0aGlzLCBk
aWZmLCBzdHlsZSgpKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVGcm9tRWxlbWVu
dCgpCit7CisgICAgUmVuZGVyQm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpOworICAgIFNWR1Jlc291
cmNlc0NhY2hlOjpjbGllbnRVcGRhdGVkRnJvbUVsZW1lbnQodGhpcywgc3R5bGUoKSk7Cit9CisK
K3ZvaWQgUmVuZGVyU1ZHUm9vdDo6Y2FsY1ZpZXdwb3J0KCkKK3sKKyAgICBTVkdTVkdFbGVtZW50
KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4obm9kZSgpKTsKKworICAgIGlmICgh
c3ZnLT5oYXNTZXRDb250YWluZXJTaXplKCkpIHsKKyAgICAgICAgLy8gSW4gdGhlIG5vcm1hbCBj
YXNlIG9mIDxzdmc+IGJlaW5nIHN0YW5kLWFsb25lIG9yIGluIGEgQ1NTQm94TW9kZWwgb2JqZWN0
IHdlIHVzZQorICAgICAgICAvLyBSZW5kZXJCb3g6OndpZHRoKCkvaGVpZ2h0KCkgKHdoaWNoIHB1
bGxzIGRhdGEgZnJvbSBSZW5kZXJTdHlsZSkKKyAgICAgICAgbV92aWV3cG9ydFNpemUgPSBGbG9h
dFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gSW4gdGhlIFNWR0ltYWdlIGNhc2UgZ3JhYiB0aGUgU1ZHTGVuZ3RoIHZhbHVlcyBvZmYgb2Yg
U1ZHU1ZHRWxlbWVudCBhbmQgdXNlCisgICAgLy8gdGhlIHNwZWNpYWwgcmVsYXRpdmVXaWR0aFZh
bHVlIGFjY2Vzc29ycyB3aGljaCByZXNwZWN0IHRoZSBzcGVjaWZpZWQgY29udGFpbmVyU2l6ZQor
ICAgIC8vIEZJWE1FOiBDaGVjayBob3cgU1ZHSW1hZ2UgKyB6b29taW5nIGlzIHN1cHBvc2VkIHRv
IGJlIGhhbmRsZWQ/CisgICAgU1ZHTGVuZ3RoIHdpZHRoID0gc3ZnLT53aWR0aCgpOworICAgIFNW
R0xlbmd0aCBoZWlnaHQgPSBzdmctPmhlaWdodCgpOworICAgIG1fdmlld3BvcnRTaXplID0gRmxv
YXRTaXplKHdpZHRoLnVuaXRUeXBlKCkgPT0gTGVuZ3RoVHlwZVBlcmNlbnRhZ2UgPyBzdmctPnJl
bGF0aXZlV2lkdGhWYWx1ZSgpIDogd2lkdGgudmFsdWUoc3ZnKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWlnaHQudW5pdFR5cGUoKSA9PSBMZW5ndGhUeXBlUGVyY2VudGFnZSA/
IHN2Zy0+cmVsYXRpdmVIZWlnaHRWYWx1ZSgpIDogaGVpZ2h0LnZhbHVlKHN2ZykpOworfQorCisv
LyBSZW5kZXJCb3ggbWV0aG9kcyB3aWxsIGV4cGVjdCBjb29yZGluYXRlcyB3L28gYW55IHRyYW5z
Zm9ybXMgaW4gY29vcmRpbmF0ZXMKKy8vIHJlbGF0aXZlIHRvIG91ciBib3JkZXJCb3ggb3JpZ2lu
LiAgVGhpcyBtZXRob2QgZ2l2ZXMgdXMgZXhhY3RseSB0aGF0LgorQWZmaW5lVHJhbnNmb3JtIFJl
bmRlclNWR1Jvb3Q6OmxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIElu
dFNpemUgYm9yZGVyQW5kUGFkZGluZyA9IGJvcmRlck9yaWdpblRvQ29udGVudEJveCgpOworICAg
IFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2RlKCkp
OworICAgIGZsb2F0IHNjYWxlID0gc3ZnLT5jdXJyZW50U2NhbGUoKTsKKyAgICBGbG9hdFBvaW50
IHRyYW5zbGF0ZSA9IHN2Zy0+Y3VycmVudFRyYW5zbGF0ZSgpOworICAgIEFmZmluZVRyYW5zZm9y
bSBjdG0oc2NhbGUsIDAsIDAsIHNjYWxlLCBib3JkZXJBbmRQYWRkaW5nLndpZHRoKCkgKyB0cmFu
c2xhdGUueCgpLCBib3JkZXJBbmRQYWRkaW5nLmhlaWdodCgpICsgdHJhbnNsYXRlLnkoKSk7Cisg
ICAgcmV0dXJuIHN2Zy0+dmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpIC8gc2NhbGUsIGhl
aWdodCgpIC8gc2NhbGUpICogY3RtOworfQorCitJbnRTaXplIFJlbmRlclNWR1Jvb3Q6OnBhcmVu
dE9yaWdpblRvQm9yZGVyQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZSh4KCksIHko
KSk7Cit9CisKK0ludFNpemUgUmVuZGVyU1ZHUm9vdDo6Ym9yZGVyT3JpZ2luVG9Db250ZW50Qm94
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVm
dCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBS
ZW5kZXJTVkdSb290Ojpsb2NhbFRvUmVwYWludENvbnRhaW5lclRyYW5zZm9ybShjb25zdCBJbnRQ
b2ludCYgcGFyZW50T3JpZ2luSW5Db250YWluZXIpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNm
b3JtIHBhcmVudFRvQ29udGFpbmVyKGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSk7CisgICAgcmV0
dXJuIHBhcmVudFRvQ29udGFpbmVyLnRyYW5zbGF0ZVJpZ2h0KHBhcmVudE9yaWdpbkluQ29udGFp
bmVyLngoKSwgcGFyZW50T3JpZ2luSW5Db250YWluZXIueSgpKTsKK30KKworY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBSZW5kZXJTVkdSb290Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QK
K3sKKyAgICBJbnRTaXplIHBhcmVudFRvQm9yZGVyQm94T2Zmc2V0ID0gcGFyZW50T3JpZ2luVG9C
b3JkZXJCb3goKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBib3JkZXJCb3hPcmlnaW5Ub1BhcmVu
dE9yaWdpbihsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkpOworICAgIGJvcmRlckJveE9yaWdp
blRvUGFyZW50T3JpZ2luLnRyYW5zbGF0ZVJpZ2h0KHBhcmVudFRvQm9yZGVyQm94T2Zmc2V0Lndp
ZHRoKCksIHBhcmVudFRvQm9yZGVyQm94T2Zmc2V0LmhlaWdodCgpKTsKKworICAgIG1fbG9jYWxU
b1BhcmVudFRyYW5zZm9ybSA9IGJvcmRlckJveE9yaWdpblRvUGFyZW50T3JpZ2luOworICAgIHJl
dHVybiBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07Cit9CisKK0ludFJlY3QgUmVuZGVyU1ZHUm9v
dDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIpCit7CisgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIpOworfQorCit2b2lk
IFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCit7
CisgICAgLy8gQXBwbHkgb3VyIGxvY2FsIHRyYW5zZm9ybXMgKGV4Y2VwdCBmb3IgeC95IHRyYW5z
bGF0aW9uKSwgdGhlbiBvdXIgc2hhZG93LCAKKyAgICAvLyBhbmQgdGhlbiBjYWxsIFJlbmRlckJv
eCdzIG1ldGhvZCB0byBoYW5kbGUgYWxsIHRoZSBub3JtYWwgQ1NTIEJveCBtb2RlbCBiaXRzCisg
ICAgcmVwYWludFJlY3QgPSBsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkubWFwUmVjdChyZXBh
aW50UmVjdCk7CisKKyAgICAvLyBBcHBseSBpbml0aWFsIHZpZXdwb3J0IGNsaXAgLSBub3QgYWZm
ZWN0ZWQgYnkgb3ZlcmZsb3cgc2V0dGluZ3MgICAgCisgICAgcmVwYWludFJlY3QuaW50ZXJzZWN0
KGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV92aWV3cG9ydFNpemUp
KSk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdT
dHlsZSgpOworICAgIGlmIChjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBzdmdTdHlsZS0+c2hh
ZG93KCkpCisgICAgICAgIHNoYWRvdy0+YWRqdXN0UmVjdEZvclNoYWRvdyhyZXBhaW50UmVjdCk7
CisKKyAgICBSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVy
LCByZXBhaW50UmVjdCwgZml4ZWQpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6Om1hcExvY2Fs
VG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wg
Zml4ZWQgLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0
ZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWZpeGVkKTsgLy8gV2Ugc2hvdWxkIGhhdmUgbm8gZml4
ZWQgY29udGVudCBpbiB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlLgorICAgIEFTU0VSVCh1c2VUcmFu
c2Zvcm1zKTsgLy8gbWFwcGluZyBhIHBvaW50IHRocm91Z2ggU1ZHIHcvbyByZXNwZWN0aW5nIHRy
YXNuZm9ybXMgaXMgdXNlbGVzcy4KKworICAgIC8vIFRyYW5zZm9ybSB0byBvdXIgYm9yZGVyIGJv
eCBhbmQgbGV0IFJlbmRlckJveCB0cmFuc2Zvcm0gdGhlIHJlc3Qgb2YgdGhlIHdheS4KKyAgICB0
cmFuc2Zvcm1TdGF0ZS5hcHBseVRyYW5zZm9ybShsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkp
OworICAgIFJlbmRlckJveDo6bWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBm
aXhlZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOworfQorCit2b2lkIFJlbmRlclNW
R1Jvb3Q6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQoreworICAgIG1fb2JqZWN0Qm91bmRpbmdC
b3ggPSBGbG9hdFJlY3QoKTsKKyAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7
CisgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKworICAgIFNWR1JlbmRl
clN1cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKHRoaXMsIG1fb2JqZWN0Qm91
bmRpbmdCb3gsIG1fc3Ryb2tlQm91bmRpbmdCb3gsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKKyAg
ICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhp
cywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworICAgIG1fcmVwYWludEJvdW5kaW5nQm94LmluZmxh
dGUoYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCkpOworfQorCitib29sIFJlbmRlclNWR1Jvb3Q6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uIGhp
dFRlc3RBY3Rpb24pCit7CisgICAgSW50UG9pbnQgcG9pbnRJbkNvbnRhaW5lcihfeCwgX3kpOwor
ICAgIEludFNpemUgY29udGFpbmVyVG9QYXJlbnRPZmZzZXQoX3R4LCBfdHkpOworCisgICAgSW50
UG9pbnQgcG9pbnRJblBhcmVudCA9IHBvaW50SW5Db250YWluZXIgLSBjb250YWluZXJUb1BhcmVu
dE9mZnNldDsKKyAgICBJbnRQb2ludCBwb2ludEluQm9yZGVyQm94ID0gcG9pbnRJblBhcmVudCAt
IHBhcmVudE9yaWdpblRvQm9yZGVyQm94KCk7CisKKyAgICAvLyBOb3RlOiBGb3Igbm93LCB3ZSdy
ZSBpZ25vcmluZyBoaXRzIHRvIGJvcmRlciBhbmQgcGFkZGluZyBmb3IgPHN2Zz4KKyAgICBJbnRQ
b2ludCBwb2ludEluQ29udGVudEJveCA9IHBvaW50SW5Cb3JkZXJCb3ggLSBib3JkZXJPcmlnaW5U
b0NvbnRlbnRCb3goKTsKKyAgICBpZiAoIWNvbnRlbnRCb3hSZWN0KCkuY29udGFpbnMocG9pbnRJ
bkNvbnRlbnRCb3gpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnRQb2ludCBsb2Nh
bFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2lu
dEluUGFyZW50KTsKKworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYg
KGNoaWxkLT5ub2RlQXRGbG9hdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxQb2ludCwgaGl0
VGVzdEFjdGlvbikpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDU1MvSFRNTCBhc3N1bWVzIHRo
ZSBsb2NhbCBwb2ludCBpcyByZWxhdGl2ZSB0byB0aGUgYm9yZGVyIGJveCwgcmlnaHQ/CisgICAg
ICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkJvcmRlckJveCk7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogbm9kZUF0RmxvYXRQb2ludCgpIGRvZXNuJ3QgaGFuZGxlIHJl
Y3QtYmFzZWQgaGl0IHRlc3RzIHlldC4KKyAgICAgICAgICAgIHJlc3VsdC5hZGROb2RlVG9SZWN0
QmFzZWRUZXN0UmVzdWx0KGNoaWxkLT5ub2RlKCksIF94LCBfeSk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHdlIGRpZG4ndCBlYXJseSBl
eGl0IGFib3ZlLCB3ZSd2ZSBqdXN0IGhpdCB0aGUgY29udGFpbmVyIDxzdmc+IGVsZW1lbnQuIFVu
bGlrZSBTVkcgMS4xLCAybmQgRWRpdGlvbiBhbGxvd3MgY29udGFpbmVyIGVsZW1lbnRzIHRvIGJl
IGhpdC4KKyAgICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kKSB7
CisgICAgICAgIC8vIE9ubHkgcmV0dXJuIHRydWUgaGVyZSwgaWYgdGhlIGxhc3QgaGl0IHRlc3Rp
bmcgcGhhc2UgJ0Jsb2NrQmFja2dyb3VuZCcgaXMgZXhlY3V0ZWQuIElmIHdlJ2QgcmV0dXJuIHRy
dWUgaW4gdGhlICdGb3JlZ3JvdW5kJyBwaGFzZSwKKyAgICAgICAgLy8gaGl0IHRlc3Rpbmcgd291
bGQgc3RvcCBpbW1lZGlhdGVseS4gRm9yIFNWRyBvbmx5IHRyZWVzIHRoaXMgZG9lc24ndCBtYXR0
ZXIuIFRob3VnaCB3aGVuIHdlIGhhdmUgYSA8Zm9yZWlnbk9iamVjdD4gc3VidHJlZSB3ZSBuZWVk
CisgICAgICAgIC8vIHRvIGJlIGFibGUgdG8gZGV0ZWN0IGhpdHMgb24gdGhlIGJhY2tncm91bmQg
b2YgYSA8ZGl2PiBlbGVtZW50LiBJZiB3ZSdkIHJldHVybiB0cnVlIGhlcmUgaW4gdGhlICdGb3Jl
Z3JvdW5kJyBwaGFzZSwgd2UgYXJlIG5vdCBhYmxlIAorICAgICAgICAvLyB0byBkZXRlY3QgdGhl
c2UgaGl0cyBhbnltb3JlLgorICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91
bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCShyZXZpc2lvbiA3NTI3MikJKGZy
b20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oOjc1MjcyKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBSZW5kZXJTVkdSb290
X2gKKyNkZWZpbmUgUmVuZGVyU1ZHUm9vdF9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUg
IlJlbmRlckJveC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlNWR1JlbmRl
clN1cHBvcnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdTdHlsZWRFbGVt
ZW50OworY2xhc3MgQWZmaW5lVHJhbnNmb3JtOworCitjbGFzcyBSZW5kZXJTVkdSb290IDogcHVi
bGljIFJlbmRlckJveCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmVuZGVyU1ZHUm9vdChTVkdT
dHlsZWRFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUm9vdCgpOworCisgICAgY29u
c3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuICZtX2No
aWxkcmVuOyB9CisgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIHsgcmV0dXJu
ICZtX2NoaWxkcmVuOyB9CisKKyAgICBib29sIGlzTGF5b3V0U2l6ZUNoYW5nZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRl
ID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsg
bV9uZWVkc0JvdW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgeyBy
ZXR1cm4gY2hpbGRyZW4oKTsgfQorICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRM
aXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBjaGlsZHJlbigpOyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdS
b290IjsgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KCk7CisgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5j
bHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxh
Y2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZ
KTsKKworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CisgICAgdmlydHVhbCB2b2lkIHN0eWxl
V2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7
CisgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1l
bnQoKTsKKworICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50
VHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBv
aW50JikgY29uc3Q7CisgICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBz
dHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0K
KyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgs
IGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisKKyAgICB2aXJ0dWFsIElu
dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIpOworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmIHJlcGFp
bnRSZWN0LCBib29sIGZpeGVkKTsKKworICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFp
bmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIHVzZVRyYW5z
Zm9ybXMsIGJvb2wgZml4ZWQsIFRyYW5zZm9ybVN0YXRlJikgY29uc3Q7CisKKyAgICB2b2lkIGNh
bGNWaWV3cG9ydCgpOworCisgICAgYm9vbCBzZWxmV2lsbFBhaW50KCk7CisgICAgdm9pZCB1cGRh
dGVDYWNoZWRCb3VuZGFyaWVzKCk7CisKKyAgICBJbnRTaXplIHBhcmVudE9yaWdpblRvQm9yZGVy
Qm94KCkgY29uc3Q7CisgICAgSW50U2l6ZSBib3JkZXJPcmlnaW5Ub0NvbnRlbnRCb3goKSBjb25z
dDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUb1JlcGFpbnRDb250YWluZXJUcmFuc2Zvcm0o
Y29uc3QgSW50UG9pbnQmIHBhcmVudE9yaWdpbkluQ29udGFpbmVyKSBjb25zdDsKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpIGNvbnN0OworCisgICAgUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CisgICAgRmxvYXRTaXplIG1fdmlld3BvcnRT
aXplOworICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBt
X3N0cm9rZUJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsK
KyAgICBtdXRhYmxlIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07Cisg
ICAgYm9vbCBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgOiAxOworICAgIGJvb2wgbV9uZWVkc0JvdW5k
YXJpZXNPclRyYW5zZm9ybVVwZGF0ZSA6IDE7Cit9OworCitpbmxpbmUgUmVuZGVyU1ZHUm9vdCog
dG9SZW5kZXJTVkdSb290KFJlbmRlck9iamVjdCogb2JqZWN0KQoreyAKKyAgICBBU1NFUlQoIW9i
amVjdCB8fCBvYmplY3QtPmlzU1ZHUm9vdCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVu
ZGVyU1ZHUm9vdCo+KG9iamVjdCk7Cit9CisKK2lubGluZSBjb25zdCBSZW5kZXJTVkdSb290KiB0
b1JlbmRlclNWR1Jvb3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7IAorICAgIEFTU0VS
VCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdSb290KCkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBSZW5kZXJTVkdSb290Kj4ob2JqZWN0KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNo
IGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlclNWR1Jvb3Qo
Y29uc3QgUmVuZGVyU1ZHUm9vdCopOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmIC8vIFJlbmRlclNWR1Jvb3RfaApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RD
b250YWluZXIuY3BwCShyZXZpc2lvbiA3NTI3MikJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwOjc1MjcyKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1NoYWRvd1Ry
ZWVSb290Q29udGFpbmVyLmgiCisKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAi
U1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgiCisjaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyOjpS
ZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcihTVkdVc2VFbGVtZW50KiBub2RlKQorICAg
IDogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcihub2RlKQorICAgICwgbV9yZWNyZWF0
ZVRyZWUoZmFsc2UpCit7Cit9CisKK1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyOjp+
UmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKQoreworICAgIGlmIChtX3NoYWRvd1Jv
b3QgJiYgbV9zaGFkb3dSb290LT5hdHRhY2hlZCgpKSB7CisgICAgICAgIG1fc2hhZG93Um9vdC0+
ZGV0YWNoKCk7CisgICAgICAgIG1fc2hhZG93Um9vdC0+Y2xlYXJTaGFkb3dIb3N0KCk7CisgICAg
fQorfQorCit2b2lkIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyOjp1cGRhdGVTdHls
ZShOb2RlOjpTdHlsZUNoYW5nZSBjaGFuZ2UpCit7CisgICAgaWYgKG1fc2hhZG93Um9vdCAmJiBt
X3NoYWRvd1Jvb3QtPmF0dGFjaGVkKCkpCisgICAgICAgIG1fc2hhZG93Um9vdC0+cmVjYWxjU3R5
bGUoY2hhbmdlKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcjo6
dXBkYXRlRnJvbUVsZW1lbnQoKQoreworICAgIGJvb2wgaGFkRXhpc3RpbmdUcmVlID0gbV9zaGFk
b3dSb290OworCisgICAgU1ZHVXNlRWxlbWVudCogdXNlRWxlbWVudCA9IHN0YXRpY19jYXN0PFNW
R1VzZUVsZW1lbnQqPihub2RlKCkpOworICAgIGlmICghbV9zaGFkb3dSb290KSB7CisgICAgICAg
IEFTU0VSVCghbV9yZWNyZWF0ZVRyZWUpOworICAgICAgICBtX3NoYWRvd1Jvb3QgPSBTVkdTaGFk
b3dUcmVlUm9vdEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpLCB1c2VFbGVtZW50KTsKKyAgICAg
ICAgdXNlRWxlbWVudC0+YnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsKKyAgICB9CisKKyAgICBBU1NF
UlQobV9zaGFkb3dSb290LT5zaGFkb3dQYXJlbnROb2RlKCkgPT0gdXNlRWxlbWVudCk7CisKKyAg
ICBib29sIHNob3VsZFJlY3JlYXRlVHJlZSA9IG1fcmVjcmVhdGVUcmVlOworICAgIGlmIChtX3Jl
Y3JlYXRlVHJlZSkgeworICAgICAgICBBU1NFUlQoaGFkRXhpc3RpbmdUcmVlKTsKKworICAgICAg
ICBpZiAobV9zaGFkb3dSb290LT5hdHRhY2hlZCgpKQorICAgICAgICAgICAgbV9zaGFkb3dSb290
LT5kZXRhY2goKTsKKworICAgICAgICBtX3NoYWRvd1Jvb3QtPnJlbW92ZUFsbENoaWxkcmVuKCk7
CisgICAgICAgIG1fcmVjcmVhdGVUcmVlID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gT25seSBy
ZWJ1aWxkIHRoZSBzaGFkb3cgdHJlZSwgaWYgd2UgYSkgbmV2ZXIgaGFkIGEgdHJlZSBvciBiKSB3
ZSB3ZXJlIHNwZWNpZmljYWxseSBhc2tlZCB0byBkbyBzbworICAgIC8vIElmIHRoZSB1c2UgZWxl
bWVudCBpcyBhIHBlbmRpbmcgcmVzb3VyY2UsIGFuZCBhKSBvciBiKSBpcyB0cnVlLCBkbyBub3Ro
aW5nLCBhbmQgd2FpdCBmb3IgdGhlIHVzZQorICAgIC8vIGVsZW1lbnQgdG8gYmUgYXNrZWQgdG8g
YnVpbGRQZW5kaW5nUmVzb3VyY2UoKSwgdGhpcyB3aWxsIGNhbGwgdXMgYWdhaW4sIHdpdGggbV9y
ZWNyZWF0ZVRydWU9dHJ1ZS4KKyAgICBpZiAoKHNob3VsZFJlY3JlYXRlVHJlZSB8fCAhaGFkRXhp
c3RpbmdUcmVlKSAmJiAhdXNlRWxlbWVudC0+aXNQZW5kaW5nUmVzb3VyY2UoKSkgeworICAgICAg
ICB1c2VFbGVtZW50LT5idWlsZFNoYWRvd0FuZEluc3RhbmNlVHJlZShtX3NoYWRvd1Jvb3QuZ2V0
KCkpOworCisgICAgICAgIC8vIEF0dGFjaCBzaGFkb3cgcm9vdCBlbGVtZW50CisgICAgICAgIG1f
c2hhZG93Um9vdC0+YXR0YWNoRWxlbWVudChzdHlsZSgpLCByZW5kZXJBcmVuYSgpKTsKKworICAg
ICAgICAvLyBBdHRhY2ggc3VidHJlZSwgYXMgaWYgaXQgd2FzIGEgcmVndWxhciBub24tc2hhZG93
IHRyZWUKKyAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fc2hhZG93Um9vdC0+Zmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgICAgIGNo
aWxkLT5hdHRhY2goKTsKKyAgICB9CisKKyAgICBBU1NFUlQoIW1fcmVjcmVhdGVUcmVlKTsKKyAg
ICBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjp1cGRhdGVGcm9tRWxlbWVudCgpOwor
fQorCit2b2lkIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyOjpzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQorewor
ICAgIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6OnN0eWxlRGlkQ2hhbmdlKGRpZmYs
IG9sZFN0eWxlKTsKKworICAgIGlmIChSZW5kZXJPYmplY3QqIHNoYWRvd1Jvb3RSZW5kZXJlciA9
IG1fc2hhZG93Um9vdCA/IG1fc2hhZG93Um9vdC0+cmVuZGVyZXIoKSA6IDApCisgICAgICAgIHNo
YWRvd1Jvb3RSZW5kZXJlci0+c2V0U3R5bGUoc3R5bGUoKSk7Cit9CisKK05vZGUqIFJlbmRlclNW
R1NoYWRvd1RyZWVSb290Q29udGFpbmVyOjpyb290RWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc2hhZG93Um9vdC5nZXQoKTsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRh
aW5lci5oCShyZXZpc2lvbiA3NTI3MikJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
U2hhZG93VHJlZVJvb3RDb250YWluZXIuaDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBSZW5kZXJTVkdTaGFk
b3dUcmVlUm9vdENvbnRhaW5lcl9oCisjZGVmaW5lIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29u
dGFpbmVyX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHVHJhbnNmb3Jt
YWJsZUNvbnRhaW5lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjbGFzcyBTVkdV
c2VFbGVtZW50OworY2xhc3MgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50OworCitjbGFzcyBSZW5k
ZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRh
aW5lcihTVkdVc2VFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHU2hhZG93VHJlZVJv
b3RDb250YWluZXIoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1NWR1NoYWRvd1RyZWVSb290Q29u
dGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdm9pZCBtYXJrU2hhZG93VHJl
ZUZvclJlY3JlYXRpb24oKSB7IG1fcmVjcmVhdGVUcmVlID0gdHJ1ZTsgfQorICAgIHZvaWQgdXBk
YXRlU3R5bGUoTm9kZTo6U3R5bGVDaGFuZ2UpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9t
RWxlbWVudCgpOworCisgICAgTm9kZSogcm9vdEVsZW1lbnQoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUpOworCisgICAgYm9vbCBtX3JlY3JlYXRlVHJlZTsKKyAgICBS
ZWZQdHI8U1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50PiBtX3NoYWRvd1Jvb3Q7Cit9OworCit9CisK
KyNlbmRpZgorI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJh
bnNmb3JtYWJsZUNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCShyZXZpc2lvbiA3NTI3MikJ
KGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5j
cHA6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA5IEdvb2dsZSwgSW5jLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1Ry
YW5zZm9ybWFibGVDb250YWluZXIuaCIKKworI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVk
ZSAiU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorUmVuZGVyU1ZHVHJh
bnNmb3JtYWJsZUNvbnRhaW5lcjo6UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcihTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogbm9kZSkKKyAgICA6IFJlbmRlclNWR0NvbnRhaW5l
cihub2RlKQorICAgICwgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSh0cnVlKQoreworfQorCitib29s
IFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6OmNhbGN1bGF0ZUxvY2FsVHJhbnNmb3Jt
KCkKK3sKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRp
Y19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKKworICAgIGJv
b2wgbmVlZHNVcGRhdGUgPSBtX25lZWRzVHJhbnNmb3JtVXBkYXRlOworICAgIGlmIChuZWVkc1Vw
ZGF0ZSkgeworICAgICAgICBtX2xvY2FsVHJhbnNmb3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2Nh
bFRyYW5zZm9ybSgpOworICAgICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKCFlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpnVGFnKSB8fCAh
c3RhdGljX2Nhc3Q8U1ZHR0VsZW1lbnQqPihlbGVtZW50KS0+aXNTaGFkb3dUcmVlQ29udGFpbmVy
RWxlbWVudCgpKQorICAgICAgICByZXR1cm4gbmVlZHNVcGRhdGU7CisKKyAgICBGbG9hdFNpemUg
dHJhbnNsYXRpb24gPSBzdGF0aWNfY2FzdDxTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudCo+
KGVsZW1lbnQpLT5jb250YWluZXJUcmFuc2xhdGlvbigpOworICAgIGlmICh0cmFuc2xhdGlvbi53
aWR0aCgpID09IDAgJiYgdHJhbnNsYXRpb24uaGVpZ2h0KCkgPT0gMCkKKyAgICAgICAgcmV0dXJu
IG5lZWRzVXBkYXRlOworCisgICAgLy8gRklYTUU6IENvdWxkIG9wdGltaXplIHRoaXMgY2FzZSBm
b3IgdXNlIHRvIGF2b2lkIHJlZmV0Y2hpbmcgdGhlIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBo
ZXJlLCBpZiBvbmx5IHRoZSBjb250YWluZXJUcmFuc2xhdGlvbigpIGNoYW5nZWQuCisgICAgaWYg
KCFuZWVkc1VwZGF0ZSkKKyAgICAgICAgbV9sb2NhbFRyYW5zZm9ybSA9IGVsZW1lbnQtPmFuaW1h
dGVkTG9jYWxUcmFuc2Zvcm0oKTsKKworICAgIG1fbG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlKHRy
YW5zbGF0aW9uLndpZHRoKCksIHRyYW5zbGF0aW9uLmhlaWdodCgpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaAko
cmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RyYW5zZm9y
bWFibGVDb250YWluZXIuaDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAgICAgICAgICAgICAgICAgIDIwMDkgR29vZ2xlLCBJbmMuCisgICAgICAKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyX2gKKyNkZWZpbmUgUmVuZGVyU1ZHVHJh
bnNmb3JtYWJsZUNvbnRhaW5lcl9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRl
clNWR0NvbnRhaW5lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3Mg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7CisgICAgY2xhc3MgUmVuZGVyU1ZHVHJhbnNm
b3JtYWJsZUNvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJTVkdDb250YWluZXIgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgZXhwbGljaXQgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcihTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCopOworCisgICAgICAgIHZpcnR1YWwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhbFRyYW5zZm9ybTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1V
cGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICAg
ICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX2xvY2FsVHJhbnNmb3JtOyB9CisKKyAgICAgICAgYm9vbCBtX25lZWRzVHJhbnNmb3JtVXBk
YXRlIDogMTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CisgICAg
fTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8gUmVuZGVyU1ZHVHJhbnNm
b3JtYWJsZUNvbnRhaW5lcl9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Vmlld3BvcnRDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAJKHJldmlzaW9uIDc1MjcyKQkoZnJvbSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHA6NzUyNzIpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICAgICAgICAgICAgICAgICAgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICAg
ICAgICAgICAgICAgICAgMjAwOSBHb29nbGUsIEluYy4KKyAgICBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhaW50IHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUg
IlNWR1NWR0VsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lcjo6UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIoU1ZHU3R5bGVkRWxlbWVu
dCogbm9kZSkKKyAgICA6IFJlbmRlclNWR0NvbnRhaW5lcihub2RlKQoreworfQorCit2b2lkIFJl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjphcHBseVZpZXdwb3J0Q2xpcChQYWludEluZm8mIHBh
aW50SW5mbykKK3sKKyAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0
aGlzKSkKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAobV92aWV3cG9ydCk7Cit9CisK
K3ZvaWQgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OmNhbGNWaWV3cG9ydCgpCit7CisgICAg
IFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsK
KyAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpIHsKKyAgICAg
ICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihlbGVt
ZW50KTsKKworICAgICAgICAgRmxvYXRSZWN0IG9sZFZpZXdwb3J0ID0gbV92aWV3cG9ydDsKKyAg
ICAgICAgIG1fdmlld3BvcnQgPSBGbG9hdFJlY3Qoc3ZnLT54KCkudmFsdWUoc3ZnKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIHN2Zy0+eSgpLnZhbHVlKHN2ZykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCBzdmctPndpZHRoKCkudmFsdWUoc3ZnKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIHN2Zy0+aGVpZ2h0KCkudmFsdWUoc3ZnKSk7CisK
KyAgICAgICAgaWYgKG9sZFZpZXdwb3J0ICE9IG1fdmlld3BvcnQpCisgICAgICAgICAgICBzZXRO
ZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKKyAgICB9Cit9CisKK0FmZmluZVRyYW5zZm9ybSBSZW5k
ZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6dmlld3BvcnRUcmFuc2Zvcm0oKSBjb25zdAoreworICAg
IGlmIChub2RlKCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpIHsKKyAgICAgICAgU1ZH
U1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5vZGUoKSk7Cisg
ICAgICAgIHJldHVybiBzdmctPnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0obV92aWV3cG9ydC53aWR0
aCgpLCBtX3ZpZXdwb3J0LmhlaWdodCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gQWZmaW5lVHJh
bnNmb3JtKCk7Cit9CisKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVyU1ZHVmlld3BvcnRD
b250YWluZXI6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIEFmZmluZVRy
YW5zZm9ybSB2aWV3cG9ydFRyYW5zbGF0aW9uKHZpZXdwb3J0VHJhbnNmb3JtKCkpOworICAgIG1f
bG9jYWxUb1BhcmVudFRyYW5zZm9ybSA9IHZpZXdwb3J0VHJhbnNsYXRpb24udHJhbnNsYXRlUmln
aHQobV92aWV3cG9ydC54KCksIG1fdmlld3BvcnQueSgpKTsKKyAgICByZXR1cm4gbV9sb2NhbFRv
UGFyZW50VHJhbnNmb3JtOworICAgIC8vIElmIHRoaXMgY2xhc3Mgd2VyZSBldmVyIGdpdmVuIGEg
bG9jYWxUcmFuc2Zvcm0oKSwgdGhlbiB0aGUgYWJvdmUgd291bGQgcmVhZDoKKyAgICAvLyByZXR1
cm4gdmlld3BvcnRUcmFuc2Zvcm0oKSAqIGxvY2FsVHJhbnNmb3JtKCkgKiB2aWV3cG9ydFRyYW5z
bGF0aW9uOworfQorCitib29sIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpwb2ludElzSW5z
aWRlVmlld3BvcnRDbGlwKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQpCit7CisgICAg
Ly8gUmVzcGVjdCB0aGUgdmlld3BvcnQgY2xpcCAod2hpY2ggaXMgaW4gcGFyZW50IGNvb3JkcykK
KyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4odGhpcykpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBtX3ZpZXdwb3J0LmNvbnRhaW5zKHBv
aW50SW5QYXJlbnQpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgJ
KHJldmlzaW9uIDc1MjcyKQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9y
dENvbnRhaW5lci5oOjc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA3IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA5IEdvb2dsZSwgSW5jLgor
ICAgIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaWZuZGVmIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyX2gKKyNkZWZpbmUgUmVuZGVyU1ZH
Vmlld3BvcnRDb250YWluZXJfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJT
VkdDb250YWluZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGlzIGlzIHVzZWQg
Zm9yIG5vbi1yb290IDxzdmc+IGVsZW1lbnRzIGFuZCA8bWFya2VyPiBlbGVtZW50cywgbmVpdGhl
ciBvZiB3aGljaCBhcmUgU1ZHVHJhbnNmb3JtYWJsZQorLy8gdGh1cyB3ZSBpbmhlcml0IGZyb20g
UmVuZGVyU1ZHQ29udGFpbmVyIGluc3RlYWQgb2YgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRh
aW5lcgorY2xhc3MgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZH
Q29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdWaWV3cG9ydENvbnRh
aW5lcihTVkdTdHlsZWRFbGVtZW50Kik7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGlz
U1ZHQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c1NWR1ZpZXdwb3J0Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lciI7IH0KKworICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3cG9ydFRyYW5zZm9y
bSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFy
ZW50VHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ZpZXdwb3J0KCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWaWV3cG9ydENsaXAoUGFpbnRJbmZvJik7CisgICAg
dmlydHVhbCBib29sIHBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnRJblBhcmVudCk7CisKKyAgICBGbG9hdFJlY3QgbV92aWV3cG9ydDsKKyAgICBtdXRhYmxl
IEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07Cit9OworICAKK2lubGlu
ZSBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciogdG9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
cihSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCAhc3RyY21w
KG9iamVjdC0+cmVuZGVyTmFtZSgpLCAiUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIiKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKj4ob2JqZWN0
KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBj
YXN0Lgordm9pZCB0b1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKGNvbnN0IFJlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyKik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShTVkcpCisjZW5kaWYgLy8gUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXJfaApJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAkocmV2
aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMu
Y3BwOjc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNW
R0ltYWdlQnVmZmVyVG9vbHMuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR0NvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgQWZmaW5lVHJhbnNmb3JtJiBjdXJyZW50Q29udGVu
dFRyYW5zZm9ybWF0aW9uKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEFmZmluZVRyYW5z
Zm9ybSwgc19jdXJyZW50Q29udGVudFRyYW5zZm9ybWF0aW9uLCAoKSk7CisgICAgcmV0dXJuIHNf
Y3VycmVudENvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKK30KKwordm9pZCBTVkdJbWFnZUJ1ZmZlclRv
b2xzOjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3Rl
bShjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRl
VHJhbnNmb3JtKQoreworICAgIGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCA9IHJlbmRlcmVy
OworICAgIEFTU0VSVChjdXJyZW50KTsKKworICAgIGFic29sdXRlVHJhbnNmb3JtID0gY3VycmVu
dENvbnRlbnRUcmFuc2Zvcm1hdGlvbigpOworICAgIHdoaWxlIChjdXJyZW50KSB7CisgICAgICAg
IGFic29sdXRlVHJhbnNmb3JtLm11bHRpcGx5KGN1cnJlbnQtPmxvY2FsVG9QYXJlbnRUcmFuc2Zv
cm0oKSk7CisgICAgICAgIGlmIChjdXJyZW50LT5pc1NWR1Jvb3QoKSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50KCk7CisgICAgfQorfQorCiti
b29sIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVj
dCYgYWJzb2x1dGVUYXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRh
cmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCit7CisgICAgSW50U2l6ZSBpbWFnZVNpemUocm91bmRlZEltYWdlQnVmZmVyU2l6
ZShjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LnNpemUoKSkpOworICAgIEludFNpemUgdW5jbGFt
cGVkSW1hZ2VTaXplKFNWR0ltYWdlQnVmZmVyVG9vbHM6OnJvdW5kZWRJbWFnZUJ1ZmZlclNpemUo
YWJzb2x1dGVUYXJnZXRSZWN0LnNpemUoKSkpOworCisgICAgLy8gRG9uJ3QgY3JlYXRlIGVtcHR5
IEltYWdlQnVmZmVycy4KKyAgICBpZiAoaW1hZ2VTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZSA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoaW1hZ2VTaXplLCBjb2xvclNwYWNlKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRleHQqIGltYWdlQ29udGV4dCA9IGlt
YWdlLT5jb250ZXh0KCk7CisgICAgQVNTRVJUKGltYWdlQ29udGV4dCk7CisKKyAgICAvLyBDb21w
ZW5zYXRlIHJvdW5kaW5nIGVmZmVjdHMsIGFzIHRoZSBhYnNvbHV0ZSB0YXJnZXQgcmVjdCBpcyB1
c2luZyBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFuZCB0aGUgaW1hZ2UgYnVmZmVyIHNpemUgaXMg
aW50ZWdlci4KKyAgICBpbWFnZUNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh1bmNsYW1wZWRJbWFn
ZVNpemUud2lkdGgoKSAvIGFic29sdXRlVGFyZ2V0UmVjdC53aWR0aCgpLCB1bmNsYW1wZWRJbWFn
ZVNpemUuaGVpZ2h0KCkgLyBhYnNvbHV0ZVRhcmdldFJlY3QuaGVpZ2h0KCkpKTsKKworICAgIGlt
YWdlQnVmZmVyID0gaW1hZ2UucmVsZWFzZSgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IFNWR0ltYWdlQnVmZmVyVG9vbHM6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyKiBpbWFnZSwgUmVuZGVyT2JqZWN0KiBpdGVtLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN1
YnRyZWVDb250ZW50VHJhbnNmb3JtYXRpb24pCit7CisgICAgQVNTRVJUKGl0ZW0pOworICAgIEFT
U0VSVChpbWFnZSk7CisgICAgQVNTRVJUKGltYWdlLT5jb250ZXh0KCkpOworCisgICAgUGFpbnRJ
bmZvIGluZm8oaW1hZ2UtPmNvbnRleHQoKSwgUGFpbnRJbmZvOjppbmZpbml0ZVJlY3QoKSwgUGFp
bnRQaGFzZUZvcmVncm91bmQsIDAsIDAsIDApOworCisgICAgQWZmaW5lVHJhbnNmb3JtJiBjb250
ZW50VHJhbnNmb3JtYXRpb24gPSBjdXJyZW50Q29udGVudFRyYW5zZm9ybWF0aW9uKCk7CisgICAg
QWZmaW5lVHJhbnNmb3JtIHNhdmVkQ29udGVudFRyYW5zZm9ybWF0aW9uID0gY29udGVudFRyYW5z
Zm9ybWF0aW9uOworICAgIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbi5tdWx0aXBseShzdWJ0cmVlQ29u
dGVudFRyYW5zZm9ybWF0aW9uKTsKKworICAgIGl0ZW0tPmxheW91dElmTmVlZGVkKCk7CisgICAg
aXRlbS0+cGFpbnQoaW5mbywgMCwgMCk7CisKKyAgICBjb250ZW50VHJhbnNmb3JtYXRpb24gPSBz
YXZlZENvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKK30KKwordm9pZCBTVkdJbWFnZUJ1ZmZlclRvb2xz
OjpjbGlwVG9JbWFnZUJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZEFi
c29sdXRlVGFyZ2V0UmVjdCwgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIpCit7Cisg
ICAgQVNTRVJUKGNvbnRleHQpOworICAgIEFTU0VSVChpbWFnZUJ1ZmZlcik7CisKKyAgICAvLyBU
aGUgbWFzayBpbWFnZSBoYXMgYmVlbiBjcmVhdGVkIGluIHRoZSBhYnNvbHV0ZSBjb29yZGluYXRl
IHNwYWNlLCBhcyB0aGUgaW1hZ2Ugc2hvdWxkIG5vdCBiZSBzY2FsZWQuCisgICAgLy8gU28gdGhl
IGFjdHVhbCBtYXNraW5nIHByb2Nlc3MgaGFzIHRvIGJlIGRvbmUgaW4gdGhlIGFic29sdXRlIGNv
b3JkaW5hdGUgc3BhY2UgYXMgd2VsbC4KKyAgICBjb250ZXh0LT5jb25jYXRDVE0oYWJzb2x1dGVU
cmFuc2Zvcm0uaW52ZXJzZSgpKTsKKyAgICBjb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFn
ZUJ1ZmZlci5nZXQoKSwgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCk7CisgICAgY29udGV4dC0+
Y29uY2F0Q1RNKGFic29sdXRlVHJhbnNmb3JtKTsKKworICAgIC8vIFdoZW4gbmVzdGluZyByZXNv
dXJjZXMsIHdpdGggb2JqZWN0Qm91bmRpbmdCb3ggYXMgY29udGVudCB1bml0IHR5cGVzLCB0aGVy
ZSdzIG5vIHVzZSBpbiBjYWNoaW5nIHRoZQorICAgIC8vIHJlc3VsdGluZyBpbWFnZSBidWZmZXIg
YXMgdGhlIHBhcmVudCByZXNvdXJjZSBhbHJlYWR5IGNhY2hlcyB0aGUgcmVzdWx0LgorICAgIGlm
ICghY3VycmVudENvbnRlbnRUcmFuc2Zvcm1hdGlvbigpLmlzSWRlbnRpdHkoKSkKKyAgICAgICAg
aW1hZ2VCdWZmZXIuY2xlYXIoKTsKK30KKworSW50U2l6ZSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpy
b3VuZGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1
cm4gSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoc2l6ZS53aWR0aCgpKSksIHN0YXRp
Y19jYXN0PGludD4obHJvdW5kZihzaXplLmhlaWdodCgpKSkpOworfQorCitGbG9hdFJlY3QgU1ZH
SW1hZ2VCdWZmZXJUb29sczo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKGNv
bnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJn
ZXRSZWN0KQoreworICAgIEFTU0VSVChyZW5kZXJlcik7CisKKyAgICBjb25zdCBSZW5kZXJTVkdS
b290KiBzdmdSb290ID0gU1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KHJlbmRl
cmVyKTsKKyAgICBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRl
VGFyZ2V0UmVjdDsKKyAgICBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LmludGVyc2VjdChzdmdS
b290LT5jb250ZW50Qm94UmVjdCgpKTsKKyAgICByZXR1cm4gY2xhbXBlZEFic29sdXRlVGFyZ2V0
UmVjdDsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuaAkocmV2aXNpb24gNzUyNzIpCShmcm9t
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuaDo3NTI3MikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFNWR0ltYWdlQnVm
ZmVyVG9vbHNfaAorI2RlZmluZSBTVkdJbWFnZUJ1ZmZlclRvb2xzX2gKKworI2lmIEVOQUJMRShT
VkcpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFz
cyBGbG9hdFJlY3Q7CitjbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7Citj
bGFzcyBSZW5kZXJPYmplY3Q7CisKK2NsYXNzIFNWR0ltYWdlQnVmZmVyVG9vbHMgOiBwdWJsaWMg
Tm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGNyZWF0ZUltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNs
YW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mLCBDb2xvclNwYWNl
KTsKKyAgICBzdGF0aWMgdm9pZCByZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciosIFJlbmRlck9iamVjdCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIHN0YXRpYyB2
b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZEFic29sdXRl
VGFyZ2V0UmVjdCwgT3duUHRyPEltYWdlQnVmZmVyPiYpOworCisgICAgc3RhdGljIHZvaWQgY2Fs
Y3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0oY29uc3Qg
UmVuZGVyT2JqZWN0KiwgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAg
c3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIoY29u
c3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRhcmdldFJlY3QpOwor
ICAgIHN0YXRpYyBJbnRTaXplIHJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXpl
Jik7CisKK3ByaXZhdGU6CisgICAgU1ZHSW1hZ2VCdWZmZXJUb29scygpIHsgfQorICAgIH5TVkdJ
bWFnZUJ1ZmZlclRvb2xzKCkgeyB9Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJEYXRhLmgJKHJldmlzaW9uIDc1MjcyKQkoZnJvbSBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJEYXRhLmg6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBA
CisvKgorICAgIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgU1ZHTWFya2VyRGF0YV9oCisjZGVmaW5l
IFNWR01hcmtlckRhdGFfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJGbG9hdENvbnZl
cnNpb24uaCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjsK
KworY2xhc3MgU1ZHTWFya2VyRGF0YSB7CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsKKyAgICAg
ICAgVW5rbm93biA9IDAsCisgICAgICAgIFN0YXJ0LAorICAgICAgICBNaWQsCisgICAgICAgIEVu
ZAorICAgIH07CisKKyAgICBTVkdNYXJrZXJEYXRhKGNvbnN0IFR5cGUmIHR5cGUgPSBVbmtub3du
LCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyID0gMCkKKyAgICAgICAgOiBtX3R5cGUo
dHlwZSkKKyAgICAgICAgLCBtX21hcmtlcihtYXJrZXIpCisgICAgeworICAgIH0KKworICAgIEZs
b2F0UG9pbnQgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlciogbWFya2VyKCkgY29uc3QgeyByZXR1cm4gbV9tYXJrZXI7IH0KKwor
ICAgIGZsb2F0IGN1cnJlbnRBbmdsZSgpIGNvbnN0CisgICAgeworICAgICAgICBGbG9hdFNpemUg
aW5zbG9wZUNoYW5nZSA9IG1faW5zbG9wZVBvaW50c1sxXSAtIG1faW5zbG9wZVBvaW50c1swXTsK
KyAgICAgICAgRmxvYXRTaXplIG91dHNsb3BlQ2hhbmdlID0gbV9vdXRzbG9wZVBvaW50c1sxXSAt
IG1fb3V0c2xvcGVQb2ludHNbMF07CisKKyAgICAgICAgZG91YmxlIGluc2xvcGUgPSByYWQyZGVn
KGF0YW4yKGluc2xvcGVDaGFuZ2UuaGVpZ2h0KCksIGluc2xvcGVDaGFuZ2Uud2lkdGgoKSkpOwor
ICAgICAgICBkb3VibGUgb3V0c2xvcGUgPSByYWQyZGVnKGF0YW4yKG91dHNsb3BlQ2hhbmdlLmhl
aWdodCgpLCBvdXRzbG9wZUNoYW5nZS53aWR0aCgpKSk7CisKKyAgICAgICAgZG91YmxlIGFuZ2xl
ID0gMDsKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBTdGFydDoKKyAg
ICAgICAgICAgIGFuZ2xlID0gb3V0c2xvcGU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBNaWQ6CisgICAgICAgICAgICBhbmdsZSA9IChpbnNsb3BlICsgb3V0c2xvcGUpIC8gMjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVuZDoKKyAgICAgICAgICAgIGFuZ2xl
ID0gaW5zbG9wZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGFuZ2xlKTsKKyAgICB9
CisKKyAgICB2b2lkIHVwZGF0ZVR5cGVBbmRNYXJrZXIoY29uc3QgVHlwZSYgdHlwZSwgUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlcikKKyAgICB7CisgICAgICAgIG1fdHlwZSA9IHR5cGU7
CisgICAgICAgIG1fbWFya2VyID0gbWFya2VyOworICAgIH0KKworICAgIHZvaWQgdXBkYXRlT3V0
c2xvcGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCisgICAgeworICAgICAgICBtX291dHNsb3Bl
UG9pbnRzWzBdID0gbV9vcmlnaW47CisgICAgICAgIG1fb3V0c2xvcGVQb2ludHNbMV0gPSBwb2lu
dDsKKyAgICB9CisKKyAgICB2b2lkIHVwZGF0ZU1hcmtlckRhdGFGb3JQYXRoRWxlbWVudChjb25z
dCBQYXRoRWxlbWVudCogZWxlbWVudCkKKyAgICB7CisgICAgICAgIEZsb2F0UG9pbnQqIHBvaW50
cyA9IGVsZW1lbnQtPnBvaW50czsKKworICAgICAgICBzd2l0Y2ggKGVsZW1lbnQtPnR5cGUpIHsK
KyAgICAgICAgY2FzZSBQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQ6CisgICAgICAgICAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzMTE1
IChQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQgbm90IGhhbmRsZWQgZm9yIDxtYXJrZXI+
KQorICAgICAgICAgICAgbV9vcmlnaW4gPSBwb2ludHNbMV07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBQYXRoRWxlbWVudEFkZEN1cnZlVG9Qb2ludDoKKyAgICAgICAgICAgIG1f
aW5zbG9wZVBvaW50c1swXSA9IHBvaW50c1sxXTsKKyAgICAgICAgICAgIG1faW5zbG9wZVBvaW50
c1sxXSA9IHBvaW50c1syXTsKKyAgICAgICAgICAgIG1fb3JpZ2luID0gcG9pbnRzWzJdOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludDoKKyAg
ICAgICAgICAgIG1fc3VicGF0aFN0YXJ0ID0gcG9pbnRzWzBdOworICAgICAgICBjYXNlIFBhdGhF
bGVtZW50QWRkTGluZVRvUG9pbnQ6CisgICAgICAgICAgICB1cGRhdGVJbnNsb3BlKHBvaW50c1sw
XSk7CisgICAgICAgICAgICBtX29yaWdpbiA9IHBvaW50c1swXTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFBhdGhFbGVtZW50Q2xvc2VTdWJwYXRoOgorICAgICAgICAgICAgdXBk
YXRlSW5zbG9wZShwb2ludHNbMF0pOworICAgICAgICAgICAgbV9vcmlnaW4gPSBtX3N1YnBhdGhT
dGFydDsKKyAgICAgICAgICAgIG1fc3VicGF0aFN0YXJ0ID0gRmxvYXRQb2ludCgpOworICAgICAg
ICB9CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlSW5zbG9wZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkKKyAgICB7CisgICAgICAgIG1faW5zbG9wZVBvaW50c1swXSA9IG1fb3Jp
Z2luOworICAgICAgICBtX2luc2xvcGVQb2ludHNbMV0gPSBwb2ludDsKKyAgICB9CisKKyAgICBU
eXBlIG1fdHlwZTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbV9tYXJrZXI7CisgICAg
RmxvYXRQb2ludCBtX29yaWdpbjsKKyAgICBGbG9hdFBvaW50IG1fc3VicGF0aFN0YXJ0OworICAg
IEZsb2F0UG9pbnQgbV9pbnNsb3BlUG9pbnRzWzJdOworICAgIEZsb2F0UG9pbnQgbV9vdXRzbG9w
ZVBvaW50c1syXTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8g
U1ZHTWFya2VyRGF0YV9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5
b3V0SW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtl
ckxheW91dEluZm8uY3BwCShyZXZpc2lvbiA3NTI3MikJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHTWFya2VyTGF5b3V0SW5mby5jcHA6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHTWFya2VyTGF5b3V0SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjMgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAg
IDIwMDQsIDIwMDUsIDIwMDggUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAg
ICAgIDIwMDUsIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAgICAgICAgICAg
ICAgICAgIDIwMDkgR29vZ2xlLCBJbmMuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKKworI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1ZH
TWFya2VyTGF5b3V0SW5mbzo6U1ZHTWFya2VyTGF5b3V0SW5mbygpCisgICAgOiBtX21pZE1hcmtl
cigwKQorICAgICwgbV9lbGVtZW50SW5kZXgoMCkKKyAgICAsIG1fc3Ryb2tlV2lkdGgoMCkKK3sK
K30KKworU1ZHTWFya2VyTGF5b3V0SW5mbzo6flNWR01hcmtlckxheW91dEluZm8oKQoreworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc1N0YXJ0QW5kTWlkTWFya2Vycyh2b2lkKiBpbmZv
UHRyLCBjb25zdCBQYXRoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBTVkdNYXJrZXJMYXlvdXRJ
bmZvJiBpbmZvID0gKnJlaW50ZXJwcmV0X2Nhc3Q8U1ZHTWFya2VyTGF5b3V0SW5mbyo+KGluZm9Q
dHIpOworICAgIFNWR01hcmtlckRhdGEmIG1hcmtlckRhdGEgPSBpbmZvLm1hcmtlckRhdGEoKTsK
KyAgICBpbnQmIGVsZW1lbnRJbmRleCA9IGluZm8uZWxlbWVudEluZGV4KCk7CisKKyAgICAvLyBG
aXJzdCB1cGRhdGUgdGhlIG91dHNsb3BlIGZvciB0aGUgcHJldmlvdXMgZWxlbWVudAorICAgIG1h
cmtlckRhdGEudXBkYXRlT3V0c2xvcGUoZWxlbWVudC0+cG9pbnRzWzBdKTsKKworICAgIC8vIERy
YXcgdGhlIG1hcmtlciBmb3IgdGhlIHByZXZpb3VzIGVsZW1lbnQKKyAgICBSZW5kZXJTVkdSZXNv
dXJjZU1hcmtlciogbWFya2VyID0gbWFya2VyRGF0YS5tYXJrZXIoKTsKKyAgICBpZiAoZWxlbWVu
dEluZGV4ID4gMCAmJiBtYXJrZXIpCisgICAgICAgIGluZm8uYWRkTGF5b3V0ZWRNYXJrZXIobWFy
a2VyLCBtYXJrZXJEYXRhLm9yaWdpbigpLCBtYXJrZXJEYXRhLmN1cnJlbnRBbmdsZSgpKTsKKwor
ICAgIC8vIFVwZGF0ZSBvdXIgbWFya2VyIGRhdGEgZm9yIHRoaXMgZWxlbWVudAorICAgIG1hcmtl
ckRhdGEudXBkYXRlTWFya2VyRGF0YUZvclBhdGhFbGVtZW50KGVsZW1lbnQpOworCisgICAgLy8g
QWZ0ZXIgZHJhd2luZyB0aGUgc3RhcnQgbWFya2VyLCBzd2l0Y2ggdG8gZHJhd2luZyBtaWQgbWFy
a2VycworICAgIGlmIChlbGVtZW50SW5kZXggPT0gMSkKKyAgICAgICAgbWFya2VyRGF0YS51cGRh
dGVUeXBlQW5kTWFya2VyKFNWR01hcmtlckRhdGE6Ok1pZCwgaW5mby5taWRNYXJrZXIoKSk7CisK
KyAgICArK2VsZW1lbnRJbmRleDsKK30KKworRmxvYXRSZWN0IFNWR01hcmtlckxheW91dEluZm86
OmNhbGN1bGF0ZUJvdW5kYXJpZXMoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIHN0YXJ0TWFya2Vy
LCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWlkTWFya2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlciogZW5kTWFya2VyLCBmbG9hdCBzdHJva2VXaWR0aCwgY29uc3QgUGF0aCYgcGF0aCkKK3sK
KyAgICBtX2xheW91dC5jbGVhcigpOworICAgIG1fbWlkTWFya2VyID0gbWlkTWFya2VyOworICAg
IG1fc3Ryb2tlV2lkdGggPSBzdHJva2VXaWR0aDsKKyAgICBtX2VsZW1lbnRJbmRleCA9IDA7Cisg
ICAgbV9tYXJrZXJEYXRhID0gU1ZHTWFya2VyRGF0YShTVkdNYXJrZXJEYXRhOjpTdGFydCwgc3Rh
cnRNYXJrZXIpOworICAgIHBhdGguYXBwbHkodGhpcywgcHJvY2Vzc1N0YXJ0QW5kTWlkTWFya2Vy
cyk7CisKKyAgICBpZiAoZW5kTWFya2VyKSB7CisgICAgICAgIG1fbWFya2VyRGF0YS51cGRhdGVU
eXBlQW5kTWFya2VyKFNWR01hcmtlckRhdGE6OkVuZCwgZW5kTWFya2VyKTsKKyAgICAgICAgYWRk
TGF5b3V0ZWRNYXJrZXIoZW5kTWFya2VyLCBtX21hcmtlckRhdGEub3JpZ2luKCksIG1fbWFya2Vy
RGF0YS5jdXJyZW50QW5nbGUoKSk7CisgICAgfQorCisgICAgaWYgKG1fbGF5b3V0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgVmVjdG9yPE1hcmtlckxheW91
dD46Oml0ZXJhdG9yIGl0ID0gbV9sYXlvdXQuYmVnaW4oKTsKKyAgICBWZWN0b3I8TWFya2VyTGF5
b3V0Pjo6aXRlcmF0b3IgZW5kID0gbV9sYXlvdXQuZW5kKCk7CisKKyAgICBGbG9hdFJlY3QgYm91
bmRzOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTWFya2VyTGF5b3V0
JiBsYXlvdXQgPSAqaXQ7CisKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtl
ckNvbnRlbnQgPSBsYXlvdXQubWFya2VyOworICAgICAgICBBU1NFUlQobWFya2VyQ29udGVudCk7
CisKKyAgICAgICAgYm91bmRzLnVuaXRlKG1hcmtlckNvbnRlbnQtPm1hcmtlckJvdW5kYXJpZXMo
bGF5b3V0Lm1hdHJpeCkpOworICAgIH0KKworICAgIHJldHVybiBib3VuZHM7Cit9CisKK3ZvaWQg
U1ZHTWFya2VyTGF5b3V0SW5mbzo6ZHJhd01hcmtlcnMoUGFpbnRJbmZvJiBwYWludEluZm8pCit7
CisgICAgaWYgKG1fbGF5b3V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVj
dG9yPE1hcmtlckxheW91dD46Oml0ZXJhdG9yIGl0ID0gbV9sYXlvdXQuYmVnaW4oKTsKKyAgICBW
ZWN0b3I8TWFya2VyTGF5b3V0Pjo6aXRlcmF0b3IgZW5kID0gbV9sYXlvdXQuZW5kKCk7CisKKyAg
ICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1hcmtlckxheW91dCYgbGF5b3V0
ID0gKml0OworICAgICAgICBsYXlvdXQubWFya2VyLT5kcmF3KHBhaW50SW5mbywgbGF5b3V0Lm1h
dHJpeCk7CisgICAgfQorfQorCit2b2lkIFNWR01hcmtlckxheW91dEluZm86OmFkZExheW91dGVk
TWFya2VyKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXIsIGNvbnN0IEZsb2F0UG9pbnQm
IG9yaWdpbiwgZmxvYXQgYW5nbGUpCit7CisgICAgQVNTRVJUKG1hcmtlcik7CisgICAgbV9sYXlv
dXQuYXBwZW5kKE1hcmtlckxheW91dChtYXJrZXIsIG1hcmtlci0+bWFya2VyVHJhbnNmb3JtYXRp
b24ob3JpZ2luLCBhbmdsZSwgbV9zdHJva2VXaWR0aCkpKTsKK30KKworfQorCisjZW5kaWYgLy8g
RU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtlckxheW91
dEluZm8uaAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR01hcmtl
ckxheW91dEluZm8uaDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJM
YXlvdXRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaWZuZGVmIFNWR01hcmtlckxheW91dEluZm9faAorI2RlZmluZSBTVkdNYXJr
ZXJMYXlvdXRJbmZvX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCisjaW5jbHVkZSAiU1ZHTWFya2VyRGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBhdGg7CitjbGFzcyBSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlcjsKKworc3RydWN0IE1hcmtlckxheW91dCB7CisgICAgTWFya2VyTGF5
b3V0KFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJPYmogPSAwLCBBZmZpbmVUcmFuc2Zv
cm0gbWF0cml4T2JqID0gQWZmaW5lVHJhbnNmb3JtKCkpCisgICAgICAgIDogbWFya2VyKG1hcmtl
ck9iaikKKyAgICAgICAgLCBtYXRyaXgobWF0cml4T2JqKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1hcmtlcik7CisgICAgfQorCisgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlcjsK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OworfTsKKworY2xhc3MgU1ZHTWFya2VyTGF5b3V0
SW5mbyA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgU1ZHTWFya2VyTGF5b3V0
SW5mbygpOworICAgIH5TVkdNYXJrZXJMYXlvdXRJbmZvKCk7CisKKyAgICBGbG9hdFJlY3QgY2Fs
Y3VsYXRlQm91bmRhcmllcyhSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogc3RhcnRNYXJrZXIsIFJl
bmRlclNWR1Jlc291cmNlTWFya2VyKiBtaWRNYXJrZXIsIFJlbmRlclNWR1Jlc291cmNlTWFya2Vy
KiBlbmRNYXJrZXIsIGZsb2F0IHN0cm9rZVdpZHRoLCBjb25zdCBQYXRoJik7CisgICAgdm9pZCBk
cmF3TWFya2VycyhQYWludEluZm8mKTsKKworICAgIC8vIFVzZWQgYnkgc3RhdGljIGlubGluZSBo
ZWxwZXIgZnVuY3Rpb25zIGluIFNWR01hcmtlckxheW91dEluZm8uY3BwCisgICAgU1ZHTWFya2Vy
RGF0YSYgbWFya2VyRGF0YSgpIHsgcmV0dXJuIG1fbWFya2VyRGF0YTsgfQorICAgIFJlbmRlclNW
R1Jlc291cmNlTWFya2VyKiBtaWRNYXJrZXIoKSBjb25zdCB7IHJldHVybiBtX21pZE1hcmtlcjsg
fQorICAgIGludCYgZWxlbWVudEluZGV4KCkgeyByZXR1cm4gbV9lbGVtZW50SW5kZXg7IH0KKyAg
ICB2b2lkIGFkZExheW91dGVkTWFya2VyKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiwgY29uc3Qg
RmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBhbmdsZSk7CisKK3ByaXZhdGU6CisgICAgUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIqIG1fbWlkTWFya2VyOworCisgICAgLy8gVXNlZCB3aGlsZSBsYXlv
dXRpbmcgbWFya2VycworICAgIGludCBtX2VsZW1lbnRJbmRleDsKKyAgICBTVkdNYXJrZXJEYXRh
IG1fbWFya2VyRGF0YTsKKyAgICBmbG9hdCBtX3N0cm9rZVdpZHRoOworCisgICAgLy8gSG9sZHMg
dGhlIGZpbmFsIGNvbXB1dGVkIHJlc3VsdAorICAgIFZlY3RvcjxNYXJrZXJMYXlvdXQ+IG1fbGF5
b3V0OworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUv
cmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwOjc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiAgICAgICAgICAgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqICAgICAgICAgICAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorCisjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJOb2RlUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Bh
dGguaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgi
CisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZU1hc2tlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRl
ICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVk
ZSAiVHJhbnNmb3JtU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitJbnRSZWN0IFNWR1JlbmRlclN1cHBvcnQ6OmNsaXBwZWRPdmVy
Zmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lcikKK3sKKyAgICAvLyBSZXR1cm4gZWFybHkgZm9yIGFueSBj
YXNlcyB3aGVyZSB3ZSBkb24ndCBhY3R1YWxseSBwYWludAorICAgIGlmIChvYmplY3QtPnN0eWxl
KCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFICYmICFvYmplY3QtPmVuY2xvc2luZ0xheWVyKCkt
Pmhhc1Zpc2libGVDb250ZW50KCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICAv
LyBQYXNzIG91ciBsb2NhbCBwYWludCByZWN0IHRvIGNvbXB1dGVSZWN0Rm9yUmVwYWludCgpIHdo
aWNoIHdpbGwKKyAgICAvLyBtYXAgdG8gcGFyZW50IGNvb3JkcyBhbmQgcmVjdXJzZSB1cCB0aGUg
cGFyZW50IGNoYWluLgorICAgIEludFJlY3QgcmVwYWludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KG9iamVjdC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgb2JqZWN0LT5j
b21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgcmVwYWludFJlY3QpOworICAg
IHJldHVybiByZXBhaW50UmVjdDsKK30KKwordm9pZCBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRl
UmVjdEZvclJlcGFpbnQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiByZXBhaW50UmVjdCwgYm9vbCBmaXhlZCkKK3sK
KyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBvYmplY3QtPnN0eWxlKCktPnN2
Z1N0eWxlKCk7CisgICAgaWYgKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9IHN2Z1N0eWxlLT5z
aGFkb3coKSkKKyAgICAgICAgc2hhZG93LT5hZGp1c3RSZWN0Rm9yU2hhZG93KHJlcGFpbnRSZWN0
KTsKKworICAgIC8vIFRyYW5zbGF0ZSB0byBjb29yZHMgaW4gb3VyIHBhcmVudCByZW5kZXJlciwg
YW5kIHRoZW4gY2FsbCBjb21wdXRlUmVjdEZvclJlcGFpbnQgb24gb3VyIHBhcmVudAorICAgIHJl
cGFpbnRSZWN0ID0gb2JqZWN0LT5sb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkubWFwUmVjdChyZXBh
aW50UmVjdCk7CisgICAgb2JqZWN0LT5wYXJlbnQoKS0+Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJl
cGFpbnRDb250YWluZXIsIHJlcGFpbnRSZWN0LCBmaXhlZCk7Cit9CisKK3ZvaWQgU1ZHUmVuZGVy
U3VwcG9ydDo6bWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwg
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgLCBib29s
IHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkKK3sKKyAgICBB
U1NFUlQoIWZpeGVkKTsgLy8gV2Ugc2hvdWxkIGhhdmUgbm8gZml4ZWQgY29udGVudCBpbiB0aGUg
U1ZHIHJlbmRlcmluZyB0cmVlLgorICAgIEFTU0VSVCh1c2VUcmFuc2Zvcm1zKTsgLy8gTWFwcGlu
ZyBhIHBvaW50IHRocm91Z2ggU1ZHIHcvbyByZXNwZWN0aW5nIHRyYW5zZm9ybXMgaXMgdXNlbGVz
cy4KKyAgICB0cmFuc2Zvcm1TdGF0ZS5hcHBseVRyYW5zZm9ybShvYmplY3QtPmxvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0oKSk7CisgICAgb2JqZWN0LT5wYXJlbnQoKS0+bWFwTG9jYWxUb0NvbnRhaW5l
cihyZXBhaW50Q29udGFpbmVyLCBmaXhlZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUp
OworfQorCitib29sIFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIFBhaW50SW5mbyYgcGFpbnRJbmZvKQoreworICAgIEFTU0VS
VChvYmplY3QpOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwor
ICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUg
PSBzdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3ZnU3R5bGUpOworCisgICAgLy8gU2V0
dXAgdHJhbnNwYXJlbmN5IGxheWVycyBiZWZvcmUgc2V0dGluZyB1cCBTVkcgcmVzb3VyY2VzIQor
ICAgIGZsb2F0IG9wYWNpdHkgPSBzdHlsZS0+b3BhY2l0eSgpOworICAgIGNvbnN0IFNoYWRvd0Rh
dGEqIHNoYWRvdyA9IHN2Z1N0eWxlLT5zaGFkb3coKTsKKyAgICBpZiAob3BhY2l0eSA8IDEgfHwg
c2hhZG93KSB7CisgICAgICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IG9iamVjdC0+cmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKworICAgICAgICBpZiAob3BhY2l0eSA8IDEpIHsK
KyAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKHJlcGFpbnRSZWN0KTsKKyAgICAg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNoYWRvdykgeworICAgICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmNsaXAocmVwYWludFJlY3QpOworICAgICAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNldFNoYWRvdyhJbnRTaXplKHNoYWRvdy0+eCgpLCBzaGFkb3ctPnkoKSksIHNoYWRv
dy0+Ymx1cigpLCBzaGFkb3ctPmNvbG9yKCksIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgICAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNl
c0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3Qob2JqZWN0KTsKKyAgICBpZiAo
IXJlc291cmNlcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXIqIG1hc2tlciA9IHJlc291cmNlcy0+bWFza2VyKCkpIHsKKyAgICAgICAgaWYg
KCFtYXNrZXItPmFwcGx5UmVzb3VyY2Uob2JqZWN0LCBzdHlsZSwgcGFpbnRJbmZvLmNvbnRleHQs
IEFwcGx5VG9EZWZhdWx0TW9kZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBlciA9IHJlc291cmNlcy0+
Y2xpcHBlcigpKSB7CisgICAgICAgIGlmICghY2xpcHBlci0+YXBwbHlSZXNvdXJjZShvYmplY3Qs
IHN0eWxlLCBwYWludEluZm8uY29udGV4dCwgQXBwbHlUb0RlZmF1bHRNb2RlKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBpZiAo
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IHJlc291cmNlcy0+ZmlsdGVyKCkpIHsK
KyAgICAgICAgaWYgKCFmaWx0ZXItPmFwcGx5UmVzb3VyY2Uob2JqZWN0LCBzdHlsZSwgcGFpbnRJ
bmZvLmNvbnRleHQsIEFwcGx5VG9EZWZhdWx0TW9kZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTVkdSZW5k
ZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KFJlbmRlck9iamVjdCogb2JqZWN0LCBQ
YWludEluZm8mIHBhaW50SW5mbywgR3JhcGhpY3NDb250ZXh0KiBzYXZlZENvbnRleHQpCit7Cisj
aWYgIUVOQUJMRShGSUxURVJTKQorICAgIFVOVVNFRF9QQVJBTShzYXZlZENvbnRleHQpOworI2Vu
ZGlmCisKKyAgICBBU1NFUlQob2JqZWN0KTsKKworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSA9IG9iamVjdC0+c3R5bGUoKTsKKyAgICBBU1NFUlQoc3R5bGUpOworCisgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CisgICAgQVNTRVJUKHN2
Z1N0eWxlKTsKKworI2lmIEVOQUJMRShGSUxURVJTKQorICAgIFNWR1Jlc291cmNlcyogcmVzb3Vy
Y2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChv
YmplY3QpOworICAgIGlmIChyZXNvdXJjZXMpIHsKKyAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyKiBmaWx0ZXIgPSByZXNvdXJjZXMtPmZpbHRlcigpKSB7CisgICAgICAgICAgICBm
aWx0ZXItPnBvc3RBcHBseVJlc291cmNlKG9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIEFwcGx5
VG9EZWZhdWx0TW9kZSwgLyogcGF0aCAqLzApOworICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQgPSBzYXZlZENvbnRleHQ7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGlmIChz
dHlsZS0+b3BhY2l0eSgpIDwgMSkKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmVuZFRyYW5z
cGFyZW5jeUxheWVyKCk7CisKKyAgICBpZiAoc3ZnU3R5bGUtPnNoYWRvdygpKQorICAgICAgICBw
YWludEluZm8uY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKK30KKwordm9pZCBTVkdS
ZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhjb25zdCBSZW5kZXJP
YmplY3QqIGNvbnRhaW5lciwgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwgRmxvYXRSZWN0
JiBzdHJva2VCb3VuZGluZ0JveCwgRmxvYXRSZWN0JiByZXBhaW50Qm91bmRpbmdCb3gpCit7Cisg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBjb250YWluZXItPmZpcnN0Q2hpbGQoKTsg
Y3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYg
KGN1cnJlbnQtPmlzU1ZHSGlkZGVuQ29udGFpbmVyKCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSA9IGN1cnJlbnQtPmxv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm0oKTsKKyAgICAgICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5
KCkpIHsKKyAgICAgICAgICAgIG9iamVjdEJvdW5kaW5nQm94LnVuaXRlKGN1cnJlbnQtPm9iamVj
dEJvdW5kaW5nQm94KCkpOworICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5pdGUoY3Vy
cmVudC0+c3Ryb2tlQm91bmRpbmdCb3goKSk7CisgICAgICAgICAgICByZXBhaW50Qm91bmRpbmdC
b3gudW5pdGUoY3VycmVudC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvYmplY3RCb3VuZGluZ0JveC51bml0ZSh0cmFuc2Zv
cm0ubWFwUmVjdChjdXJyZW50LT5vYmplY3RCb3VuZGluZ0JveCgpKSk7CisgICAgICAgICAgICBz
dHJva2VCb3VuZGluZ0JveC51bml0ZSh0cmFuc2Zvcm0ubWFwUmVjdChjdXJyZW50LT5zdHJva2VC
b3VuZGluZ0JveCgpKSk7CisgICAgICAgICAgICByZXBhaW50Qm91bmRpbmdCb3gudW5pdGUodHJh
bnNmb3JtLm1hcFJlY3QoY3VycmVudC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkp
OworICAgICAgICB9CisgICAgfQorfQorCitib29sIFNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5m
b0ludGVyc2VjdHNSZXBhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIGxvY2FsUmVwYWludFJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUcmFuc2Zvcm0sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvKQoreworICAgIGlmIChsb2NhbFRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAg
ICAgIHJldHVybiBsb2NhbFJlcGFpbnRSZWN0LmludGVyc2VjdHMocGFpbnRJbmZvLnJlY3QpOwor
CisgICAgcmV0dXJuIGxvY2FsVHJhbnNmb3JtLm1hcFJlY3QobG9jYWxSZXBhaW50UmVjdCkuaW50
ZXJzZWN0cyhwYWludEluZm8ucmVjdCk7Cit9CisKK2NvbnN0IFJlbmRlclNWR1Jvb3QqIFNWR1Jl
bmRlclN1cHBvcnQ6OmZpbmRUcmVlUm9vdE9iamVjdChjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0
KQoreworICAgIHdoaWxlIChzdGFydCAmJiAhc3RhcnQtPmlzU1ZHUm9vdCgpKQorICAgICAgICBz
dGFydCA9IHN0YXJ0LT5wYXJlbnQoKTsKKworICAgIEFTU0VSVChzdGFydCk7CisgICAgQVNTRVJU
KHN0YXJ0LT5pc1NWR1Jvb3QoKSk7CisgICAgcmV0dXJuIHRvUmVuZGVyU1ZHUm9vdChzdGFydCk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlUmVzb3VyY2VzT2ZDaGlsZHJlbihS
ZW5kZXJPYmplY3QqIHN0YXJ0KQoreworICAgIEFTU0VSVCghc3RhcnQtPm5lZWRzTGF5b3V0KCkp
OworICAgIGlmIChTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpj
YWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3Qoc3RhcnQpKQorICAgICAgICByZXNvdXJjZXMt
PnJlbW92ZUNsaWVudEZyb21DYWNoZShzdGFydCwgZmFsc2UpOworCisgICAgZm9yIChSZW5kZXJP
YmplY3QqIGNoaWxkID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpCisgICAgICAgIGludmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKGNo
aWxkKTsKK30KKwordm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbihSZW5kZXJP
YmplY3QqIHN0YXJ0LCBib29sIHNlbGZOZWVkc0xheW91dCkKK3sKKyAgICBib29sIGxheW91dFNp
emVDaGFuZ2VkID0gZmluZFRyZWVSb290T2JqZWN0KHN0YXJ0KS0+aXNMYXlvdXRTaXplQ2hhbmdl
ZCgpOworICAgIEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj4gbm90bGF5b3V0ZWRPYmplY3RzOworCisg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgYm9vbCBuZWVkc0xheW91
dCA9IHNlbGZOZWVkc0xheW91dDsKKworICAgICAgICBpZiAobGF5b3V0U2l6ZUNoYW5nZWQpIHsK
KyAgICAgICAgICAgIC8vIFdoZW4gc2VsZk5lZWRzTGF5b3V0IGlzIGZhbHNlIGFuZCB0aGUgbGF5
b3V0IHNpemUgY2hhbmdlZCwgd2UgaGF2ZSB0byBjaGVjayB3aGV0aGVyIHRoaXMgY2hpbGQgdXNl
cyByZWxhdGl2ZSBsZW5ndGhzCisgICAgICAgICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9
IGNoaWxkLT5ub2RlKCktPmlzU1ZHRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+
KGNoaWxkLT5ub2RlKCkpIDogMCkgeworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc1N0
eWxlZCgpICYmIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+aGFzUmVs
YXRpdmVMZW5ndGhzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgbGF5b3V0
IHNpemUgY2hhbmdlZCBhbmQgd2hlbiB1c2luZyByZWxhdGl2ZSB2YWx1ZXMgdGVsbCB0aGUgUmVu
ZGVyU1ZHUGF0aCB0byB1cGRhdGUgaXRzIFBhdGggb2JqZWN0CisgICAgICAgICAgICAgICAgICAg
IGlmIChjaGlsZC0+aXNTVkdQYXRoKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRl
clNWR1BhdGgoY2hpbGQpLT5zZXROZWVkc1BhdGhVcGRhdGUoKTsKKworICAgICAgICAgICAgICAg
ICAgICBuZWVkc0xheW91dCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG5lZWRzTGF5b3V0KSB7CisgICAgICAgICAgICBj
aGlsZC0+c2V0TmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgY2hpbGQtPmxh
eW91dCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGNoaWxkLT5uZWVkc0xh
eW91dCgpKQorICAgICAgICAgICAgICAgIGNoaWxkLT5sYXlvdXQoKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGxheW91dFNpemVDaGFuZ2VkKQorICAgICAgICAgICAgICAgIG5vdGxheW91dGVkT2Jq
ZWN0cy5hZGQoY2hpbGQpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKCFjaGlsZC0+bmVl
ZHNMYXlvdXQoKSk7CisgICAgfQorCisgICAgaWYgKCFsYXlvdXRTaXplQ2hhbmdlZCkgeworICAg
ICAgICBBU1NFUlQobm90bGF5b3V0ZWRPYmplY3RzLmlzRW1wdHkoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgbGF5b3V0IHNpemUgY2hhbmdlZCwgaW52YWxpZGF0
ZSBhbGwgcmVzb3VyY2VzIG9mIGFsbCBjaGlsZHJlbiB0aGF0IGRpZG4ndCBnbyB0aHJvdWdoIHRo
ZSBsYXlvdXQoKSBjb2RlIHBhdGguCisgICAgSGFzaFNldDxSZW5kZXJPYmplY3QqPjo6aXRlcmF0
b3IgZW5kID0gbm90bGF5b3V0ZWRPYmplY3RzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxSZW5k
ZXJPYmplY3QqPjo6aXRlcmF0b3IgaXQgPSBub3RsYXlvdXRlZE9iamVjdHMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICBpbnZhbGlkYXRlUmVzb3VyY2VzT2ZDaGlsZHJlbigqaXQp
OworfQorCitib29sIFNWR1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4oY29uc3QgUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgLy8gU1ZHIGRvZXNuJ3Qgc3VwcG9ydCBpbmRlcGVu
ZGVudCB4L3kgb3ZlcmZsb3cKKyAgICBBU1NFUlQob2JqZWN0LT5zdHlsZSgpLT5vdmVyZmxvd1go
KSA9PSBvYmplY3QtPnN0eWxlKCktPm92ZXJmbG93WSgpKTsKKworICAgIC8vIE9TQ1JPTEwgaXMg
bmV2ZXIgc2V0IGZvciBTVkcgLSBzZWUgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5
bGUKKyAgICBBU1NFUlQob2JqZWN0LT5zdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPU0NST0xMKTsK
KworICAgIC8vIFJlbmRlclNWR1Jvb3Qgc2hvdWxkIG5ldmVyIHF1ZXJ5IGZvciBvdmVyZmxvdyBz
dGF0ZSAtIGl0IHNob3VsZCBhbHdheXMgY2xpcCBpdHNlbGYgdG8gdGhlIGluaXRpYWwgdmlld3Bv
cnQgc2l6ZS4KKyAgICBBU1NFUlQoIW9iamVjdC0+aXNSb290KCkpOworCisgICAgcmV0dXJuIG9i
amVjdC0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0gT0hJRERFTjsKK30KKwordm9pZCBTVkdSZW5k
ZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXMoY29uc3QgUmVuZGVy
T2JqZWN0KiBvYmplY3QsIEZsb2F0UmVjdCYgcmVwYWludFJlY3QpCit7CisgICAgQVNTRVJUKG9i
amVjdCk7CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisgICAg
QVNTRVJUKHN0eWxlKTsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0
eWxlLT5zdmdTdHlsZSgpOworICAgIEFTU0VSVChzdmdTdHlsZSk7CisKKyAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihvYmplY3QpOworICAgIFNW
R1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNl
c0ZvclJlbmRlck9iamVjdChyZW5kZXJlcik7CisgICAgaWYgKCFyZXNvdXJjZXMpIHsKKyAgICAg
ICAgaWYgKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9IHN2Z1N0eWxlLT5zaGFkb3coKSkKKyAg
ICAgICAgICAgIHNoYWRvdy0+YWRqdXN0UmVjdEZvclNoYWRvdyhyZXBhaW50UmVjdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBpZiAoUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IHJlc291cmNlcy0+ZmlsdGVyKCkpCisgICAgICAg
IHJlcGFpbnRSZWN0ID0gZmlsdGVyLT5yZXNvdXJjZUJvdW5kaW5nQm94KHJlbmRlcmVyKTsKKyNl
bmRpZgorCisgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBlciA9IHJlc291
cmNlcy0+Y2xpcHBlcigpKQorICAgICAgICByZXBhaW50UmVjdC5pbnRlcnNlY3QoY2xpcHBlci0+
cmVzb3VyY2VCb3VuZGluZ0JveChyZW5kZXJlcikpOworCisgICAgaWYgKFJlbmRlclNWR1Jlc291
cmNlTWFza2VyKiBtYXNrZXIgPSByZXNvdXJjZXMtPm1hc2tlcigpKQorICAgICAgICByZXBhaW50
UmVjdC5pbnRlcnNlY3QobWFza2VyLT5yZXNvdXJjZUJvdW5kaW5nQm94KHJlbmRlcmVyKSk7CisK
KyAgICBpZiAoY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gc3ZnU3R5bGUtPnNoYWRvdygpKQor
ICAgICAgICBzaGFkb3ctPmFkanVzdFJlY3RGb3JTaGFkb3cocmVwYWludFJlY3QpOworfQorCiti
b29sIFNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEoUmVuZGVyT2JqZWN0KiBv
YmplY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIEFTU0VSVChvYmplY3QpOwor
CisgICAgLy8gV2UganVzdCB0YWtlIGNsaXBwZXJzIGludG8gYWNjb3VudCB0byBkZXRlcm1pbmUg
aWYgYSBwb2ludCBpcyBvbiB0aGUgbm9kZS4gVGhlIFNwZWNpZmljYXRpb24gbWF5CisgICAgLy8g
Y2hhbmdlIGxhdGVyIGFuZCB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgbWFza2Vycy4KKyAgICBTVkdS
ZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNG
b3JSZW5kZXJPYmplY3Qob2JqZWN0KTsKKyAgICBpZiAoIXJlc291cmNlcykKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0g
cmVzb3VyY2VzLT5jbGlwcGVyKCkpCisgICAgICAgIHJldHVybiBjbGlwcGVyLT5oaXRUZXN0Q2xp
cENvbnRlbnQob2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpLCBwb2ludCk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9D
b250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCk7Cisg
ICAgQVNTRVJUKHN0eWxlKTsKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQob2JqZWN0
LT5ub2RlKCkpOworICAgIEFTU0VSVChvYmplY3QtPm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwor
CisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7
CisgICAgQVNTRVJUKHN2Z1N0eWxlKTsKKworICAgIFNWR0VsZW1lbnQqIGxlbmd0aENvbnRleHQg
PSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ob2JqZWN0LT5ub2RlKCkpOworICAgIGNvbnRleHQt
PnNldFN0cm9rZVRoaWNrbmVzcyhzdmdTdHlsZS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShsZW5ndGhD
b250ZXh0KSk7CisgICAgY29udGV4dC0+c2V0TGluZUNhcChzdmdTdHlsZS0+Y2FwU3R5bGUoKSk7
CisgICAgY29udGV4dC0+c2V0TGluZUpvaW4oc3ZnU3R5bGUtPmpvaW5TdHlsZSgpKTsKKyAgICBp
ZiAoc3ZnU3R5bGUtPmpvaW5TdHlsZSgpID09IE1pdGVySm9pbikKKyAgICAgICAgY29udGV4dC0+
c2V0TWl0ZXJMaW1pdChzdmdTdHlsZS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKKworICAgIGNvbnN0
IFZlY3RvcjxTVkdMZW5ndGg+JiBkYXNoZXMgPSBzdmdTdHlsZS0+c3Ryb2tlRGFzaEFycmF5KCk7
CisgICAgaWYgKGRhc2hlcy5pc0VtcHR5KCkpCisgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVN0
eWxlKFNvbGlkU3Ryb2tlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgRGFzaEFycmF5IGRhc2hBcnJh
eTsKKyAgICAgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGRhc2hlcy5lbmQoKTsKKyAgICAgICAgZm9yIChWZWN0b3I8U1ZHTGVuZ3RoPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBkYXNoZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAg
ZGFzaEFycmF5LmFwcGVuZCgoKml0KS52YWx1ZShsZW5ndGhDb250ZXh0KSk7CisKKyAgICAgICAg
Y29udGV4dC0+c2V0TGluZURhc2goZGFzaEFycmF5LCBzdmdTdHlsZS0+c3Ryb2tlRGFzaE9mZnNl
dCgpLnZhbHVlKGxlbmd0aENvbnRleHQpKTsKKyAgICB9Cit9CisKK30KKworI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgJKHJldmlzaW9uIDc1Mjcy
KQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0Lmg6NzUyNzIpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODQgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiAgICAgICAgICAgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFNWR1JlbmRlclN1cHBvcnRf
aAorI2RlZmluZSBTVkdSZW5kZXJTdXBwb3J0X2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVk
ZSAiUGFpbnRJbmZvLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2lu
dDsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgUmVuZGVyQm94
TW9kZWxPYmplY3Q7CitjbGFzcyBSZW5kZXJPYmplY3Q7CitjbGFzcyBSZW5kZXJTdHlsZTsKK2Ns
YXNzIFJlbmRlclNWR1Jvb3Q7CitjbGFzcyBUcmFuc2Zvcm1TdGF0ZTsKKworLy8gU1ZHUmVuZGVy
ZXJTdXBwb3J0IGlzIGEgaGVscGVyIGNsYXNzIHNoYXJpbmcgY29kZSBiZXR3ZWVuIGFsbCBTVkcg
cmVuZGVyZXJzLgorY2xhc3MgU1ZHUmVuZGVyU3VwcG9ydCB7CitwdWJsaWM6CisgICAgLy8gVXNl
ZCBieSBhbGwgU1ZHIHJlbmRlcmVycyB3aG8gYXBwbHkgY2xpcC9maWx0ZXIvZXRjLiByZXNvdXJj
ZXMgdG8gdGhlIHJlbmRlcmVyIGNvbnRlbnQKKyAgICBzdGF0aWMgYm9vbCBwcmVwYXJlVG9SZW5k
ZXJTVkdDb250ZW50KFJlbmRlck9iamVjdCosIFBhaW50SW5mbyYpOworICAgIHN0YXRpYyB2b2lk
IGZpbmlzaFJlbmRlclNWR0NvbnRlbnQoUmVuZGVyT2JqZWN0KiwgUGFpbnRJbmZvJiwgR3JhcGhp
Y3NDb250ZXh0KiBzYXZlZENvbnRleHQpOworCisgICAgLy8gU2hhcmVzIGNoaWxkIGxheW91dGlu
ZyBjb2RlIGJldHdlZW4gUmVuZGVyU1ZHUm9vdC9SZW5kZXJTVkcoSGlkZGVuKUNvbnRhaW5lcgor
ICAgIHN0YXRpYyB2b2lkIGxheW91dENoaWxkcmVuKFJlbmRlck9iamVjdCosIGJvb2wgc2VsZk5l
ZWRzTGF5b3V0KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBkZXRlcm1pbmluZyB3aGV0ZXIg
b3ZlcmZsb3cgaXMgaGlkZGVuCisgICAgc3RhdGljIGJvb2wgaXNPdmVyZmxvd0hpZGRlbihjb25z
dCBSZW5kZXJPYmplY3QqKTsKKworICAgIC8vIENhbGN1bGF0ZXMgdGhlIHJlcGFpbnRSZWN0IGlu
IGNvbWJpbmF0aW9uIHdpdGggZmlsdGVyLCBjbGlwcGVyIGFuZCBtYXNrZXIgaW4gbG9jYWwgY29v
cmRpbmF0ZXMuCisgICAgc3RhdGljIHZvaWQgaW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3Vy
Y2VzKGNvbnN0IFJlbmRlck9iamVjdCosIEZsb2F0UmVjdCYpOworCisgICAgLy8gRGV0ZXJtaW5l
cyB3aGV0aGVyIHRoZSBwYXNzZWQgcG9pbnQgbGllcyBpbiBhIGNsaXBwaW5nIGFyZWEKKyAgICBz
dGF0aWMgYm9vbCBwb2ludEluQ2xpcHBpbmdBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IEZsb2F0
UG9pbnQmKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVz
KGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyLCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5n
Qm94LCBGbG9hdFJlY3QmIHN0cm9rZUJvdW5kaW5nQm94LCBGbG9hdFJlY3QmIHJlcGFpbnRCb3Vu
ZGluZ0JveCk7CisgICAgc3RhdGljIGJvb2wgcGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgbG9jYWxSZXBhaW50UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBsb2NhbFRyYW5zZm9ybSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pOworCisgICAgLy8g
SW1wb3J0YW50IGZ1bmN0aW9ucyB1c2VkIGJ5IG5lYXJseSBhbGwgU1ZHIHJlbmRlcmVycyBjZW50
cmFsaXppbmcgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbnMgLyByZXBhaW50IHJlY3QgY2FsY3Vs
YXRpb25zCisgICAgc3RhdGljIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQo
UmVuZGVyT2JqZWN0KiwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOwor
ICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJPYmplY3QqLCBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQp
OworICAgIHN0YXRpYyB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0
KiwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNm
b3JtcywgYm9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUmKTsKKworICAgIC8vIFNoYXJlZCBiZXR3
ZWVuIFNWRyByZW5kZXJlcnMgYW5kIHJlc291cmNlcy4KKyAgICBzdGF0aWMgdm9pZCBhcHBseVN0
cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRlclN0eWxlKiwg
Y29uc3QgUmVuZGVyT2JqZWN0Kik7CisKKyAgICAvLyBGSVhNRTogVGhlc2UgbWV0aG9kcyBkbyBu
b3QgYmVsb25nIGhlcmUuCisgICAgc3RhdGljIGNvbnN0IFJlbmRlclNWR1Jvb3QqIGZpbmRUcmVl
Um9vdE9iamVjdChjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0KTsKKworcHJpdmF0ZToKKyAgICAv
LyBUaGlzIGNsYXNzIGlzIG5vdCBjb25zdHJ1Y3RhYmxlLgorICAgIFNWR1JlbmRlclN1cHBvcnQo
KTsKKyAgICB+U1ZHUmVuZGVyU3VwcG9ydCgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZiAvLyBTVkdSZW5kZXJTdXBwb3J0X2gK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJ
KHJldmlzaW9uIDc1MjcyKQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqICAg
ICAgICAgICAoQykgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcp
CisjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NU
eXBlcy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIklubGluZVRleHRCb3gu
aCIKKyNpbmNsdWRlICJMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJOb2Rl
UmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiUGF0dGVybkF0dHJp
YnV0ZXMuaCIKKyNpbmNsdWRlICJSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRl
ICJSZW5kZXJJbWFnZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgorI2luY2x1
ZGUgIlJlbmRlclNWR0dyYWRpZW50U3RvcC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0ltYWdlLmgi
CisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Bh
dGguaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgiCisj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIgor
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSb290Lmgi
CisjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQu
aCIKKyNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRWxsaXBzZUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiU1ZHTGlu
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCisjaW5jbHVkZSAi
U1ZHUGF0aFBhcnNlckZhY3RvcnkuaCIKKyNpbmNsdWRlICJTVkdQYXR0ZXJuRWxlbWVudC5oIgor
I2luY2x1ZGUgIlNWR1BvaW50TGlzdC5oIgorI2luY2x1ZGUgIlNWR1BvbHlFbGVtZW50LmgiCisj
aW5jbHVkZSAiU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVjdEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCisjaW5jbHVkZSAiU1ZHU3Rv
cEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxt
YXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLyoqIGNsYXNzICsgaW9tYW5pcCB0byBo
ZWxwIHN0cmVhbWluZyBsaXN0IHNlcGFyYXRvcnMsIGkuZS4gIiwgIiBpbiBzdHJpbmcgImEsIGIs
IGMsIGQiCisgKiBDYW4gYmUgdXNlZCBpbiBjYXNlcyB3aGVyZSB5b3UgZG9uJ3Qga25vdyB3aGlj
aCBpdGVtIGluIHRoZSBsaXN0IGlzIHRoZSBmaXJzdAorICogb25lIHRvIGJlIHByaW50ZWQsIGJ1
dCBzdGlsbCB3YW50IHRvIGF2b2lkIHN0cmluZ3MgbGlrZSAiLCBiLCBjIi4KKyAqLworY2xhc3Mg
VGV4dFN0cmVhbVNlcGFyYXRvciB7CitwdWJsaWM6CisgICAgVGV4dFN0cmVhbVNlcGFyYXRvcihj
b25zdCBTdHJpbmcmIHMpCisgICAgICAgIDogbV9zZXBhcmF0b3IocykKKyAgICAgICAgLCBtX25l
ZWRUb1NlcGFyYXRlKGZhbHNlKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIFRleHRTdHJlYW1TZXBhcmF0b3Im
KTsKKworICAgIFN0cmluZyBtX3NlcGFyYXRvcjsKKyAgICBib29sIG1fbmVlZFRvU2VwYXJhdGU7
Cit9OworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUZXh0U3RyZWFt
U2VwYXJhdG9yJiBzZXApCit7CisgICAgaWYgKHNlcC5tX25lZWRUb1NlcGFyYXRlKQorICAgICAg
ICB0cyA8PCBzZXAubV9zZXBhcmF0b3I7CisgICAgZWxzZQorICAgICAgICBzZXAubV9uZWVkVG9T
ZXBhcmF0ZSA9IHRydWU7CisgICAgcmV0dXJuIHRzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZVR5cGU+CitzdGF0aWMgdm9pZCB3cml0ZU5hbWVWYWx1ZVBhaXIoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IGNoYXIqIG5hbWUsIFZhbHVlVHlwZSB2YWx1ZSkKK3sKKyAgICB0cyA8PCAiIFsiIDw8
IG5hbWUgPDwgIj0iIDw8IHZhbHVlIDw8ICJdIjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWVUeXBlPgorc3RhdGljIHZvaWQgd3JpdGVOYW1lQW5kUXVvdGVkVmFsdWUoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IGNoYXIqIG5hbWUsIFZhbHVlVHlwZSB2YWx1ZSkKK3sKKyAgICB0cyA8PCAiIFsi
IDw8IG5hbWUgPDwgIj1cIiIgPDwgdmFsdWUgPDwgIlwiXSI7Cit9CisKK3N0YXRpYyB2b2lkIHdy
aXRlSWZOb3RFbXB0eShUZXh0U3RyZWFtJiB0cywgY29uc3QgY2hhciogbmFtZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgd3JpdGVO
YW1lVmFsdWVQYWlyKHRzLCBuYW1lLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHlwZT4KK3N0YXRpYyB2b2lkIHdyaXRlSWZOb3REZWZhdWx0KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBjaGFyKiBuYW1lLCBWYWx1ZVR5cGUgdmFsdWUsIFZhbHVlVHlwZSBkZWZhdWx0VmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlICE9IGRlZmF1bHRWYWx1ZSkKKyAgICAgICAgd3JpdGVOYW1lVmFs
dWVQYWlyKHRzLCBuYW1lLCB2YWx1ZSk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0UmVjdCAmcikKK3sKKyAgICB0cyA8PCAiYXQgKCI7IAor
ICAgIGlmIChoYXNGcmFjdGlvbnMoci54KCkpKSAKKyAgICAgICAgdHMgPDwgci54KCk7CisgICAg
ZWxzZSAKKyAgICAgICAgdHMgPDwgaW50KHIueCgpKTsKKyAgICB0cyA8PCAiLCI7CisgICAgaWYg
KGhhc0ZyYWN0aW9ucyhyLnkoKSkpIAorICAgICAgICB0cyA8PCByLnkoKTsKKyAgICBlbHNlIAor
ICAgICAgICB0cyA8PCBpbnQoci55KCkpOworICAgIHRzIDw8ICIpIHNpemUgIjsKKyAgICBpZiAo
aGFzRnJhY3Rpb25zKHIud2lkdGgoKSkpIAorICAgICAgICB0cyA8PCByLndpZHRoKCk7IAorICAg
IGVsc2UgCisgICAgICAgIHRzIDw8IGludChyLndpZHRoKCkpOyAKKyAgICB0cyA8PCAieCI7Cisg
ICAgaWYgKGhhc0ZyYWN0aW9ucyhyLmhlaWdodCgpKSkgCisgICAgICAgIHRzIDw8IHIuaGVpZ2h0
KCk7CisgICAgZWxzZSAKKyAgICAgICAgdHMgPDwgaW50KHIuaGVpZ2h0KCkpOworICAgIHJldHVy
biB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50
aXR5KCkpCisgICAgICAgIHRzIDw8ICJpZGVudGl0eSI7CisgICAgZWxzZQorICAgICAgICB0cyA8
PCAie209KCgiCisgICAgICAgICAgIDw8IHRyYW5zZm9ybS5hKCkgPDwgIiwiIDw8IHRyYW5zZm9y
bS5iKCkKKyAgICAgICAgICAgPDwgIikoIgorICAgICAgICAgICA8PCB0cmFuc2Zvcm0uYygpIDw8
ICIsIiA8PCB0cmFuc2Zvcm0uZCgpCisgICAgICAgICAgIDw8ICIpKSB0PSgiCisgICAgICAgICAg
IDw8IHRyYW5zZm9ybS5lKCkgPDwgIiwiIDw8IHRyYW5zZm9ybS5mKCkKKyAgICAgICAgICAgPDwg
Iil9IjsKKworICAgIHJldHVybiB0czsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFdpbmRSdWxlIHJ1bGUpCit7CisgICAgc3dpdGNoIChy
dWxlKSB7CisgICAgY2FzZSBSVUxFX05PTlpFUk86CisgICAgICAgIHRzIDw8ICJOT04tWkVSTyI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUlVMRV9FVkVOT0REOgorICAgICAgICB0cyA8PCAi
RVZFTi1PREQiOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHM7Cit9CisK
K3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTVkdV
bml0VHlwZXM6OlNWR1VuaXRUeXBlJiB1bml0VHlwZSkKK3sKKyAgICBzd2l0Y2ggKHVuaXRUeXBl
KSB7CisgICAgY2FzZSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfVU5LTk9XTjoKKyAgICAg
ICAgdHMgPDwgInVua25vd24iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNWR1VuaXRUeXBl
czo6U1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRToKKyAgICAgICAgdHMgPDwgInVzZXJTcGFj
ZU9uVXNlIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTVkdVbml0VHlwZXM6OlNWR19VTklU
X1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g6CisgICAgICAgIHRzIDw8ICJvYmplY3RCb3VuZGluZ0Jv
eCI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0czsKK30KKworc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNWR01hcmtlckVs
ZW1lbnQ6OlNWR01hcmtlclVuaXRzVHlwZSYgbWFya2VyVW5pdCkKK3sKKyAgICBzd2l0Y2ggKG1h
cmtlclVuaXQpIHsKKyAgICBjYXNlIFNWR01hcmtlckVsZW1lbnQ6OlNWR19NQVJLRVJVTklUU19V
TktOT1dOOgorICAgICAgICB0cyA8PCAidW5rbm93biI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgU1ZHTWFya2VyRWxlbWVudDo6U1ZHX01BUktFUlVOSVRTX1VTRVJTUEFDRU9OVVNFOgorICAg
ICAgICB0cyA8PCAidXNlclNwYWNlT25Vc2UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNW
R01hcmtlckVsZW1lbnQ6OlNWR19NQVJLRVJVTklUU19TVFJPS0VXSURUSDoKKyAgICAgICAgdHMg
PDwgInN0cm9rZVdpZHRoIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRz
OworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xv
ciYgYykKK3sKKyAgICByZXR1cm4gdHMgPDwgYy5uYW1lKCk7Cit9CisKKy8vIEZJWE1FOiBNYXli
ZSB0aGlzIHNob3VsZCBiZSBpbiBLQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCitzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRGFzaEFycmF5JiBhKQor
eworICAgIHRzIDw8ICJ7IjsKKyAgICBEYXNoQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGEu
ZW5kKCk7CisgICAgZm9yIChEYXNoQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0ICE9IGEuYmVnaW4oKSkKKyAgICAg
ICAgICAgIHRzIDw8ICIsICI7CisgICAgICAgIHRzIDw8ICppdDsKKyAgICB9CisgICAgdHMgPDwg
In0iOworICAgIHJldHVybiB0czsKK30KKworLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJl
IGluIEdyYXBoaWNzVHlwZXMuY3BwCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgTGluZUNhcCBzdHlsZSkKK3sKKyAgICBzd2l0Y2ggKHN0eWxlKSB7CisgICAg
ICAgIGNhc2UgQnV0dENhcDoKKyAgICAgICAgICAgIHRzIDw8ICJCVVRUIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFJvdW5kQ2FwOgorICAgICAgICAgICAgdHMgPDwgIlJPVU5E
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNxdWFyZUNhcDoKKyAgICAgICAg
ICAgIHRzIDw8ICJTUVVBUkUiOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVy
biB0czsKK30KKworLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIEdyYXBoaWNzVHlw
ZXMuY3BwCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGlu
ZUpvaW4gc3R5bGUpCit7CisgICAgc3dpdGNoIChzdHlsZSkgeworICAgICAgICBjYXNlIE1pdGVy
Sm9pbjoKKyAgICAgICAgICAgIHRzIDw8ICJNSVRFUiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBSb3VuZEpvaW46CisgICAgICAgICAgICB0cyA8PCAiUk9VTkQiOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmV2ZWxKb2luOgorICAgICAgICAgICAgdHMgPDwg
IkJFVkVMIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisK
Ky8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBiZSBpbiBHcmFkaWVudC5jcHAKK3N0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBHcmFkaWVudFNwcmVhZE1ldGhv
ZCBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgU3ByZWFkTWV0aG9kUGFk
OgorICAgICAgICB0cyA8PCAiUEFEIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTcHJlYWRN
ZXRob2RSZXBlYXQ6CisgICAgICAgIHRzIDw8ICJSRVBFQVQiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFNwcmVhZE1ldGhvZFJlZmxlY3Q6CisgICAgICAgIHRzIDw8ICJSRUZMRUNUIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRzOworfQorCitzdGF0aWMgdm9pZCB3
cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UoVGV4dFN0cmVhbSYgdHMsIFJlbmRlclNWR1Jlc291cmNl
KiByZXNvdXJjZSkKK3sKKyAgICBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IFNvbGlk
Q29sb3JSZXNvdXJjZVR5cGUpIHsKKyAgICAgICAgdHMgPDwgIlt0eXBlPVNPTElEXSBbY29sb3I9
IiA8PCBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqPihyZXNvdXJjZSkt
PmNvbG9yKCkgPDwgIl0iOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQWxsIG90
aGVyIHJlc291cmNlcyBkZXJpdmUgZnJvbSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcgorICAg
IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBjb250YWluZXIgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+KHJlc291cmNlKTsKKyAgICBOb2RlKiBub2RlID0gY29u
dGFpbmVyLT5ub2RlKCk7CisgICAgQVNTRVJUKG5vZGUpOworICAgIEFTU0VSVChub2RlLT5pc1NW
R0VsZW1lbnQoKSk7CisKKyAgICBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IFBhdHRl
cm5SZXNvdXJjZVR5cGUpCisgICAgICAgIHRzIDw8ICJbdHlwZT1QQVRURVJOXSI7CisgICAgZWxz
ZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IExpbmVhckdyYWRpZW50UmVzb3VyY2VU
eXBlKQorICAgICAgICB0cyA8PCAiW3R5cGU9TElORUFSLUdSQURJRU5UXSI7CisgICAgZWxzZSBp
ZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBl
KQorICAgICAgICB0cyA8PCAiW3R5cGU9UkFESUFMLUdSQURJRU5UXSI7CisKKyAgICB0cyA8PCAi
IFtpZD1cIiIgPDwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpLT5nZXRJZEF0dHJpYnV0
ZSgpIDw8ICJcIl0iOworfQorCitzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRz
LCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKK3sKKyAgICBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUgPSBvYmplY3Quc3R5bGUoKTsKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5
bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKKworICAgIGlmICghb2JqZWN0LmxvY2FsVHJhbnNmb3Jt
KCkuaXNJZGVudGl0eSgpKQorICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ0cmFuc2Zv
cm0iLCBvYmplY3QubG9jYWxUcmFuc2Zvcm0oKSk7CisgICAgd3JpdGVJZk5vdERlZmF1bHQodHMs
ICJpbWFnZSByZW5kZXJpbmciLCBzdmdTdHlsZS0+aW1hZ2VSZW5kZXJpbmcoKSwgU1ZHUmVuZGVy
U3R5bGU6OmluaXRpYWxJbWFnZVJlbmRlcmluZygpKTsKKyAgICB3cml0ZUlmTm90RGVmYXVsdCh0
cywgIm9wYWNpdHkiLCBzdHlsZS0+b3BhY2l0eSgpLCBSZW5kZXJTdHlsZTo6aW5pdGlhbE9wYWNp
dHkoKSk7CisgICAgaWYgKG9iamVjdC5pc1NWR1BhdGgoKSkgeworICAgICAgICBjb25zdCBSZW5k
ZXJTVkdQYXRoJiBwYXRoID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUGF0aCY+KG9iamVj
dCk7CisgICAgICAgIEFTU0VSVChwYXRoLm5vZGUoKSk7CisgICAgICAgIEFTU0VSVChwYXRoLm5v
ZGUoKS0+aXNTVkdFbGVtZW50KCkpOworCisgICAgICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Cisg
ICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJl
bmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVy
U1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkgeworICAgICAg
ICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CisgICAgICAgICAgICB0cyA8PCAiIFtz
dHJva2U9eyIgPDwgczsKKyAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywg
c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSk7CisKKyAgICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0aC5ub2RlKCkpOworICAgICAgICAgICAg
ZG91YmxlIGRhc2hPZmZzZXQgPSBzdmdTdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgpLnZhbHVlKGVs
ZW1lbnQpOworICAgICAgICAgICAgZG91YmxlIHN0cm9rZVdpZHRoID0gc3ZnU3R5bGUtPnN0cm9r
ZVdpZHRoKCkudmFsdWUoZWxlbWVudCk7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHTGVu
Z3RoPiYgZGFzaGVzID0gc3ZnU3R5bGUtPnN0cm9rZURhc2hBcnJheSgpOworCisgICAgICAgICAg
ICBEYXNoQXJyYXkgZGFzaEFycmF5OworICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0
aD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRhc2hlcy5lbmQoKTsKKyAgICAgICAgICAgIGZvciAo
VmVjdG9yPFNWR0xlbmd0aD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGFzaGVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICAgICBkYXNoQXJyYXkuYXBwZW5kKCgqaXQpLnZh
bHVlKGVsZW1lbnQpKTsKKworICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFj
aXR5Iiwgc3ZnU3R5bGUtPnN0cm9rZU9wYWNpdHkoKSwgMS4wZik7CisgICAgICAgICAgICB3cml0
ZUlmTm90RGVmYXVsdCh0cywgInN0cm9rZSB3aWR0aCIsIHN0cm9rZVdpZHRoLCAxLjApOworICAg
ICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJtaXRlciBsaW1pdCIsIHN2Z1N0eWxlLT5z
dHJva2VNaXRlckxpbWl0KCksIDQuMGYpOworICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQo
dHMsICJsaW5lIGNhcCIsIHN2Z1N0eWxlLT5jYXBTdHlsZSgpLCBCdXR0Q2FwKTsKKyAgICAgICAg
ICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAibGluZSBqb2luIiwgc3ZnU3R5bGUtPmpvaW5TdHls
ZSgpLCBNaXRlckpvaW4pOworICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJkYXNo
IG9mZnNldCIsIGRhc2hPZmZzZXQsIDAuMCk7CisgICAgICAgICAgICBpZiAoIWRhc2hBcnJheS5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiZGFzaCBh
cnJheSIsIGRhc2hBcnJheSk7CisKKyAgICAgICAgICAgIHRzIDw8ICJ9XSI7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0g
UmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVy
U1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkgeworICAgICAg
ICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CisgICAgICAgICAgICB0cyA8PCAiIFtm
aWxsPXsiIDw8IHM7CisgICAgICAgICAgICB3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UodHMsIGZp
bGxQYWludGluZ1Jlc291cmNlKTsKKworICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMs
ICJvcGFjaXR5Iiwgc3ZnU3R5bGUtPmZpbGxPcGFjaXR5KCksIDEuMGYpOworICAgICAgICAgICAg
d3JpdGVJZk5vdERlZmF1bHQodHMsICJmaWxsIHJ1bGUiLCBzdmdTdHlsZS0+ZmlsbFJ1bGUoKSwg
UlVMRV9OT05aRVJPKTsKKyAgICAgICAgICAgIHRzIDw8ICJ9XSI7CisgICAgICAgIH0KKyAgICAg
ICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJjbGlwIHJ1bGUiLCBzdmdTdHlsZS0+Y2xpcFJ1bGUo
KSwgUlVMRV9OT05aRVJPKTsKKyAgICB9CisKKyAgICB3cml0ZUlmTm90RW1wdHkodHMsICJzdGFy
dCBtYXJrZXIiLCBzdmdTdHlsZS0+bWFya2VyU3RhcnRSZXNvdXJjZSgpKTsKKyAgICB3cml0ZUlm
Tm90RW1wdHkodHMsICJtaWRkbGUgbWFya2VyIiwgc3ZnU3R5bGUtPm1hcmtlck1pZFJlc291cmNl
KCkpOworICAgIHdyaXRlSWZOb3RFbXB0eSh0cywgImVuZCBtYXJrZXIiLCBzdmdTdHlsZS0+bWFy
a2VyRW5kUmVzb3VyY2UoKSk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9u
QW5kU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQorewor
ICAgIHRzIDw8ICIgIiA8PCBjb25zdF9jYXN0PFJlbmRlck9iamVjdCY+KG9iamVjdCkuYWJzb2x1
dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CisgICAgd3JpdGVTdHlsZSh0cywgb2JqZWN0KTsKKyAg
ICByZXR1cm4gdHM7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoKQoreworICAgIHdyaXRlUG9zaXRpb25B
bmRTdHlsZSh0cywgcGF0aCk7CisKKyAgICBBU1NFUlQocGF0aC5ub2RlKCktPmlzU1ZHRWxlbWVu
dCgpKTsKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVu
dCo+KHBhdGgubm9kZSgpKTsKKworICAgIGlmIChzdmdFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05h
bWVzOjpyZWN0VGFnKSkgeworICAgICAgICBTVkdSZWN0RWxlbWVudCogZWxlbWVudCA9IHN0YXRp
Y19jYXN0PFNWR1JlY3RFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CisgICAgICAgIHdyaXRlTmFtZVZh
bHVlUGFpcih0cywgIngiLCBlbGVtZW50LT54KCkudmFsdWUoZWxlbWVudCkpOworICAgICAgICB3
cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ5IiwgZWxlbWVudC0+eSgpLnZhbHVlKGVsZW1lbnQpKTsK
KyAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAid2lkdGgiLCBlbGVtZW50LT53aWR0aCgp
LnZhbHVlKGVsZW1lbnQpKTsKKyAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiaGVpZ2h0
IiwgZWxlbWVudC0+aGVpZ2h0KCkudmFsdWUoZWxlbWVudCkpOworICAgIH0gZWxzZSBpZiAoc3Zn
RWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6bGluZVRhZykpIHsKKyAgICAgICAgU1ZHTGlu
ZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdMaW5lRWxlbWVudCo+KHN2Z0VsZW1l
bnQpOworICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ4MSIsIGVsZW1lbnQtPngxKCku
dmFsdWUoZWxlbWVudCkpOworICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ5MSIsIGVs
ZW1lbnQtPnkxKCkudmFsdWUoZWxlbWVudCkpOworICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIo
dHMsICJ4MiIsIGVsZW1lbnQtPngyKCkudmFsdWUoZWxlbWVudCkpOworICAgICAgICB3cml0ZU5h
bWVWYWx1ZVBhaXIodHMsICJ5MiIsIGVsZW1lbnQtPnkyKCkudmFsdWUoZWxlbWVudCkpOworICAg
IH0gZWxzZSBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZWxsaXBzZVRhZykp
IHsKKyAgICAgICAgU1ZHRWxsaXBzZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdF
bGxpcHNlRWxlbWVudCo+KHN2Z0VsZW1lbnQpOworICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIo
dHMsICJjeCIsIGVsZW1lbnQtPmN4KCkudmFsdWUoZWxlbWVudCkpOworICAgICAgICB3cml0ZU5h
bWVWYWx1ZVBhaXIodHMsICJjeSIsIGVsZW1lbnQtPmN5KCkudmFsdWUoZWxlbWVudCkpOworICAg
ICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJyeCIsIGVsZW1lbnQtPnJ4KCkudmFsdWUoZWxl
bWVudCkpOworICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJyeSIsIGVsZW1lbnQtPnJ5
KCkudmFsdWUoZWxlbWVudCkpOworICAgIH0gZWxzZSBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6Y2lyY2xlVGFnKSkgeworICAgICAgICBTVkdDaXJjbGVFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHQ2lyY2xlRWxlbWVudCo+KHN2Z0VsZW1lbnQpOworICAgICAg
ICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJjeCIsIGVsZW1lbnQtPmN4KCkudmFsdWUoZWxlbWVu
dCkpOworICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJjeSIsIGVsZW1lbnQtPmN5KCku
dmFsdWUoZWxlbWVudCkpOworICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJyIiwgZWxl
bWVudC0+cigpLnZhbHVlKGVsZW1lbnQpKTsKKyAgICB9IGVsc2UgaWYgKHN2Z0VsZW1lbnQtPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OnBvbHlnb25UYWcpIHx8IHN2Z0VsZW1lbnQtPmhhc1RhZ05hbWUo
U1ZHTmFtZXM6OnBvbHlsaW5lVGFnKSkgeworICAgICAgICBTVkdQb2x5RWxlbWVudCogZWxlbWVu
dCA9IHN0YXRpY19jYXN0PFNWR1BvbHlFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CisgICAgICAgIHdy
aXRlTmFtZUFuZFF1b3RlZFZhbHVlKHRzLCAicG9pbnRzIiwgZWxlbWVudC0+cG9pbnRMaXN0KCku
dmFsdWVBc1N0cmluZygpKTsKKyAgICB9IGVsc2UgaWYgKHN2Z0VsZW1lbnQtPmhhc1RhZ05hbWUo
U1ZHTmFtZXM6OnBhdGhUYWcpKSB7CisgICAgICAgIFNWR1BhdGhFbGVtZW50KiBlbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHUGF0aEVsZW1lbnQqPihzdmdFbGVtZW50KTsKKyAgICAgICAgU3RyaW5n
IHBhdGhTdHJpbmc7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3dpdGNoIHRvIFVuYWx0
ZXJlZFBhcnNpbmcgaGVyZSAtIHRoaXMgd2lsbCBhZmZlY3QgdGhlIHBhdGggZHVtcGluZyBvdXRw
dXQgb2YgZG96ZW5zIG9mIHRlc3RzLgorICAgICAgICBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6c2Vs
ZigpLT5idWlsZFN0cmluZ0Zyb21CeXRlU3RyZWFtKGVsZW1lbnQtPnBhdGhCeXRlU3RyZWFtKCks
IHBhdGhTdHJpbmcsIE5vcm1hbGl6ZWRQYXJzaW5nKTsKKyAgICAgICAgd3JpdGVOYW1lQW5kUXVv
dGVkVmFsdWUodHMsICJkYXRhIiwgcGF0aFN0cmluZyk7CisgICAgfSBlbHNlCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0czsKK30KKworc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jvb3QmIHJvb3Qp
Cit7CisgICAgcmV0dXJuIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywgcm9vdCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdyaXRlUmVuZGVyU1ZHVGV4dEJveChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyQmxvY2smIHRleHQpCit7CisgICAgU1ZHUm9vdElubGluZUJveCogYm94ID0gc3RhdGljX2Nh
c3Q8U1ZHUm9vdElubGluZUJveCo+KHRleHQuZmlyc3RSb290Qm94KCkpOworICAgIGlmICghYm94
KQorICAgICAgICByZXR1cm47CisKKyAgICB0cyA8PCAiIGF0ICgiIDw8IHRleHQueCgpIDw8ICIs
IiA8PCB0ZXh0LnkoKSA8PCAiKSBzaXplICIgPDwgYm94LT5sb2dpY2FsV2lkdGgoKSA8PCAieCIg
PDwgYm94LT5sb2dpY2FsSGVpZ2h0KCk7CisgICAgCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlz
IGhhY2ssIG9uY2UgdGhlIG5ldyB0ZXh0IGxheW91dCBlbmdpbmUgaXMgY29tcGxldGx5IGxhbmRl
ZC4gV2Ugd2FudCB0byBwcmVzZXJ2ZSB0aGUgb2xkIGxheW91dCB0ZXN0IHJlc3VsdHMgZm9yIG5v
dy4KKyAgICB0cyA8PCAiIGNvbnRhaW5zIDEgY2h1bmsocykiOworCisgICAgaWYgKHRleHQucGFy
ZW50KCkgJiYgKHRleHQucGFyZW50KCktPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUNvbG9yKSAhPSB0ZXh0LnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUNvbG9yKSkpCisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImNvbG9y
IiwgdGV4dC5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciku
bmFtZSgpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlU1ZHSW5saW5lVGV4dEJveChU
ZXh0U3RyZWFtJiB0cywgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgaW50IGluZGVudCkKK3sK
KyAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gdGV4dEJveC0+dGV4dEZy
YWdtZW50cygpOworICAgIGlmIChmcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lu
bGluZVRleHQodGV4dEJveC0+dGV4dFJlbmRlcmVyKCkpOworICAgIEFTU0VSVCh0ZXh0UmVuZGVy
ZXIpOworCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gdGV4dFJlbmRlcmVy
LT5zdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIFN0cmluZyB0ZXh0ID0gdGV4dEJveC0+dGV4dFJl
bmRlcmVyKCktPnRleHQoKTsKKworICAgIHVuc2lnbmVkIGZyYWdtZW50c1NpemUgPSBmcmFnbWVu
dHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFnbWVudHNTaXplOyAr
K2kpIHsKKyAgICAgICAgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChp
KTsKKyAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEpOworCisgICAgICAgIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0ID0gZnJhZ21lbnQucG9zaXRpb25MaXN0T2Zmc2V0OworICAgICAgICB1
bnNpZ25lZCBlbmRPZmZzZXQgPSBmcmFnbWVudC5wb3NpdGlvbkxpc3RPZmZzZXQgKyBmcmFnbWVu
dC5sZW5ndGg7CisKKyAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGhhY2ssIG9uY2UgdGhl
IG5ldyB0ZXh0IGxheW91dCBlbmdpbmUgaXMgY29tcGxldGx5IGxhbmRlZC4gV2Ugd2FudCB0byBw
cmVzZXJ2ZSB0aGUgb2xkIGxheW91dCB0ZXN0IHJlc3VsdHMgZm9yIG5vdy4KKyAgICAgICAgdHMg
PDwgImNodW5rIDEgIjsKKyAgICAgICAgRVRleHRBbmNob3IgYW5jaG9yID0gc3ZnU3R5bGUtPnRl
eHRBbmNob3IoKTsKKyAgICAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IHN2Z1N0eWxlLT5pc1Zl
cnRpY2FsV3JpdGluZ01vZGUoKTsKKyAgICAgICAgaWYgKGFuY2hvciA9PSBUQV9NSURETEUpIHsK
KyAgICAgICAgICAgIHRzIDw8ICIobWlkZGxlIGFuY2hvciI7CisgICAgICAgICAgICBpZiAoaXNW
ZXJ0aWNhbFRleHQpCisgICAgICAgICAgICAgICAgdHMgPDwgIiwgdmVydGljYWwiOworICAgICAg
ICAgICAgdHMgPDwgIikgIjsKKyAgICAgICAgfSBlbHNlIGlmIChhbmNob3IgPT0gVEFfRU5EKSB7
CisgICAgICAgICAgICB0cyA8PCAiKGVuZCBhbmNob3IiOworICAgICAgICAgICAgaWYgKGlzVmVy
dGljYWxUZXh0KQorICAgICAgICAgICAgICAgIHRzIDw8ICIsIHZlcnRpY2FsIjsKKyAgICAgICAg
ICAgIHRzIDw8ICIpICI7CisgICAgICAgIH0gZWxzZSBpZiAoaXNWZXJ0aWNhbFRleHQpCisgICAg
ICAgICAgICB0cyA8PCAiKHZlcnRpY2FsKSAiOworICAgICAgICBzdGFydE9mZnNldCAtPSB0ZXh0
Qm94LT5zdGFydCgpOworICAgICAgICBlbmRPZmZzZXQgLT0gdGV4dEJveC0+c3RhcnQoKTsKKyAg
ICAgICAgLy8gPC9oYWNrPgorCisgICAgICAgIHRzIDw8ICJ0ZXh0IHJ1biAiIDw8IGkgKyAxIDw8
ICIgYXQgKCIgPDwgZnJhZ21lbnQueCA8PCAiLCIgPDwgZnJhZ21lbnQueSA8PCAiKSI7CisgICAg
ICAgIHRzIDw8ICIgc3RhcnRPZmZzZXQgIiA8PCBzdGFydE9mZnNldCA8PCAiIGVuZE9mZnNldCAi
IDw8IGVuZE9mZnNldDsKKyAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAg
dHMgPDwgIiBoZWlnaHQgIiA8PCBmcmFnbWVudC5oZWlnaHQ7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHRzIDw8ICIgd2lkdGggIiA8PCBmcmFnbWVudC53aWR0aDsKKworICAgICAgICBpZiAo
IXRleHRCb3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSB8fCB0ZXh0Qm94LT5tX2Rpck92ZXJy
aWRlKSB7CisgICAgICAgICAgICB0cyA8PCAodGV4dEJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gIiBMVFIiIDogIiBSVEwiKTsKKyAgICAgICAgICAgIGlmICh0ZXh0Qm94LT5tX2Rpck92
ZXJyaWRlKQorICAgICAgICAgICAgICAgIHRzIDw8ICIgb3ZlcnJpZGUiOworICAgICAgICB9CisK
KyAgICAgICAgdHMgPDwgIjogIiA8PCBxdW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXModGV4dC5z
dWJzdHJpbmcoZnJhZ21lbnQucG9zaXRpb25MaXN0T2Zmc2V0LCBmcmFnbWVudC5sZW5ndGgpKSA8
PCAiXG4iOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlU1ZHSW5saW5lVGV4
dEJveGVzKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJUZXh0JiB0ZXh0LCBpbnQgaW5kZW50
KQoreworICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gdGV4dC5maXJzdFRleHRCb3goKTsg
Ym94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCisgICAgICAgIHdyaXRlU1ZHSW5saW5lVGV4
dEJveCh0cywgc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGJveCksIGluZGVudCk7Cit9
CisKK3N0YXRpYyB2b2lkIHdyaXRlU3RhbmRhcmRQcmVmaXgoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFJlbmRlck9iamVjdCYgb2JqZWN0LCBpbnQgaW5kZW50KQoreworICAgIHdyaXRlSW5kZW50KHRz
LCBpbmRlbnQpOworICAgIHRzIDw8IG9iamVjdC5yZW5kZXJOYW1lKCk7CisKKyAgICBpZiAob2Jq
ZWN0Lm5vZGUoKSkKKyAgICAgICAgdHMgPDwgIiB7IiA8PCBvYmplY3Qubm9kZSgpLT5ub2RlTmFt
ZSgpIDw8ICJ9IjsKK30KKworc3RhdGljIHZvaWQgd3JpdGVDaGlsZHJlbihUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGludCBpbmRlbnQpCit7CisgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGNoaWxkID0gb2JqZWN0LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHdyaXRlKHRzLCAqY2hpbGQsIGluZGVudCAr
IDEpOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBib3VuZGluZ0JveE1vZGVTdHJpbmcoYm9v
bCBib3VuZGluZ0JveE1vZGUpCit7CisgICAgcmV0dXJuIGJvdW5kaW5nQm94TW9kZSA/ICJvYmpl
Y3RCb3VuZGluZ0JveCIgOiAidXNlclNwYWNlT25Vc2UiOworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgd3JpdGVDb21tb25HcmFkaWVudFByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIEdyYWRpZW50
U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVu
dFRyYW5zZm9ybSwgYm9vbCBib3VuZGluZ0JveE1vZGUpCit7CisgICAgd3JpdGVOYW1lVmFsdWVQ
YWlyKHRzLCAiZ3JhZGllbnRVbml0cyIsIGJvdW5kaW5nQm94TW9kZVN0cmluZyhib3VuZGluZ0Jv
eE1vZGUpKTsKKworICAgIGlmIChzcHJlYWRNZXRob2QgIT0gU3ByZWFkTWV0aG9kUGFkKQorICAg
ICAgICB0cyA8PCAiIFtzcHJlYWRNZXRob2Q9IiA8PCBzcHJlYWRNZXRob2QgPDwgIl0iOworCisg
ICAgaWYgKCFncmFkaWVudFRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgIHRzIDw8ICIg
W2dyYWRpZW50VHJhbnNmb3JtPSIgPDwgZ3JhZGllbnRUcmFuc2Zvcm0gPDwgIl0iOworfQorCit2
b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRl
ck9iamVjdCYgb2JqZWN0LCBpbnQgaW5kZW50KQoreworICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgo
dHMsIG9iamVjdCwgaW5kZW50KTsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4ob2JqZWN0Lm5vZGUoKSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZCA9
IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7CisgICAgd3JpdGVOYW1lQW5kUXVvdGVkVmFsdWUo
dHMsICJpZCIsIGlkKTsgICAgCisKKyAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVz
b3VyY2UgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCY+KG9iamVjdCkudG9SZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lcigpOworICAgIEFTU0VSVChyZXNvdXJjZSk7CisKKyAgICBpZiAocmVzb3Vy
Y2UtPnJlc291cmNlVHlwZSgpID09IE1hc2tlclJlc291cmNlVHlwZSkgeworICAgICAgICBSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlciogbWFza2VyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIqPihyZXNvdXJjZSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgIm1h
c2tVbml0cyIsIG1hc2tlci0+bWFza1VuaXRzKCkpOworICAgICAgICB3cml0ZU5hbWVWYWx1ZVBh
aXIodHMsICJtYXNrQ29udGVudFVuaXRzIiwgbWFza2VyLT5tYXNrQ29udGVudFVuaXRzKCkpOwor
ICAgICAgICB0cyA8PCAiXG4iOworI2lmIEVOQUJMRShGSUxURVJTKQorICAgIH0gZWxzZSBpZiAo
cmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IEZpbHRlclJlc291cmNlVHlwZSkgeworICAgICAg
ICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIqPihyZXNvdXJjZSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0
cywgImZpbHRlclVuaXRzIiwgZmlsdGVyLT5maWx0ZXJVbml0cygpKTsKKyAgICAgICAgd3JpdGVO
YW1lVmFsdWVQYWlyKHRzLCAicHJpbWl0aXZlVW5pdHMiLCBmaWx0ZXItPnByaW1pdGl2ZVVuaXRz
KCkpOworICAgICAgICB0cyA8PCAiXG4iOworICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNlaG9s
ZGVyIGZpbHRlciB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxkZXIuCisgICAgICAgIEZsb2F0
UmVjdCBkdW1teVJlY3Q7CisgICAgICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGR1bW15RmlsdGVyID0g
U1ZHRmlsdGVyOjpjcmVhdGUoQWZmaW5lVHJhbnNmb3JtKCksIGR1bW15UmVjdCwgZHVtbXlSZWN0
LCBkdW1teVJlY3QsIHRydWUpOworICAgICAgICBpZiAoUmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+
IGJ1aWxkZXIgPSBmaWx0ZXItPmJ1aWxkUHJpbWl0aXZlcyhkdW1teUZpbHRlci5nZXQoKSkpIHsK
KyAgICAgICAgICAgIGlmIChGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBidWlsZGVyLT5sYXN0
RWZmZWN0KCkpCisgICAgICAgICAgICAgICAgbGFzdEVmZmVjdC0+ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgaW5kZW50ICsgMSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0gZWxzZSBpZiAo
cmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IENsaXBwZXJSZXNvdXJjZVR5cGUpIHsKKyAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gc3RhdGljX2Nhc3Q8UmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyKj4ocmVzb3VyY2UpOworICAgICAgICB3cml0ZU5hbWVWYWx1ZVBh
aXIodHMsICJjbGlwUGF0aFVuaXRzIiwgY2xpcHBlci0+Y2xpcFBhdGhVbml0cygpKTsKKyAgICAg
ICAgdHMgPDwgIlxuIjsKKyAgICB9IGVsc2UgaWYgKHJlc291cmNlLT5yZXNvdXJjZVR5cGUoKSA9
PSBNYXJrZXJSZXNvdXJjZVR5cGUpIHsKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIq
IG1hcmtlciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1Jlc291cmNlTWFya2VyKj4ocmVzb3VyY2Up
OworICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJtYXJrZXJVbml0cyIsIG1hcmtlci0+
bWFya2VyVW5pdHMoKSk7CisgICAgICAgIHRzIDw8ICIgW3JlZiBhdCAiIDw8IG1hcmtlci0+cmVm
ZXJlbmNlUG9pbnQoKSA8PCAiXSI7CisgICAgICAgIHRzIDw8ICIgW2FuZ2xlPSI7CisgICAgICAg
IGlmIChtYXJrZXItPmFuZ2xlKCkgPT0gLTEpCisgICAgICAgICAgICB0cyA8PCAiYXV0byIgPDwg
Il1cbiI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRzIDw8IG1hcmtlci0+YW5nbGUoKSA8
PCAiXVxuIjsKKyAgICB9IGVsc2UgaWYgKHJlc291cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBQYXR0
ZXJuUmVzb3VyY2VUeXBlKSB7CisgICAgICAgIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybiogcGF0
dGVybiA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1Jlc291cmNlUGF0dGVybio+KHJlc291cmNlKTsK
KworICAgICAgICAvLyBEdW1wIGZpbmFsIHJlc3VsdHMgdGhhdCBhcmUgdXNlZCBmb3IgcmVuZGVy
aW5nLiBObyB1c2UgaW4gYXNraW5nIFNWR1BhdHRlcm5FbGVtZW50IGZvciBpdHMgcGF0dGVyblVu
aXRzKCksIGFzIGl0IG1heQorICAgICAgICAvLyBsaW5rIHRvIG90aGVyIHBhdHRlcm5zIHVzaW5n
IHhsaW5rOmhyZWYsIHdlIG5lZWQgdG8gYnVpbGQgdGhlIGZ1bGwgaW5oZXJpdGFuY2UgY2hhaW4s
IGFrYS4gY29sbGVjdFBhdHRlcm5Qcm9wZXJ0aWVzKCkKKyAgICAgICAgUGF0dGVybkF0dHJpYnV0
ZXMgYXR0cmlidXRlczsKKyAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQqPihw
YXR0ZXJuLT5ub2RlKCkpLT5jb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisK
KyAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAicGF0dGVyblVuaXRzIiwgYm91bmRpbmdC
b3hNb2RlU3RyaW5nKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpKTsKKyAgICAgICAgd3Jp
dGVOYW1lVmFsdWVQYWlyKHRzLCAicGF0dGVybkNvbnRlbnRVbml0cyIsIGJvdW5kaW5nQm94TW9k
ZVN0cmluZyhhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZUNvbnRlbnQoKSkpOworCisgICAgICAg
IEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBhdHRyaWJ1dGVzLnBhdHRlcm5UcmFuc2Zvcm0o
KTsKKyAgICAgICAgaWYgKCF0cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAgICAgICAgICAgdHMg
PDwgIiBbcGF0dGVyblRyYW5zZm9ybT0iIDw8IHRyYW5zZm9ybSA8PCAiXSI7CisgICAgICAgIHRz
IDw8ICJcbiI7CisgICAgfSBlbHNlIGlmIChyZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gTGlu
ZWFyR3JhZGllbnRSZXNvdXJjZVR5cGUpIHsKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudCogZ3JhZGllbnQgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJjZUxpbmVh
ckdyYWRpZW50Kj4ocmVzb3VyY2UpOworCisgICAgICAgIC8vIER1bXAgZmluYWwgcmVzdWx0cyB0
aGF0IGFyZSB1c2VkIGZvciByZW5kZXJpbmcuIE5vIHVzZSBpbiBhc2tpbmcgU1ZHR3JhZGllbnRF
bGVtZW50IGZvciBpdHMgZ3JhZGllbnRVbml0cygpLCBhcyBpdCBtYXkKKyAgICAgICAgLy8gbGlu
ayB0byBvdGhlciBncmFkaWVudHMgdXNpbmcgeGxpbms6aHJlZiwgd2UgbmVlZCB0byBidWlsZCB0
aGUgZnVsbCBpbmhlcml0YW5jZSBjaGFpbiwgYWthLiBjb2xsZWN0R3JhZGllbnRQcm9wZXJ0aWVz
KCkKKyAgICAgICAgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KiBsaW5lYXJHcmFkaWVudEVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQqPihncmFkaWVudC0+bm9k
ZSgpKTsKKworICAgICAgICBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAg
ICAgICAgbGluZWFyR3JhZGllbnRFbGVtZW50LT5jb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKGF0
dHJpYnV0ZXMpOworICAgICAgICB3cml0ZUNvbW1vbkdyYWRpZW50UHJvcGVydGllcyh0cywgYXR0
cmlidXRlcy5zcHJlYWRNZXRob2QoKSwgYXR0cmlidXRlcy5ncmFkaWVudFRyYW5zZm9ybSgpLCBh
dHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsKKworICAgICAgICBGbG9hdFBvaW50IHN0YXJ0
UG9pbnQ7CisgICAgICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQ7CisgICAgICAgIGxpbmVhckdyYWRp
ZW50RWxlbWVudC0+Y2FsY3VsYXRlU3RhcnRFbmRQb2ludHMoYXR0cmlidXRlcywgc3RhcnRQb2lu
dCwgZW5kUG9pbnQpOworCisgICAgICAgIHRzIDw8ICIgW3N0YXJ0PSIgPDwgc3RhcnRQb2ludCA8
PCAiXSBbZW5kPSIgPDwgZW5kUG9pbnQgPDwgIl1cbiI7CisgICAgfSAgZWxzZSBpZiAocmVzb3Vy
Y2UtPnJlc291cmNlVHlwZSgpID09IFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBlKSB7CisgICAg
ICAgIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQqIGdyYWRpZW50ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudCo+KHJlc291cmNlKTsKKworICAgICAg
ICAvLyBEdW1wIGZpbmFsIHJlc3VsdHMgdGhhdCBhcmUgdXNlZCBmb3IgcmVuZGVyaW5nLiBObyB1
c2UgaW4gYXNraW5nIFNWR0dyYWRpZW50RWxlbWVudCBmb3IgaXRzIGdyYWRpZW50VW5pdHMoKSwg
YXMgaXQgbWF5CisgICAgICAgIC8vIGxpbmsgdG8gb3RoZXIgZ3JhZGllbnRzIHVzaW5nIHhsaW5r
OmhyZWYsIHdlIG5lZWQgdG8gYnVpbGQgdGhlIGZ1bGwgaW5oZXJpdGFuY2UgY2hhaW4sIGFrYS4g
Y29sbGVjdEdyYWRpZW50UHJvcGVydGllcygpCisgICAgICAgIFNWR1JhZGlhbEdyYWRpZW50RWxl
bWVudCogcmFkaWFsR3JhZGllbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50Kj4oZ3JhZGllbnQtPm5vZGUoKSk7CisKKyAgICAgICAgUmFkaWFsR3JhZGllbnRB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAgICAgIHJhZGlhbEdyYWRpZW50RWxlbWVudC0+Y29s
bGVjdEdyYWRpZW50QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKKyAgICAgICAgd3JpdGVDb21tb25H
cmFkaWVudFByb3BlcnRpZXModHMsIGF0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCksIGF0dHJpYnV0
ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKSwgYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSk7CisK
KyAgICAgICAgRmxvYXRQb2ludCBmb2NhbFBvaW50OworICAgICAgICBGbG9hdFBvaW50IGNlbnRl
clBvaW50OworICAgICAgICBmbG9hdCByYWRpdXM7CisgICAgICAgIHJhZGlhbEdyYWRpZW50RWxl
bWVudC0+Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2ludHNBbmRSYWRpdXMoYXR0cmlidXRlcywgZm9j
YWxQb2ludCwgY2VudGVyUG9pbnQsIHJhZGl1cyk7CisKKyAgICAgICAgdHMgPDwgIiBbY2VudGVy
PSIgPDwgY2VudGVyUG9pbnQgPDwgIl0gW2ZvY2FsPSIgPDwgZm9jYWxQb2ludCA8PCAiXSBbcmFk
aXVzPSIgPDwgcmFkaXVzIDw8ICJdXG4iOworICAgIH0gZWxzZQorICAgICAgICB0cyA8PCAiXG4i
OworICAgIHdyaXRlQ2hpbGRyZW4odHMsIG9iamVjdCwgaW5kZW50KTsKK30KKwordm9pZCB3cml0
ZVNWR0NvbnRhaW5lcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBjb250YWlu
ZXIsIGludCBpbmRlbnQpCit7CisgICAgLy8gQ3VycmVudGx5IFJlbmRlclNWR1Jlc291cmNlRmls
dGVyUHJpbWl0aXZlIGhhcyBubyBtZWFuaW5nZnVsIG91dHB1dC4KKyAgICBpZiAoY29udGFpbmVy
LmlzU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdy
aXRlU3RhbmRhcmRQcmVmaXgodHMsIGNvbnRhaW5lciwgaW5kZW50KTsKKyAgICB3cml0ZVBvc2l0
aW9uQW5kU3R5bGUodHMsIGNvbnRhaW5lcik7CisgICAgdHMgPDwgIlxuIjsKKyAgICB3cml0ZVJl
c291cmNlcyh0cywgY29udGFpbmVyLCBpbmRlbnQpOworICAgIHdyaXRlQ2hpbGRyZW4odHMsIGNv
bnRhaW5lciwgaW5kZW50KTsKK30KKwordm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyU1ZHUm9vdCYgcm9vdCwgaW50IGluZGVudCkKK3sKKyAgICB3cml0ZVN0YW5kYXJkUHJl
Zml4KHRzLCByb290LCBpbmRlbnQpOworICAgIHRzIDw8IHJvb3QgPDwgIlxuIjsKKyAgICB3cml0
ZUNoaWxkcmVuKHRzLCByb290LCBpbmRlbnQpOworfQorCit2b2lkIHdyaXRlU1ZHVGV4dChUZXh0
U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyQmxvY2smIHRleHQsIGludCBpbmRlbnQpCit7CisgICAg
d3JpdGVTdGFuZGFyZFByZWZpeCh0cywgdGV4dCwgaW5kZW50KTsKKyAgICB3cml0ZVJlbmRlclNW
R1RleHRCb3godHMsIHRleHQpOworICAgIHRzIDw8ICJcbiI7CisgICAgd3JpdGVSZXNvdXJjZXMo
dHMsIHRleHQsIGluZGVudCk7CisgICAgd3JpdGVDaGlsZHJlbih0cywgdGV4dCwgaW5kZW50KTsK
K30KKwordm9pZCB3cml0ZVNWR0lubGluZVRleHQoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRl
clRleHQmIHRleHQsIGludCBpbmRlbnQpCit7CisgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywg
dGV4dCwgaW5kZW50KTsKKworICAgIC8vIFdoeSBub3QganVzdCBsaW5lc0JvdW5kaW5nQm94KCk/
CisgICAgdHMgPDwgIiAiIDw8IEZsb2F0UmVjdCh0ZXh0LmZpcnN0UnVuT3JpZ2luKCksIHRleHQu
bGluZXNCb3VuZGluZ0JveCgpLnNpemUoKSkgPDwgIlxuIjsKKyAgICB3cml0ZVJlc291cmNlcyh0
cywgdGV4dCwgaW5kZW50KTsKKyAgICB3cml0ZVNWR0lubGluZVRleHRCb3hlcyh0cywgdGV4dCwg
aW5kZW50KTsKK30KKwordm9pZCB3cml0ZVNWR0ltYWdlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBS
ZW5kZXJTVkdJbWFnZSYgaW1hZ2UsIGludCBpbmRlbnQpCit7CisgICAgd3JpdGVTdGFuZGFyZFBy
ZWZpeCh0cywgaW1hZ2UsIGluZGVudCk7CisgICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCBp
bWFnZSk7CisgICAgdHMgPDwgIlxuIjsKKyAgICB3cml0ZVJlc291cmNlcyh0cywgaW1hZ2UsIGlu
ZGVudCk7Cit9CisKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Bh
dGgmIHBhdGgsIGludCBpbmRlbnQpCit7CisgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgcGF0
aCwgaW5kZW50KTsKKyAgICB0cyA8PCBwYXRoIDw8ICJcbiI7CisgICAgd3JpdGVSZXNvdXJjZXMo
dHMsIHBhdGgsIGluZGVudCk7Cit9CisKK3ZvaWQgd3JpdGVTVkdHcmFkaWVudFN0b3AoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCYgc3RvcCwgaW50IGluZGVudCkK
K3sKKyAgICB3cml0ZVN0YW5kYXJkUHJlZml4KHRzLCBzdG9wLCBpbmRlbnQpOworCisgICAgU1ZH
U3RvcEVsZW1lbnQqIHN0b3BFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3RvcEVsZW1lbnQqPihz
dG9wLm5vZGUoKSk7CisgICAgQVNTRVJUKHN0b3BFbGVtZW50KTsKKworICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IHN0b3Auc3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm47
CisKKyAgICB0cyA8PCAiIFtvZmZzZXQ9IiA8PCBzdG9wRWxlbWVudC0+b2Zmc2V0KCkgPDwgIl0g
W2NvbG9yPSIgPDwgc3RvcEVsZW1lbnQtPnN0b3BDb2xvckluY2x1ZGluZ09wYWNpdHkoKSA8PCAi
XVxuIjsKK30KKwordm9pZCB3cml0ZVJlc291cmNlcyhUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyT2JqZWN0JiBvYmplY3QsIGludCBpbmRlbnQpCit7CisgICAgY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlID0gb2JqZWN0LnN0eWxlKCk7CisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0
eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CisKKyAgICAvLyBGSVhNRTogV2Ugd2FudCB0byB1c2Ug
U1ZHUmVzb3VyY2VzQ2FjaGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlc291cmNlcyBhcmUgcHJlc2Vu
dCwgaW5zdGVhZCBvZiBxdWVyaW5nIHRoZSByZXNvdXJjZSA8LT4gaWQgY2FjaGUuCisgICAgLy8g
Rm9yIG5vdyBsZWF2ZSB0aGUgRFJUIG91dHB1dCBhcyBpcywgYnV0IGxhdGVyIG9uIHdlIHNob3Vs
ZCBjaGFuZ2UgdGhpcyBzbyBjeWNsZXMgYXJlIHByb3Blcmx5IGlnbm9yZWQgaW4gdGhlIERSVCBv
dXRwdXQuCisgICAgUmVuZGVyT2JqZWN0JiByZW5kZXJlciA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2Jq
ZWN0Jj4ob2JqZWN0KTsKKyAgICBpZiAoIXN2Z1N0eWxlLT5tYXNrZXJSZXNvdXJjZSgpLmlzRW1w
dHkoKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9IGdl
dFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcj4ob2JqZWN0LmRv
Y3VtZW50KCksIHN2Z1N0eWxlLT5tYXNrZXJSZXNvdXJjZSgpKSkgeworICAgICAgICAgICAgd3Jp
dGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgICAgICAgICB0cyA8PCAiICI7CisgICAgICAgICAg
ICB3cml0ZU5hbWVBbmRRdW90ZWRWYWx1ZSh0cywgIm1hc2tlciIsIHN2Z1N0eWxlLT5tYXNrZXJS
ZXNvdXJjZSgpKTsKKyAgICAgICAgICAgIHRzIDw8ICIgIjsKKyAgICAgICAgICAgIHdyaXRlU3Rh
bmRhcmRQcmVmaXgodHMsICptYXNrZXIsIDApOworICAgICAgICAgICAgdHMgPDwgIiAiIDw8IG1h
c2tlci0+cmVzb3VyY2VCb3VuZGluZ0JveCgmcmVuZGVyZXIpIDw8ICJcbiI7CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKCFzdmdTdHlsZS0+Y2xpcHBlclJlc291cmNlKCkuaXNFbXB0eSgpKSB7
CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSBnZXRSZW5k
ZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyPihvYmplY3QuZG9jdW1l
bnQoKSwgc3ZnU3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgpKSkgeworICAgICAgICAgICAgd3JpdGVJ
bmRlbnQodHMsIGluZGVudCk7CisgICAgICAgICAgICB0cyA8PCAiICI7CisgICAgICAgICAgICB3
cml0ZU5hbWVBbmRRdW90ZWRWYWx1ZSh0cywgImNsaXBQYXRoIiwgc3ZnU3R5bGUtPmNsaXBwZXJS
ZXNvdXJjZSgpKTsKKyAgICAgICAgICAgIHRzIDw8ICIgIjsKKyAgICAgICAgICAgIHdyaXRlU3Rh
bmRhcmRQcmVmaXgodHMsICpjbGlwcGVyLCAwKTsKKyAgICAgICAgICAgIHRzIDw8ICIgIiA8PCBj
bGlwcGVyLT5yZXNvdXJjZUJvdW5kaW5nQm94KCZyZW5kZXJlcikgPDwgIlxuIjsKKyAgICAgICAg
fQorICAgIH0KKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBpZiAoIXN2Z1N0eWxlLT5maWx0ZXJS
ZXNvdXJjZSgpLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIqIGZpbHRlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcj4ob2JqZWN0LmRvY3VtZW50KCksIHN2Z1N0eWxlLT5maWx0ZXJSZXNvdXJjZSgpKSkgewor
ICAgICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgICAgICAgICB0cyA8PCAi
ICI7CisgICAgICAgICAgICB3cml0ZU5hbWVBbmRRdW90ZWRWYWx1ZSh0cywgImZpbHRlciIsIHN2
Z1N0eWxlLT5maWx0ZXJSZXNvdXJjZSgpKTsKKyAgICAgICAgICAgIHRzIDw8ICIgIjsKKyAgICAg
ICAgICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsICpmaWx0ZXIsIDApOworICAgICAgICAgICAg
dHMgPDwgIiAiIDw8IGZpbHRlci0+cmVzb3VyY2VCb3VuZGluZ0JveCgmcmVuZGVyZXIpIDw8ICJc
biI7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclRyZWVBc1RleHQuaAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVu
ZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuaDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTVkdSZW5kZXJUcmVlQXNUZXh0X2gKKyNk
ZWZpbmUgU1ZHUmVuZGVyVHJlZUFzVGV4dF9oCisKKyNpZiBFTkFCTEUoU1ZHKQorCisjaW5jbHVk
ZSAiVGV4dFN0cmVhbS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBDb2xv
cjsKKyAgICBjbGFzcyBGbG9hdFJlY3Q7CisgICAgY2xhc3MgRmxvYXRTaXplOworICAgIGNsYXNz
IE5vZGU7CisgICAgY2xhc3MgUmVuZGVyQmxvY2s7CisgICAgY2xhc3MgUmVuZGVySW1hZ2U7Cisg
ICAgY2xhc3MgUmVuZGVyT2JqZWN0OworICAgIGNsYXNzIFJlbmRlclNWR0dyYWRpZW50U3RvcDsK
KyAgICBjbGFzcyBSZW5kZXJTVkdJbWFnZTsKKyAgICBjbGFzcyBSZW5kZXJTVkdQYXRoOworICAg
IGNsYXNzIFJlbmRlclNWR1Jvb3Q7CisgICAgY2xhc3MgUmVuZGVyVGV4dDsKKyAgICBjbGFzcyBB
ZmZpbmVUcmFuc2Zvcm07CisgICAgY2xhc3MgU1ZHVW5pdFR5cGVzOworCisvLyBmdW5jdGlvbnMg
dXNlZCBieSB0aGUgbWFpbiBSZW5kZXJUcmVlQXNUZXh0IGNvZGUKK3ZvaWQgd3JpdGUoVGV4dFN0
cmVhbSYsIGNvbnN0IFJlbmRlclNWR1BhdGgmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGUoVGV4
dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR1Jvb3QmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGVT
VkdHcmFkaWVudFN0b3AoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCYs
IGludCBpbmRlbnQpOwordm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRleHRTdHJlYW0m
LCBjb25zdCBSZW5kZXJPYmplY3QmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGVTVkdDb250YWlu
ZXIoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlck9iamVjdCYsIGludCBpbmRlbnQpOwordm9pZCB3
cml0ZVNWR0ltYWdlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYsIGludCBpbmRl
bnQpOwordm9pZCB3cml0ZVNWR0lubGluZVRleHQoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclRl
eHQmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGVTVkdUZXh0KFRleHRTdHJlYW0mLCBjb25zdCBS
ZW5kZXJCbG9jayYsIGludCBpbmRlbnQpOwordm9pZCB3cml0ZVJlc291cmNlcyhUZXh0U3RyZWFt
JiwgY29uc3QgUmVuZGVyT2JqZWN0JiwgaW50IGluZGVudCk7CisKKy8vIGhlbHBlciBvcGVyYXRv
cnMgZGVmaW5lZCB1c2VkIGluIHZhcmlvdXMgY2xhc3NlcyB0byBkdW1wIHRoZSByZW5kZXIgdHJl
ZS4KK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQ29sb3Im
KTsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZsb2F0UmVjdCYp
OworCisvLyBoZWxwZXIgb3BlcmF0b3JzIHNwZWNpZmljIHRvIGR1bXBpbmcgdGhlIHJlbmRlciB0
cmVlLiB0aGVzZSBhcmUgdXNlZCBpbiB2YXJpb3VzIGNsYXNzZXMgdG8gZHVtcCB0aGUgcmVuZGVy
IHRyZWUKKy8vIHRoZXNlIGNvdWxkIGJlIGRlZmluZWQgaW4gc2VwYXJhdGUgbmFtZXNwYWNlIHRv
IGF2b2lkIG1hdGNoaW5nIHRoZXNlIGdlbmVyaWMgc2lnbmF0dXJlcyB1bmludGVudGlvbmFsbHku
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZW0+CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBWZWN0b3I8SXRlbSo+JiB2KQoreworICAgIHRzIDw8ICJbIjsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2LnNpemUoKTsgaSsrKSB7CisgICAgICAgIHRz
IDw8ICp2W2ldOworICAgICAgICBpZiAoaSA8IHYuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgIHRz
IDw8ICIsICI7CisgICAgfQorCisgICAgdHMgPDwgIl0iOworICAgIHJldHVybiB0czsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgUG9pbnRlcj4KK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIFBvaW50ZXIqIHQpCit7CisgICAgdHMgPDwgcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4odCk7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorCisjZW5kaWYgLy8gU1ZHUmVuZGVyVHJlZUFzVGV4dF9o
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAkocmV2aXNpb24gNzUy
NzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlcy5jcHA6NzUyNzIpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY4NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQu
aCIKKyNpbmNsdWRlICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5o
IgorI2luY2x1ZGUgIlNWR1BhaW50LmgiCisjaW5jbHVkZSAiU1ZHUGF0dGVybkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NWR1Jlc291cmNlczo6U1ZHUmVzb3VyY2VzKCkK
KyAgICA6IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEoMCkKKyAgICAsIG1fbWFya2VyRGF0YSgw
KQorICAgICwgbV9maWxsU3Ryb2tlRGF0YSgwKQorICAgICwgbV9saW5rZWRSZXNvdXJjZSgwKQor
eworfQorCitzdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsaXBwZXJGaWx0ZXJN
YXNrZXJUYWdzKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8QXRvbWljU3Ry
aW5nSW1wbCo+LCBzX3RhZ0xpc3QsICgpKTsKKyAgICBpZiAoc190YWdMaXN0LmlzRW1wdHkoKSkg
eworICAgICAgICAvLyAiY29udGFpbmVyIGVsZW1lbnRzIjogaHR0cDovL3d3dy53My5vcmcvVFIv
U1ZHMTEvaW50cm8uaHRtbCNUZXJtQ29udGFpbmVyRWxlbWVudAorICAgICAgICAvLyAiZ3JhcGhp
Y3MgZWxlbWVudHMiIDogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8uaHRtbCNUZXJt
R3JhcGhpY3NFbGVtZW50CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmFUYWcubG9j
YWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6Y2lyY2xl
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6
OmVsbGlwc2VUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChT
VkdOYW1lczo6Z2x5cGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0
LmFkZChTVkdOYW1lczo6Z1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xp
c3QuYWRkKFNWR05hbWVzOjppbWFnZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBz
X3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAg
ICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6Om1hcmtlclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkp
OworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjptYXNrVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6Om1pc3NpbmdfZ2x5cGhUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6cGF0
aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVz
Ojpwb2x5Z29uVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQo
U1ZHTmFtZXM6OnBvbHlsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFn
TGlzdC5hZGQoU1ZHTmFtZXM6OnJlY3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAg
c190YWdMaXN0LmFkZChTVkdOYW1lczo6c3ZnVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAg
ICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnRleHRUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsK
KyAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6dXNlVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSk7CisKKyAgICAgICAgLy8gTm90IGxpc3RlZCBpbiB0aGUgZGVmaW5pdGlvbnMgaXMgdGhlIGNs
aXBQYXRoIGVsZW1lbnQsIHRoZSBTVkcgc3BlYyBzYXlzIHRob3VnaDoKKyAgICAgICAgLy8gVGhl
ICJjbGlwUGF0aCIgZWxlbWVudCBvciBhbnkgb2YgaXRzIGNoaWxkcmVuIGNhbiBzcGVjaWZ5IHBy
b3BlcnR5ICJjbGlwLXBhdGgiLgorICAgICAgICAvLyBTbyB3ZSBoYXZlIHRvIGFkZCBjbGlwUGF0
aFRhZyBoZXJlLCBvdGhlcndoaXNlIGNsaXAtcGF0aCBvbiBjbGlwUGF0aCB3aWxsIGZhaWwuCisg
ICAgICAgIC8vIChBbHJlYWR5IG1haWxlZCBTVkcgV0csIHdhaXRpbmcgZm9yIGEgc29sdXRpb24p
CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmNsaXBQYXRoVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7CisKKyAgICAgICAgLy8gTm90IGxpc3RlZCBpbiB0aGUgZGVmaW5pdGlvbnMgYXJl
IHRoZSB0ZXh0IGNvbnRlbnQgZWxlbWVudHMsIHRob3VnaCBmaWx0ZXIvY2xpcHBlci9tYXNrZXIg
b24gdHNwYW4vdGV4dC8uLiBpcyBhbGxvd2VkLgorICAgICAgICAvLyAoQWxyZWFkeSBtYWlsZWQg
U1ZHIFdHLCB3YWl0aW5nIGZvciBhIHNvbHV0aW9uKQorICAgICAgICBzX3RhZ0xpc3QuYWRkKFNW
R05hbWVzOjphbHRHbHlwaFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xp
c3QuYWRkKFNWR05hbWVzOjp0ZXh0UGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAg
ICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjp0cmVmVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Cisg
ICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnRzcGFuVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSk7CisKKyAgICAgICAgLy8gRWxlbWVudHMgdGhhdCB3ZSBpZ25vcmUsIGFzIGl0IGRvZXNuJ3Qg
bWFrZSBhbnkgc2Vuc2UuCisgICAgICAgIC8vIGRlZnMsIHBhdHRlcm4sIHN3aXRjaCAoRklYTUU6
IE1haWwgU1ZHIFdHIGFib3V0IHRoZXNlKQorICAgICAgICAvLyBzeW1ib2wgKGlzIGNvbnZlcnRl
ZCB0byBhIHN2ZyBlbGVtZW50LCB3aGVuIHJlZmVyZW5jZWQgYnkgdXNlLCB3ZSBjYW4gc2FmZWx5
IGlnbm9yZSBpdC4pCisgICAgfQorCisgICAgcmV0dXJuIHNfdGFnTGlzdDsKK30KKworc3RhdGlj
IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBtYXJrZXJUYWdzKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+LCBzX3RhZ0xpc3QsICgpKTsK
KyAgICBpZiAoc190YWdMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNW
R05hbWVzOjpsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5h
ZGQoU1ZHTmFtZXM6OnBhdGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdM
aXN0LmFkZChTVkdOYW1lczo6cG9seWdvblRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAg
ICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpwb2x5bGluZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkp
OworICAgIH0KKworICAgIHJldHVybiBzX3RhZ0xpc3Q7Cit9CisKK3N0YXRpYyBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiYgZmlsbEFuZFN0cm9rZVRhZ3MoKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4sIHNfdGFnTGlzdCwgKCkpOworICAg
IGlmIChzX3RhZ0xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFt
ZXM6OmFsdEdseXBoVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5h
ZGQoU1ZHTmFtZXM6OmNpcmNsZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3Rh
Z0xpc3QuYWRkKFNWR05hbWVzOjplbGxpcHNlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAg
ICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmxpbmVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsK
KyAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6cGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBs
KCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpwb2x5Z29uVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnBvbHlsaW5lVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnJl
Y3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1l
czo6dGV4dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNW
R05hbWVzOjp0ZXh0UGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xp
c3QuYWRkKFNWR05hbWVzOjp0cmVmVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNf
dGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnRzcGFuVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAg
fQorCisgICAgcmV0dXJuIHNfdGFnTGlzdDsKK30KKworc3RhdGljIEhhc2hTZXQ8QXRvbWljU3Ry
aW5nSW1wbCo+JiBjaGFpbmFibGVSZXNvdXJjZVRhZ3MoKQoreworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4sIHNfdGFnTGlzdCwgKCkpOworICAgIGlm
IChzX3RhZ0xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6
OmxpbmVhckdyYWRpZW50VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlz
dC5hZGQoU1ZHTmFtZXM6OmZpbHRlclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBz
X3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpwYXR0ZXJuVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Cisg
ICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnJhZGlhbEdyYWRpZW50VGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHNfdGFnTGlzdDsKK30KKworc3RhdGlj
IGlubGluZSBTdHJpbmcgdGFyZ2V0UmVmZXJlbmNlRnJvbVJlc291cmNlKFNWR0VsZW1lbnQqIGVs
ZW1lbnQpCit7CisgICAgU3RyaW5nIHRhcmdldDsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6cGF0dGVyblRhZykpCisgICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PFNW
R1BhdHRlcm5FbGVtZW50Kj4oZWxlbWVudCktPmhyZWYoKTsKKyAgICBlbHNlIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpsaW5lYXJHcmFkaWVudFRhZykgfHwgZWxlbWVudC0+aGFz
VGFnTmFtZShTVkdOYW1lczo6cmFkaWFsR3JhZGllbnRUYWcpKQorICAgICAgICB0YXJnZXQgPSBz
dGF0aWNfY2FzdDxTVkdHcmFkaWVudEVsZW1lbnQqPihlbGVtZW50KS0+aHJlZigpOworI2lmIEVO
QUJMRShGSUxURVJTKQorICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6
OmZpbHRlclRhZykpCisgICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1l
bnQqPihlbGVtZW50KS0+aHJlZigpOworI2VuZGlmCisgICAgZWxzZQorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVybiBTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldCh0
YXJnZXQpOworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBw
YWludGluZ1Jlc291cmNlRnJvbVNWR1BhaW50KERvY3VtZW50KiBkb2N1bWVudCwgU1ZHUGFpbnQq
IHBhaW50LCBBdG9taWNTdHJpbmcmIGlkLCBib29sJiBoYXNQZW5kaW5nUmVzb3VyY2UpCit7Cisg
ICAgQVNTRVJUKHBhaW50KTsKKworICAgIFNWR1BhaW50OjpTVkdQYWludFR5cGUgcGFpbnRUeXBl
ID0gcGFpbnQtPnBhaW50VHlwZSgpOworICAgIGlmIChwYWludFR5cGUgIT0gU1ZHUGFpbnQ6OlNW
R19QQUlOVFRZUEVfVVJJICYmIHBhaW50VHlwZSAhPSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9V
UklfUkdCQ09MT1IpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWQgPSBTVkdVUklSZWZlcmVu
Y2U6OmdldFRhcmdldChwYWludC0+dXJpKCkpOworICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyKiBjb250YWluZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lckJ5SWQoZG9jdW1l
bnQsIGlkKTsKKyAgICBpZiAoIWNvbnRhaW5lcikgeworICAgICAgICBoYXNQZW5kaW5nUmVzb3Vy
Y2UgPSB0cnVlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZW5kZXJTVkdSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlID0gY29udGFpbmVyLT5yZXNvdXJjZVR5cGUoKTsKKyAgICBp
ZiAocmVzb3VyY2VUeXBlICE9IFBhdHRlcm5SZXNvdXJjZVR5cGUgJiYgcmVzb3VyY2VUeXBlICE9
IExpbmVhckdyYWRpZW50UmVzb3VyY2VUeXBlICYmIHJlc291cmNlVHlwZSAhPSBSYWRpYWxHcmFk
aWVudFJlc291cmNlVHlwZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY29udGFp
bmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UoU1ZH
RG9jdW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25zLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBT
VkdFbGVtZW50KiBlbGVtZW50KQoreworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBpZiAoIWVs
ZW1lbnQtPmlzU3R5bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGV4dGVuc2lvbnMtPmFk
ZFBlbmRpbmdSZXNvdXJjZShpZCwgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGVsZW1l
bnQpKTsKK30KKworYm9vbCBTVkdSZXNvdXJjZXM6OmJ1aWxkQ2FjaGVkUmVzb3VyY2VzKGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUpCit7Cisg
ICAgQVNTRVJUKG9iamVjdCk7CisgICAgQVNTRVJUKHN0eWxlKTsKKworICAgIE5vZGUqIG5vZGUg
PSBvYmplY3QtPm5vZGUoKTsKKyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKG5vZGUtPmlz
U1ZHRWxlbWVudCgpKTsKKworICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4obm9kZSk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBvYmplY3QtPmRvY3VtZW50KCk7CisgICAg
QVNTRVJUKGRvY3VtZW50KTsKKworICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9u
cyA9IGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7CisgICAgQVNTRVJUKGV4dGVuc2lv
bnMpOworCisgICAgQXRvbWljU3RyaW5nSW1wbCogdGFnTmFtZUltcGwgPSBlbGVtZW50LT50YWdR
TmFtZSgpLmxvY2FsTmFtZSgpLmltcGwoKTsKKyAgICBpZiAoIXRhZ05hbWVJbXBsKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGZvdW5kUmVzb3VyY2VzID0gZmFsc2U7CisgICAg
aWYgKGNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkuY29udGFpbnModGFnTmFtZUltcGwpKSB7Cisg
ICAgICAgIGlmIChzdHlsZS0+aGFzQ2xpcHBlcigpKSB7CisgICAgICAgICAgICBBdG9taWNTdHJp
bmcgaWQoc3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgpKTsKKyAgICAgICAgICAgIGlmIChzZXRDbGlw
cGVyKGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI+KGRv
Y3VtZW50LCBpZCkpKQorICAgICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShl
eHRlbnNpb25zLCBpZCwgZWxlbWVudCk7CisgICAgICAgIH0KKworI2lmIEVOQUJMRShGSUxURVJT
KQorICAgICAgICBpZiAoc3R5bGUtPmhhc0ZpbHRlcigpKSB7CisgICAgICAgICAgICBBdG9taWNT
dHJpbmcgaWQoc3R5bGUtPmZpbHRlclJlc291cmNlKCkpOworICAgICAgICAgICAgaWYgKHNldEZp
bHRlcihnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KGRv
Y3VtZW50LCBpZCkpKQorICAgICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShl
eHRlbnNpb25zLCBpZCwgZWxlbWVudCk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGlm
IChzdHlsZS0+aGFzTWFza2VyKCkpIHsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBpZChzdHls
ZS0+bWFza2VyUmVzb3VyY2UoKSk7CisgICAgICAgICAgICBpZiAoc2V0TWFza2VyKGdldFJlbmRl
clNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcj4oZG9jdW1lbnQsIGlkKSkp
CisgICAgICAgICAgICAgICAgZm91bmRSZXNvdXJjZXMgPSB0cnVlOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKGV4dGVuc2lvbnMsIGlk
LCBlbGVtZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtYXJrZXJUYWdzKCkuY29u
dGFpbnModGFnTmFtZUltcGwpICYmIHN0eWxlLT5oYXNNYXJrZXJzKCkpIHsKKyAgICAgICAgQXRv
bWljU3RyaW5nIG1hcmtlclN0YXJ0SWQoc3R5bGUtPm1hcmtlclN0YXJ0UmVzb3VyY2UoKSk7Cisg
ICAgICAgIGlmIChzZXRNYXJrZXJTdGFydChnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXI+KGRvY3VtZW50LCBtYXJrZXJTdGFydElkKSkpCisgICAgICAgICAg
ICBmb3VuZFJlc291cmNlcyA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlZ2lz
dGVyUGVuZGluZ1Jlc291cmNlKGV4dGVuc2lvbnMsIG1hcmtlclN0YXJ0SWQsIGVsZW1lbnQpOwor
CisgICAgICAgIEF0b21pY1N0cmluZyBtYXJrZXJNaWRJZChzdHlsZS0+bWFya2VyTWlkUmVzb3Vy
Y2UoKSk7CisgICAgICAgIGlmIChzZXRNYXJrZXJNaWQoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlk
PFJlbmRlclNWR1Jlc291cmNlTWFya2VyPihkb2N1bWVudCwgbWFya2VyTWlkSWQpKSkKKyAgICAg
ICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UoZXh0ZW5zaW9ucywgbWFya2VyTWlkSWQsIGVsZW1lbnQp
OworCisgICAgICAgIEF0b21pY1N0cmluZyBtYXJrZXJFbmRJZChzdHlsZS0+bWFya2VyRW5kUmVz
b3VyY2UoKSk7CisgICAgICAgIGlmIChzZXRNYXJrZXJFbmQoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VC
eUlkPFJlbmRlclNWR1Jlc291cmNlTWFya2VyPihkb2N1bWVudCwgbWFya2VyRW5kSWQpKSkKKyAg
ICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UoZXh0ZW5zaW9ucywgbWFya2VyRW5kSWQsIGVsZW1l
bnQpOworICAgIH0KKworICAgIGlmIChmaWxsQW5kU3Ryb2tlVGFncygpLmNvbnRhaW5zKHRhZ05h
bWVJbXBsKSkgeworICAgICAgICBpZiAoc3R5bGUtPmhhc0ZpbGwoKSkgeworICAgICAgICAgICAg
Ym9vbCBoYXNQZW5kaW5nUmVzb3VyY2UgPSBmYWxzZTsKKyAgICAgICAgICAgIEF0b21pY1N0cmlu
ZyBpZDsKKyAgICAgICAgICAgIGlmIChzZXRGaWxsKHBhaW50aW5nUmVzb3VyY2VGcm9tU1ZHUGFp
bnQoZG9jdW1lbnQsIHN0eWxlLT5maWxsUGFpbnQoKSwgaWQsIGhhc1BlbmRpbmdSZXNvdXJjZSkp
KQorICAgICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGhhc1BlbmRpbmdSZXNvdXJjZSkKKyAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRp
bmdSZXNvdXJjZShleHRlbnNpb25zLCBpZCwgZWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3R5bGUtPmhhc1N0cm9rZSgpKSB7CisgICAgICAgICAgICBib29sIGhhc1BlbmRpbmdS
ZXNvdXJjZSA9IGZhbHNlOworICAgICAgICAgICAgQXRvbWljU3RyaW5nIGlkOworICAgICAgICAg
ICAgaWYgKHNldFN0cm9rZShwYWludGluZ1Jlc291cmNlRnJvbVNWR1BhaW50KGRvY3VtZW50LCBz
dHlsZS0+c3Ryb2tlUGFpbnQoKSwgaWQsIGhhc1BlbmRpbmdSZXNvdXJjZSkpKQorICAgICAgICAg
ICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGhhc1Bl
bmRpbmdSZXNvdXJjZSkKKyAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShl
eHRlbnNpb25zLCBpZCwgZWxlbWVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2hh
aW5hYmxlUmVzb3VyY2VUYWdzKCkuY29udGFpbnModGFnTmFtZUltcGwpKSB7CisgICAgICAgIEF0
b21pY1N0cmluZyBpZCh0YXJnZXRSZWZlcmVuY2VGcm9tUmVzb3VyY2UoZWxlbWVudCkpOworICAg
ICAgICBpZiAoc2V0TGlua2VkUmVzb3VyY2UoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXJC
eUlkKGRvY3VtZW50LCBpZCkpKQorICAgICAgICAgICAgZm91bmRSZXNvdXJjZXMgPSB0cnVlOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShleHRlbnNp
b25zLCBpZCwgZWxlbWVudCk7CisgICAgfQorCisgICAgcmV0dXJuIGZvdW5kUmVzb3VyY2VzOwor
fQorCit2b2lkIFNWR1Jlc291cmNlczo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVj
dCogb2JqZWN0LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFt
X2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhICYmICFtX21hcmtlckRhdGEgJiYgIW1fZmlsbFN0cm9r
ZURhdGEgJiYgIW1fbGlua2VkUmVzb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X2xpbmtlZFJlc291cmNlKSB7CisgICAgICAgIEFTU0VSVCghbV9jbGlwcGVyRmlsdGVyTWFza2Vy
RGF0YSk7CisgICAgICAgIEFTU0VSVCghbV9tYXJrZXJEYXRhKTsKKyAgICAgICAgQVNTRVJUKCFt
X2ZpbGxTdHJva2VEYXRhKTsKKyAgICAgICAgbV9saW5rZWRSZXNvdXJjZS0+cmVtb3ZlQ2xpZW50
RnJvbUNhY2hlKG9iamVjdCwgbWFya0ZvckludmFsaWRhdGlvbik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSkgeworICAgICAgICBp
ZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlcikKKyAgICAgICAgICAgIG1fY2xp
cHBlckZpbHRlck1hc2tlckRhdGEtPmNsaXBwZXItPnJlbW92ZUNsaWVudEZyb21DYWNoZShvYmpl
Y3QsIG1hcmtGb3JJbnZhbGlkYXRpb24pOworI2lmIEVOQUJMRShGSUxURVJTKQorICAgICAgICBp
ZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyKQorICAgICAgICAgICAgbV9jbGlw
cGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0
LCBtYXJrRm9ySW52YWxpZGF0aW9uKTsKKyNlbmRpZgorICAgICAgICBpZiAobV9jbGlwcGVyRmls
dGVyTWFza2VyRGF0YS0+bWFza2VyKQorICAgICAgICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2Vy
RGF0YS0+bWFza2VyLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0LCBtYXJrRm9ySW52YWxp
ZGF0aW9uKTsKKyAgICB9CisKKyAgICBpZiAobV9tYXJrZXJEYXRhKSB7CisgICAgICAgIGlmICht
X21hcmtlckRhdGEtPm1hcmtlclN0YXJ0KQorICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJr
ZXJTdGFydC0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKG9iamVjdCwgbWFya0ZvckludmFsaWRhdGlv
bik7CisgICAgICAgIGlmIChtX21hcmtlckRhdGEtPm1hcmtlck1pZCkKKyAgICAgICAgICAgIG1f
bWFya2VyRGF0YS0+bWFya2VyTWlkLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0LCBtYXJr
Rm9ySW52YWxpZGF0aW9uKTsKKyAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2VyRW5kKQor
ICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQtPnJlbW92ZUNsaWVudEZyb21DYWNo
ZShvYmplY3QsIG1hcmtGb3JJbnZhbGlkYXRpb24pOworICAgIH0KKworICAgIGlmIChtX2ZpbGxT
dHJva2VEYXRhKSB7CisgICAgICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhLT5maWxsKQorICAgICAg
ICAgICAgbV9maWxsU3Ryb2tlRGF0YS0+ZmlsbC0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKG9iamVj
dCwgbWFya0ZvckludmFsaWRhdGlvbik7CisgICAgICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhLT5z
dHJva2UpCisgICAgICAgICAgICBtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UtPnJlbW92ZUNsaWVu
dEZyb21DYWNoZShvYmplY3QsIG1hcmtGb3JJbnZhbGlkYXRpb24pOworICAgIH0KK30KKwordm9p
ZCBTVkdSZXNvdXJjZXM6OnJlc291cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyKiByZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQocmVzb3VyY2UpOworICAgIGlmICghbV9jbGlw
cGVyRmlsdGVyTWFza2VyRGF0YSAmJiAhbV9tYXJrZXJEYXRhICYmICFtX2ZpbGxTdHJva2VEYXRh
ICYmICFtX2xpbmtlZFJlc291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9saW5r
ZWRSZXNvdXJjZSA9PSByZXNvdXJjZSkgeworICAgICAgICBBU1NFUlQoIW1fY2xpcHBlckZpbHRl
ck1hc2tlckRhdGEpOworICAgICAgICBBU1NFUlQoIW1fbWFya2VyRGF0YSk7CisgICAgICAgIEFT
U0VSVCghbV9maWxsU3Ryb2tlRGF0YSk7CisgICAgICAgIG1fbGlua2VkUmVzb3VyY2UtPnJlbW92
ZUFsbENsaWVudHNGcm9tQ2FjaGUoKTsKKyAgICAgICAgbV9saW5rZWRSZXNvdXJjZSA9IDA7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHJlc291cmNlLT5yZXNvdXJjZVR5
cGUoKSkgeworICAgIGNhc2UgTWFza2VyUmVzb3VyY2VUeXBlOgorICAgICAgICBpZiAoIW1fY2xp
cHBlckZpbHRlck1hc2tlckRhdGEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG1f
Y2xpcHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tlciA9PSByZXNvdXJjZSkgeworICAgICAgICAg
ICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+bWFza2VyLT5yZW1vdmVBbGxDbGllbnRzRnJv
bUNhY2hlKCk7CisgICAgICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXIg
PSAwOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWFya2VyUmVzb3VyY2VU
eXBlOgorICAgICAgICBpZiAoIW1fbWFya2VyRGF0YSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAobV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydCA9PSByZXNvdXJjZSkgeworICAgICAg
ICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydC0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNo
ZSgpOworICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydCA9IDA7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2VyTWlkID09IHJlc291cmNlKSB7Cisg
ICAgICAgICAgICBtX21hcmtlckRhdGEtPm1hcmtlck1pZC0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21D
YWNoZSgpOworICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJNaWQgPSAwOworICAgICAg
ICB9CisgICAgICAgIGlmIChtX21hcmtlckRhdGEtPm1hcmtlckVuZCA9PSByZXNvdXJjZSkgewor
ICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQtPnJlbW92ZUFsbENsaWVudHNGcm9t
Q2FjaGUoKTsKKyAgICAgICAgICAgIG1fbWFya2VyRGF0YS0+bWFya2VyRW5kID0gMDsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhdHRlcm5SZXNvdXJjZVR5cGU6CisgICAg
Y2FzZSBMaW5lYXJHcmFkaWVudFJlc291cmNlVHlwZToKKyAgICBjYXNlIFJhZGlhbEdyYWRpZW50
UmVzb3VyY2VUeXBlOgorICAgICAgICBpZiAoIW1fZmlsbFN0cm9rZURhdGEpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgaWYgKG1fZmlsbFN0cm9rZURhdGEtPmZpbGwgPT0gcmVzb3VyY2Up
IHsKKyAgICAgICAgICAgIG1fZmlsbFN0cm9rZURhdGEtPmZpbGwtPnJlbW92ZUFsbENsaWVudHNG
cm9tQ2FjaGUoKTsKKyAgICAgICAgICAgIG1fZmlsbFN0cm9rZURhdGEtPmZpbGwgPSAwOworICAg
ICAgICB9CisgICAgICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UgPT0gcmVzb3VyY2Up
IHsKKyAgICAgICAgICAgIG1fZmlsbFN0cm9rZURhdGEtPnN0cm9rZS0+cmVtb3ZlQWxsQ2xpZW50
c0Zyb21DYWNoZSgpOworICAgICAgICAgICAgbV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlID0gMDsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbHRlclJlc291cmNlVHlwZToK
KyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICAgICAgaWYgKCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJE
YXRhKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChtX2NsaXBwZXJGaWx0ZXJNYXNr
ZXJEYXRhLT5maWx0ZXIgPT0gcmVzb3VyY2UpIHsKKyAgICAgICAgICAgIG1fY2xpcHBlckZpbHRl
ck1hc2tlckRhdGEtPmZpbHRlci0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOworICAgICAg
ICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyID0gMDsKKyAgICAgICAgfQor
I2Vsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDbGlwcGVyUmVzb3VyY2VUeXBlOgorICAgICAgICBpZiAoIW1fY2xpcHBl
ckZpbHRlck1hc2tlckRhdGEpCisgICAgICAgICAgICBicmVhazsgCisgICAgICAgIGlmIChtX2Ns
aXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyID09IHJlc291cmNlKSB7CisgICAgICAgICAg
ICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyLT5yZW1vdmVBbGxDbGllbnRzRnJv
bUNhY2hlKCk7CisgICAgICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVy
ID0gMDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNvbGlkQ29sb3JSZXNv
dXJjZVR5cGU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9p
ZCBTVkdSZXNvdXJjZXM6OmJ1aWxkU2V0T2ZSZXNvdXJjZXMoSGFzaFNldDxSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lcio+JiBzZXQpCit7CisgICAgaWYgKCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJE
YXRhICYmICFtX21hcmtlckRhdGEgJiYgIW1fZmlsbFN0cm9rZURhdGEgJiYgIW1fbGlua2VkUmVz
b3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2xpbmtlZFJlc291cmNlKSB7Cisg
ICAgICAgIEFTU0VSVCghbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSk7CisgICAgICAgIEFTU0VS
VCghbV9tYXJrZXJEYXRhKTsKKyAgICAgICAgQVNTRVJUKCFtX2ZpbGxTdHJva2VEYXRhKTsKKyAg
ICAgICAgc2V0LmFkZChtX2xpbmtlZFJlc291cmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKSB7CisgICAgICAgIGlmIChtX2Ns
aXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyKQorICAgICAgICAgICAgc2V0LmFkZChtX2Ns
aXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyKTsKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAg
ICAgICAgaWYgKG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlcikKKyAgICAgICAgICAg
IHNldC5hZGQobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyKTsKKyNlbmRpZgorICAg
ICAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+bWFza2VyKQorICAgICAgICAgICAg
c2V0LmFkZChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXIpOworICAgIH0KKworICAg
IGlmIChtX21hcmtlckRhdGEpIHsKKyAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2VyU3Rh
cnQpCisgICAgICAgICAgICBzZXQuYWRkKG1fbWFya2VyRGF0YS0+bWFya2VyU3RhcnQpOworICAg
ICAgICBpZiAobV9tYXJrZXJEYXRhLT5tYXJrZXJNaWQpCisgICAgICAgICAgICBzZXQuYWRkKG1f
bWFya2VyRGF0YS0+bWFya2VyTWlkKTsKKyAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2Vy
RW5kKQorICAgICAgICAgICAgc2V0LmFkZChtX21hcmtlckRhdGEtPm1hcmtlckVuZCk7CisgICAg
fQorCisgICAgaWYgKG1fZmlsbFN0cm9rZURhdGEpIHsKKyAgICAgICAgaWYgKG1fZmlsbFN0cm9r
ZURhdGEtPmZpbGwpCisgICAgICAgICAgICBzZXQuYWRkKG1fZmlsbFN0cm9rZURhdGEtPmZpbGwp
OworICAgICAgICBpZiAobV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlKQorICAgICAgICAgICAgc2V0
LmFkZChtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UpOworICAgIH0KK30KKworYm9vbCBTVkdSZXNv
dXJjZXM6OnNldENsaXBwZXIoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyKQorewor
ICAgIGlmICghY2xpcHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGNs
aXBwZXItPnJlc291cmNlVHlwZSgpID09IENsaXBwZXJSZXNvdXJjZVR5cGUpOworCisgICAgaWYg
KCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKQorICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNr
ZXJEYXRhID0gQ2xpcHBlckZpbHRlck1hc2tlckRhdGE6OmNyZWF0ZSgpOworCisgICAgbV9jbGlw
cGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlciA9IGNsaXBwZXI7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgU1ZHUmVzb3VyY2VzOjpyZXNldENsaXBwZXIoKQoreworICAgIEFTU0VSVCht
X2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKTsKKyAgICBBU1NFUlQobV9jbGlwcGVyRmlsdGVyTWFz
a2VyRGF0YS0+Y2xpcHBlcik7CisgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBl
ciA9IDA7Cit9CisKKyNpZiBFTkFCTEUoRklMVEVSUykKK2Jvb2wgU1ZHUmVzb3VyY2VzOjpzZXRG
aWx0ZXIoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBpZiAoIWZpbHRl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGZpbHRlci0+cmVzb3VyY2VU
eXBlKCkgPT0gRmlsdGVyUmVzb3VyY2VUeXBlKTsKKworICAgIGlmICghbV9jbGlwcGVyRmlsdGVy
TWFza2VyRGF0YSkKKyAgICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSA9IENsaXBwZXJG
aWx0ZXJNYXNrZXJEYXRhOjpjcmVhdGUoKTsKKworICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRh
dGEtPmZpbHRlciA9IGZpbHRlcjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTVkdSZXNv
dXJjZXM6OnJlc2V0RmlsdGVyKCkKK3sKKyAgICBBU1NFUlQobV9jbGlwcGVyRmlsdGVyTWFza2Vy
RGF0YSk7CisgICAgQVNTRVJUKG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlcik7Cisg
ICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyID0gMDsKK30KKyNlbmRpZgorCiti
b29sIFNWR1Jlc291cmNlczo6c2V0TWFya2VyU3RhcnQoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIq
IG1hcmtlclN0YXJ0KQoreworICAgIGlmICghbWFya2VyU3RhcnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEFTU0VSVChtYXJrZXJTdGFydC0+cmVzb3VyY2VUeXBlKCkgPT0gTWFya2Vy
UmVzb3VyY2VUeXBlKTsKKworICAgIGlmICghbV9tYXJrZXJEYXRhKQorICAgICAgICBtX21hcmtl
ckRhdGEgPSBNYXJrZXJEYXRhOjpjcmVhdGUoKTsKKworICAgIG1fbWFya2VyRGF0YS0+bWFya2Vy
U3RhcnQgPSBtYXJrZXJTdGFydDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTVkdSZXNv
dXJjZXM6OnJlc2V0TWFya2VyU3RhcnQoKQoreworICAgIEFTU0VSVChtX21hcmtlckRhdGEpOwor
ICAgIEFTU0VSVChtX21hcmtlckRhdGEtPm1hcmtlclN0YXJ0KTsKKyAgICBtX21hcmtlckRhdGEt
Pm1hcmtlclN0YXJ0ID0gMDsKK30KKworYm9vbCBTVkdSZXNvdXJjZXM6OnNldE1hcmtlck1pZChS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkKQoreworICAgIGlmICghbWFya2VyTWlk
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobWFya2VyTWlkLT5yZXNvdXJj
ZVR5cGUoKSA9PSBNYXJrZXJSZXNvdXJjZVR5cGUpOworCisgICAgaWYgKCFtX21hcmtlckRhdGEp
CisgICAgICAgIG1fbWFya2VyRGF0YSA9IE1hcmtlckRhdGE6OmNyZWF0ZSgpOworCisgICAgbV9t
YXJrZXJEYXRhLT5tYXJrZXJNaWQgPSBtYXJrZXJNaWQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgU1ZHUmVzb3VyY2VzOjpyZXNldE1hcmtlck1pZCgpCit7CisgICAgQVNTRVJUKG1fbWFy
a2VyRGF0YSk7CisgICAgQVNTRVJUKG1fbWFya2VyRGF0YS0+bWFya2VyTWlkKTsKKyAgICBtX21h
cmtlckRhdGEtPm1hcmtlck1pZCA9IDA7Cit9CisKK2Jvb2wgU1ZHUmVzb3VyY2VzOjpzZXRNYXJr
ZXJFbmQoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCkKK3sKKyAgICBpZiAoIW1h
cmtlckVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG1hcmtlckVuZC0+
cmVzb3VyY2VUeXBlKCkgPT0gTWFya2VyUmVzb3VyY2VUeXBlKTsKKworICAgIGlmICghbV9tYXJr
ZXJEYXRhKQorICAgICAgICBtX21hcmtlckRhdGEgPSBNYXJrZXJEYXRhOjpjcmVhdGUoKTsKKwor
ICAgIG1fbWFya2VyRGF0YS0+bWFya2VyRW5kID0gbWFya2VyRW5kOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFNWR1Jlc291cmNlczo6cmVzZXRNYXJrZXJFbmQoKQoreworICAgIEFTU0VS
VChtX21hcmtlckRhdGEpOworICAgIEFTU0VSVChtX21hcmtlckRhdGEtPm1hcmtlckVuZCk7Cisg
ICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQgPSAwOworfQorCitib29sIFNWR1Jlc291cmNlczo6
c2V0TWFza2VyKFJlbmRlclNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIpCit7CisgICAgaWYgKCFt
YXNrZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChtYXNrZXItPnJlc291
cmNlVHlwZSgpID09IE1hc2tlclJlc291cmNlVHlwZSk7CisKKyAgICBpZiAoIW1fY2xpcHBlckZp
bHRlck1hc2tlckRhdGEpCisgICAgICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEgPSBDbGlw
cGVyRmlsdGVyTWFza2VyRGF0YTo6Y3JlYXRlKCk7CisKKyAgICBtX2NsaXBwZXJGaWx0ZXJNYXNr
ZXJEYXRhLT5tYXNrZXIgPSBtYXNrZXI7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1ZH
UmVzb3VyY2VzOjpyZXNldE1hc2tlcigpCit7CisgICAgQVNTRVJUKG1fY2xpcHBlckZpbHRlck1h
c2tlckRhdGEpOworICAgIEFTU0VSVChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXIp
OworICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tlciA9IDA7Cit9CisKK2Jvb2wg
U1ZHUmVzb3VyY2VzOjpzZXRGaWxsKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBmaWxsKQor
eworICAgIGlmICghZmlsbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGZp
bGwtPnJlc291cmNlVHlwZSgpID09IFBhdHRlcm5SZXNvdXJjZVR5cGUKKyAgICAgICAgICAgfHwg
ZmlsbC0+cmVzb3VyY2VUeXBlKCkgPT0gTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGUKKyAgICAg
ICAgICAgfHwgZmlsbC0+cmVzb3VyY2VUeXBlKCkgPT0gUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5
cGUpOworCisgICAgaWYgKCFtX2ZpbGxTdHJva2VEYXRhKQorICAgICAgICBtX2ZpbGxTdHJva2VE
YXRhID0gRmlsbFN0cm9rZURhdGE6OmNyZWF0ZSgpOworCisgICAgbV9maWxsU3Ryb2tlRGF0YS0+
ZmlsbCA9IGZpbGw7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1ZHUmVzb3VyY2VzOjpy
ZXNldEZpbGwoKQoreworICAgIEFTU0VSVChtX2ZpbGxTdHJva2VEYXRhKTsKKyAgICBBU1NFUlQo
bV9maWxsU3Ryb2tlRGF0YS0+ZmlsbCk7CisgICAgbV9maWxsU3Ryb2tlRGF0YS0+ZmlsbCA9IDA7
Cit9CisKK2Jvb2wgU1ZHUmVzb3VyY2VzOjpzZXRTdHJva2UoUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIqIHN0cm9rZSkKK3sKKyAgICBpZiAoIXN0cm9rZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgQVNTRVJUKHN0cm9rZS0+cmVzb3VyY2VUeXBlKCkgPT0gUGF0dGVyblJlc291cmNl
VHlwZQorICAgICAgICAgICB8fCBzdHJva2UtPnJlc291cmNlVHlwZSgpID09IExpbmVhckdyYWRp
ZW50UmVzb3VyY2VUeXBlCisgICAgICAgICAgIHx8IHN0cm9rZS0+cmVzb3VyY2VUeXBlKCkgPT0g
UmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGUpOworCisgICAgaWYgKCFtX2ZpbGxTdHJva2VEYXRh
KQorICAgICAgICBtX2ZpbGxTdHJva2VEYXRhID0gRmlsbFN0cm9rZURhdGE6OmNyZWF0ZSgpOwor
CisgICAgbV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlID0gc3Ryb2tlOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFNWR1Jlc291cmNlczo6cmVzZXRTdHJva2UoKQoreworICAgIEFTU0VSVCht
X2ZpbGxTdHJva2VEYXRhKTsKKyAgICBBU1NFUlQobV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlKTsK
KyAgICBtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UgPSAwOworfQorCitib29sIFNWR1Jlc291cmNl
czo6c2V0TGlua2VkUmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGxpbmtlZFJl
c291cmNlKQoreworICAgIGlmICghbGlua2VkUmVzb3VyY2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIG1fbGlua2VkUmVzb3VyY2UgPSBsaW5rZWRSZXNvdXJjZTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBTVkdSZXNvdXJjZXM6OnJlc2V0TGlua2VkUmVzb3VyY2UoKQorewor
ICAgIEFTU0VSVChtX2xpbmtlZFJlc291cmNlKTsKKyAgICBtX2xpbmtlZFJlc291cmNlID0gMDsK
K30KKworI2lmbmRlZiBOREVCVUcKK3ZvaWQgU1ZHUmVzb3VyY2VzOjpkdW1wKGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVChvYmplY3QpOworICAgIEFTU0VSVChvYmpl
Y3QtPm5vZGUoKSk7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIi0+IHRoaXM9JXAsIFNWR1Jlc291
cmNlcyhyZW5kZXJlcj0lcCwgbm9kZT0lcClcbiIsIHRoaXMsIG9iamVjdCwgb2JqZWN0LT5ub2Rl
KCkpOworICAgIGZwcmludGYoc3RkZXJyLCAiIHwgRE9NIFRyZWU6XG4iKTsKKyAgICBvYmplY3Qt
Pm5vZGUoKS0+c2hvd1RyZWVGb3JUaGlzKCk7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIHwg
TGlzdCBvZiByZXNvdXJjZXM6XG4iKTsKKyAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0
YSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gbV9j
bGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlcikKKyAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiIHwtPiBDbGlwcGVyICAgIDogJXAgKG5vZGU9JXApXG4iLCBjbGlwcGVyLCBjbGlwcGVy
LT5ub2RlKCkpOworI2lmIEVOQUJMRShGSUxURVJTKQorICAgICAgICBpZiAoUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIqIGZpbHRlciA9IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlcikK
KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHwtPiBGaWx0ZXIgICAgIDogJXAgKG5vZGU9
JXApXG4iLCBmaWx0ZXIsIGZpbHRlci0+bm9kZSgpKTsKKyNlbmRpZgorICAgICAgICBpZiAoUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEt
Pm1hc2tlcikKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHwtPiBNYXNrZXIgICAgIDog
JXAgKG5vZGU9JXApXG4iLCBtYXNrZXIsIG1hc2tlci0+bm9kZSgpKTsKKyAgICB9CisKKyAgICBp
ZiAobV9tYXJrZXJEYXRhKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciog
bWFya2VyU3RhcnQgPSBtX21hcmtlckRhdGEtPm1hcmtlclN0YXJ0KQorICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgfC0+IE1hcmtlclN0YXJ0OiAlcCAobm9kZT0lcClcbiIsIG1hcmtlclN0
YXJ0LCBtYXJrZXJTdGFydC0+bm9kZSgpKTsKKyAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNl
TWFya2VyKiBtYXJrZXJNaWQgPSBtX21hcmtlckRhdGEtPm1hcmtlck1pZCkKKyAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiIHwtPiBNYXJrZXJNaWQgIDogJXAgKG5vZGU9JXApXG4iLCBtYXJr
ZXJNaWQsIG1hcmtlck1pZC0+bm9kZSgpKTsKKyAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNl
TWFya2VyKiBtYXJrZXJFbmQgPSBtX21hcmtlckRhdGEtPm1hcmtlckVuZCkKKyAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiIHwtPiBNYXJrZXJFbmQgIDogJXAgKG5vZGU9JXApXG4iLCBtYXJr
ZXJFbmQsIG1hcmtlckVuZC0+bm9kZSgpKTsKKyAgICB9CisKKyAgICBpZiAobV9maWxsU3Ryb2tl
RGF0YSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGZpbGwgPSBt
X2ZpbGxTdHJva2VEYXRhLT5maWxsKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfC0+
IEZpbGwgICAgICAgOiAlcCAobm9kZT0lcClcbiIsIGZpbGwsIGZpbGwtPm5vZGUoKSk7CisgICAg
ICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogc3Ryb2tlID0gbV9maWxsU3Ryb2tl
RGF0YS0+c3Ryb2tlKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfC0+IFN0cm9rZSAg
ICAgOiAlcCAobm9kZT0lcClcbiIsIHN0cm9rZSwgc3Ryb2tlLT5ub2RlKCkpOworICAgIH0KKwor
ICAgIGlmIChtX2xpbmtlZFJlc291cmNlKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiB8LT4g
eGxpbms6aHJlZiA6ICVwIChub2RlPSVwKVxuIiwgbV9saW5rZWRSZXNvdXJjZSwgbV9saW5rZWRS
ZXNvdXJjZS0+bm9kZSgpKTsKK30KKyNlbmRpZgorCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuaAkocmV2aXNpb24gNzUyNzIpCShmcm9tIFdlYkNvcmUv
cmVuZGVyaW5nL1NWR1Jlc291cmNlcy5oOjc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1Jlc291cmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICAg
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpZm5kZWYgU1ZHUmVzb3VyY2VzX2gKKyNkZWZpbmUgU1ZHUmVzb3Vy
Y2VzX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1
bWVudDsKK2NsYXNzIFJlbmRlck9iamVjdDsKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
cjsKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOworY2xhc3MgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI7CitjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjsKK2NsYXNzIFJlbmRl
clNWR1Jlc291cmNlTWFza2VyOworY2xhc3MgU1ZHUmVuZGVyU3R5bGU7CisKKy8vIEhvbGRzIGEg
c2V0IG9mIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBSZW5kZXJPYmplY3QKK2NsYXNzIFNW
R1Jlc291cmNlcyA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgU1ZHUmVzb3Vy
Y2VzKCk7CisKKyAgICBib29sIGJ1aWxkQ2FjaGVkUmVzb3VyY2VzKGNvbnN0IFJlbmRlck9iamVj
dCosIGNvbnN0IFNWR1JlbmRlclN0eWxlKik7CisKKyAgICAvLyBPcmRpbmFyeSByZXNvdXJjZXMK
KyAgICBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIoKSBjb25zdCB7IHJldHVybiBt
X2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhID8gbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xp
cHBlciA6IDA7IH0KKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlciogZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSA/
IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlciA6IDA7IH0KKyNlbmRpZgorICAgIFJl
bmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFy
a2VyRGF0YSA/IG1fbWFya2VyRGF0YS0+bWFya2VyU3RhcnQgOiAwOyB9CisgICAgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIqIG1hcmtlck1pZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2VyRGF0YSA/
IG1fbWFya2VyRGF0YS0+bWFya2VyTWlkIDogMDsgfQorICAgIFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyKiBtYXJrZXJFbmQoKSBjb25zdCB7IHJldHVybiBtX21hcmtlckRhdGEgPyBtX21hcmtlckRh
dGEtPm1hcmtlckVuZCA6IDA7IH0KKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciogbWFza2Vy
KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSA/IG1fY2xpcHBlckZp
bHRlck1hc2tlckRhdGEtPm1hc2tlciA6IDA7IH0KKworICAgIC8vIFBhaW50IHNlcnZlcnMKKyAg
ICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogZmlsbCgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
bFN0cm9rZURhdGEgPyBtX2ZpbGxTdHJva2VEYXRhLT5maWxsIDogMDsgfQorICAgIFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyKiBzdHJva2UoKSBjb25zdCB7IHJldHVybiBtX2ZpbGxTdHJva2VE
YXRhID8gbV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlIDogMDsgfQorCisgICAgLy8gQ2hhaW5hYmxl
IHJlc291cmNlcyAtIGxpbmtlZCB0aHJvdWdoIHhsaW5rOmhyZWYKKyAgICBSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lciogbGlua2VkUmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2xpbmtlZFJl
c291cmNlOyB9CisKKyAgICB2b2lkIGJ1aWxkU2V0T2ZSZXNvdXJjZXMoSGFzaFNldDxSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcio+Jik7CisKKyAgICAvLyBNZXRob2RzIG9wZXJhdGluZyBvbiBh
bGwgY2FjaGVkIHJlc291cmNlcworICAgIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRl
ck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpIGNvbnN0OworICAgIHZv
aWQgcmVzb3VyY2VEZXN0cm95ZWQoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqKTsKKworI2lm
bmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoY29uc3QgUmVuZGVyT2JqZWN0Kik7CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXI7CisK
KyAgICAvLyBPbmx5IHVzZWQgYnkgU1ZHUmVzb3VyY2VzQ2FjaGUgY3ljbGUgZGV0ZWN0aW9uIGxv
Z2ljCisgICAgdm9pZCByZXNldENsaXBwZXIoKTsKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICB2
b2lkIHJlc2V0RmlsdGVyKCk7CisjZW5kaWYKKyAgICB2b2lkIHJlc2V0TWFya2VyU3RhcnQoKTsK
KyAgICB2b2lkIHJlc2V0TWFya2VyTWlkKCk7CisgICAgdm9pZCByZXNldE1hcmtlckVuZCgpOwor
ICAgIHZvaWQgcmVzZXRNYXNrZXIoKTsKKyAgICB2b2lkIHJlc2V0RmlsbCgpOworICAgIHZvaWQg
cmVzZXRTdHJva2UoKTsKKyAgICB2b2lkIHJlc2V0TGlua2VkUmVzb3VyY2UoKTsKKworcHJpdmF0
ZToKKyAgICBib29sIHNldENsaXBwZXIoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKik7CisjaWYg
RU5BQkxFKEZJTFRFUlMpCisgICAgYm9vbCBzZXRGaWx0ZXIoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIqKTsKKyNlbmRpZgorICAgIGJvb2wgc2V0TWFya2VyU3RhcnQoUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIqKTsKKyAgICBib29sIHNldE1hcmtlck1pZChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciop
OworICAgIGJvb2wgc2V0TWFya2VyRW5kKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKik7CisgICAg
Ym9vbCBzZXRNYXNrZXIoUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqKTsKKyAgICBib29sIHNldEZp
bGwoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqKTsKKyAgICBib29sIHNldFN0cm9rZShSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lciopOworICAgIGJvb2wgc2V0TGlua2VkUmVzb3VyY2UoUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqKTsKKworICAgIC8vIEZyb20gU1ZHIDEuMSAybmQgRWRp
dGlvbgorICAgIC8vIGNsaXBwZXI6ICdjb250YWluZXIgZWxlbWVudHMnIGFuZCAnZ3JhcGhpY3Mg
ZWxlbWVudHMnCisgICAgLy8gZmlsdGVyOiAgJ2NvbnRhaW5lciBlbGVtZW50cycgYW5kICdncmFw
aGljcyBlbGVtZW50cycKKyAgICAvLyBtYXNrZXI6ICAnY29udGFpbmVyIGVsZW1lbnRzJyBhbmQg
J2dyYXBoaWNzIGVsZW1lbnRzJworICAgIC8vIC0+IGEsIGNpcmNsZSwgZGVmcywgZWxsaXBzZSwg
Z2x5cGgsIGcsIGltYWdlLCBsaW5lLCBtYXJrZXIsIG1hc2ssIG1pc3NpbmctZ2x5cGgsIHBhdGgs
IHBhdHRlcm4sIHBvbHlnb24sIHBvbHlsaW5lLCByZWN0LCBzdmcsIHN3aXRjaCwgc3ltYm9sLCB0
ZXh0LCB1c2UKKyAgICBzdHJ1Y3QgQ2xpcHBlckZpbHRlck1hc2tlckRhdGEgeworICAgICAgICBD
bGlwcGVyRmlsdGVyTWFza2VyRGF0YSgpCisgICAgICAgICAgICA6IGNsaXBwZXIoMCkKKyNpZiBF
TkFCTEUoRklMVEVSUykKKyAgICAgICAgICAgICwgZmlsdGVyKDApCisjZW5kaWYKKyAgICAgICAg
ICAgICwgbWFza2VyKDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhPiBjcmVhdGUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IENsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhOworICAgICAgICB9
CisKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyOworI2lmIEVOQUJM
RShGSUxURVJTKQorICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyOworI2Vu
ZGlmCisgICAgICAgIFJlbmRlclNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXI7CisgICAgfTsKKwor
ICAgIC8vIEZyb20gU1ZHIDEuMSAybmQgRWRpdGlvbgorICAgIC8vIG1hcmtlcjogbGluZSwgcGF0
aCwgcG9seWdvbiwgcG9seWxpbmUKKyAgICBzdHJ1Y3QgTWFya2VyRGF0YSB7CisgICAgICAgIE1h
cmtlckRhdGEoKQorICAgICAgICAgICAgOiBtYXJrZXJTdGFydCgwKQorICAgICAgICAgICAgLCBt
YXJrZXJNaWQoMCkKKyAgICAgICAgICAgICwgbWFya2VyRW5kKDApCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPE1hcmtlckRhdGE+IGNyZWF0ZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTWFya2VyRGF0YTsKKyAgICAgICAgfQor
CisgICAgICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydDsKKyAgICAgICAg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck1pZDsKKyAgICAgICAgUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIqIG1hcmtlckVuZDsKKyAgICB9OworCisgICAgLy8gRnJvbSBTVkcgMS4xIDJu
ZCBFZGl0aW9uCisgICAgLy8gZmlsbDogICAgICAgJ3NoYXBlcycgYW5kICd0ZXh0IGNvbnRlbnQg
ZWxlbWVudHMnCisgICAgLy8gc3Ryb2tlOiAgICAgJ3NoYXBlcycgYW5kICd0ZXh0IGNvbnRlbnQg
ZWxlbWVudHMnCisgICAgLy8gLT4gYWx0R2x5cGgsIGNpcmNsZSwgZWxsaXBzZSwgbGluZSwgcGF0
aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQsIHRleHRQYXRoLCB0cmVmLCB0c3Bhbgor
ICAgIHN0cnVjdCBGaWxsU3Ryb2tlRGF0YSB7CisgICAgICAgIEZpbGxTdHJva2VEYXRhKCkKKyAg
ICAgICAgICAgIDogZmlsbCgwKQorICAgICAgICAgICAgLCBzdHJva2UoMCkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8RmlsbFN0cm9rZURhdGE+IGNy
ZWF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRmlsbFN0cm9rZURhdGE7
CisgICAgICAgIH0KKworICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogZmlsbDsK
KyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHN0cm9rZTsKKyAgICB9OworCisg
ICAgT3duUHRyPENsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhPiBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJE
YXRhOworICAgIE93blB0cjxNYXJrZXJEYXRhPiBtX21hcmtlckRhdGE7CisgICAgT3duUHRyPEZp
bGxTdHJva2VEYXRhPiBtX2ZpbGxTdHJva2VEYXRhOworICAgIFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyKiBtX2xpbmtlZFJlc291cmNlOworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCShyZXZpc2lv
biA3NTI3MikJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwOjc1
MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKKworI2lmIEVO
QUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKKyNpbmNs
dWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIK
KyNpbmNsdWRlICJTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1NWR1Jlc291cmNlc0NhY2hlOjpTVkdSZXNvdXJjZXNDYWNoZSgpCit7Cit9CisKK1NW
R1Jlc291cmNlc0NhY2hlOjp+U1ZHUmVzb3VyY2VzQ2FjaGUoKQoreworICAgIGRlbGV0ZUFsbFZh
bHVlcyhtX2NhY2hlKTsKK30KKwordm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6YWRkUmVzb3VyY2Vz
RnJvbVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlKQoreworICAgIEFTU0VSVChvYmplY3QpOworICAgIEFTU0VSVChzdHlsZSk7CisgICAg
QVNTRVJUKCFtX2NhY2hlLmNvbnRhaW5zKG9iamVjdCkpOworCisgICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CisgICAgQVNTRVJUKHN2Z1N0eWxl
KTsKKworICAgIC8vIEJ1aWxkIGEgbGlzdCBvZiBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0
aCB0aGUgcGFzc2VkIFJlbmRlck9iamVjdAorICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0g
bmV3IFNWR1Jlc291cmNlczsKKyAgICBpZiAoIXJlc291cmNlcy0+YnVpbGRDYWNoZWRSZXNvdXJj
ZXMob2JqZWN0LCBzdmdTdHlsZSkpIHsKKyAgICAgICAgZGVsZXRlIHJlc291cmNlczsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFB1dCBvYmplY3QgaW4gY2FjaGUuCisgICAgbV9j
YWNoZS5zZXQob2JqZWN0LCByZXNvdXJjZXMpOworCisgICAgLy8gUnVuIGN5Y2xlLWRldGVjdGlv
biBfYWZ0ZXJ3YXJkc18sIHNvIHNlbGYtcmVmZXJlbmNlcyBjYW4gYmUgY2F1Z2h0IGFzIHdlbGwu
CisgICAgU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIgc29sdmVyKG9iamVjdCwgcmVzb3VyY2VzKTsK
KyAgICBzb2x2ZXIucmVzb2x2ZUN5Y2xlcygpOworCisgICAgLy8gV2FsayByZXNvdXJjZXMgYW5k
IHJlZ2lzdGVyIHRoZSByZW5kZXIgb2JqZWN0IGF0IGVhY2ggcmVzb3VyY2VzLgorICAgIEhhc2hT
ZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPiByZXNvdXJjZVNldDsKKyAgICByZXNvdXJj
ZXMtPmJ1aWxkU2V0T2ZSZXNvdXJjZXMocmVzb3VyY2VTZXQpOworCisgICAgSGFzaFNldDxSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBlbmQgPSByZXNvdXJjZVNldC5lbmQo
KTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPjo6aXRlcmF0
b3IgaXQgPSByZXNvdXJjZVNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgq
aXQpLT5hZGRDbGllbnQob2JqZWN0KTsKK30KKwordm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6cmVt
b3ZlUmVzb3VyY2VzRnJvbVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBpZiAoIW1fY2FjaGUuY29udGFpbnMob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
U1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBtX2NhY2hlLmdldChvYmplY3QpOworCisgICAgLy8g
V2FsayByZXNvdXJjZXMgYW5kIHJlZ2lzdGVyIHRoZSByZW5kZXIgb2JqZWN0IGF0IGVhY2ggcmVz
b3VyY2VzLgorICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPiByZXNvdXJj
ZVNldDsKKyAgICByZXNvdXJjZXMtPmJ1aWxkU2V0T2ZSZXNvdXJjZXMocmVzb3VyY2VTZXQpOwor
CisgICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBlbmQg
PSByZXNvdXJjZVNldC5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXIqPjo6aXRlcmF0b3IgaXQgPSByZXNvdXJjZVNldC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgICgqaXQpLT5yZW1vdmVDbGllbnQob2JqZWN0KTsKKworICAgIGRlbGV0
ZSBtX2NhY2hlLnRha2Uob2JqZWN0KTsKK30KKworc3RhdGljIGlubGluZSBTVkdSZXNvdXJjZXND
YWNoZSogcmVzb3VyY2VzQ2FjaGVGcm9tUmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCogcmVuZGVy
ZXIpCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcmVuZGVyZXItPmRvY3VtZW50KCk7Cisg
ICAgQVNTRVJUKGRvY3VtZW50KTsKKworICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5z
aW9ucyA9IGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7CisgICAgQVNTRVJUKGV4dGVu
c2lvbnMpOworCisgICAgU1ZHUmVzb3VyY2VzQ2FjaGUqIGNhY2hlID0gZXh0ZW5zaW9ucy0+cmVz
b3VyY2VzQ2FjaGUoKTsKKyAgICBBU1NFUlQoY2FjaGUpOworCisgICAgcmV0dXJuIGNhY2hlOwor
fQorCitTVkdSZXNvdXJjZXMqIFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JS
ZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBBU1NFUlQocmVuZGVy
ZXIpOworICAgIFNWR1Jlc291cmNlc0NhY2hlKiBjYWNoZSA9IHJlc291cmNlc0NhY2hlRnJvbVJl
bmRlck9iamVjdChyZW5kZXJlcik7CisgICAgaWYgKCFjYWNoZS0+bV9jYWNoZS5jb250YWlucyhy
ZW5kZXJlcikpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNhY2hlLT5tX2NhY2hl
LmdldChyZW5kZXJlcik7Cit9CisKK3ZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91
dENoYW5nZWQoUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgU1ZHUmVzb3VyY2VzKiByZXNv
dXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0
KG9iamVjdCk7CisgICAgaWYgKCFyZXNvdXJjZXMpCisgICAgICAgIHJldHVybjsKKworICAgIHJl
c291cmNlcy0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKG9iamVjdCk7Cit9CisKK3ZvaWQgU1ZHUmVz
b3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQoreworICAg
IEFTU0VSVChyZW5kZXJlcik7CisgICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlRXF1YWwp
CisgICAgICAgIHJldHVybjsKKworICAgIGNsaWVudFVwZGF0ZWRGcm9tRWxlbWVudChyZW5kZXJl
ciwgbmV3U3R5bGUpOworICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFy
ZW50UmVzb3VyY2VJbnZhbGlkYXRpb24ocmVuZGVyZXIsIGZhbHNlKTsKK30KKyAKK3ZvaWQgU1ZH
UmVzb3VyY2VzQ2FjaGU6OmNsaWVudFVwZGF0ZWRGcm9tRWxlbWVudChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCit7CisgICAgQVNTRVJUKHJlbmRl
cmVyKTsKKyAgICBBU1NFUlQocmVuZGVyZXItPnBhcmVudCgpKTsKKworICAgIFNWR1Jlc291cmNl
c0NhY2hlKiBjYWNoZSA9IHJlc291cmNlc0NhY2hlRnJvbVJlbmRlck9iamVjdChyZW5kZXJlcik7
CisgICAgY2FjaGUtPnJlbW92ZVJlc291cmNlc0Zyb21SZW5kZXJPYmplY3QocmVuZGVyZXIpOwor
ICAgIGNhY2hlLT5hZGRSZXNvdXJjZXNGcm9tUmVuZGVyT2JqZWN0KHJlbmRlcmVyLCBuZXdTdHls
ZSk7Cit9CisKK3ZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudERlc3Ryb3llZChSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQoreworICAgIEFTU0VSVChyZW5kZXJlcik7CisgICAgU1ZHUmVzb3Vy
Y2VzQ2FjaGUqIGNhY2hlID0gcmVzb3VyY2VzQ2FjaGVGcm9tUmVuZGVyT2JqZWN0KHJlbmRlcmVy
KTsKKyAgICBjYWNoZS0+cmVtb3ZlUmVzb3VyY2VzRnJvbVJlbmRlck9iamVjdChyZW5kZXJlcik7
Cit9CisKK3ZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlc291cmNlRGVzdHJveWVkKFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQocmVzb3VyY2UpOwor
ICAgIFNWR1Jlc291cmNlc0NhY2hlKiBjYWNoZSA9IHJlc291cmNlc0NhY2hlRnJvbVJlbmRlck9i
amVjdChyZXNvdXJjZSk7CisKKyAgICAvLyBUaGUgcmVzb3VyY2UgaXRzZWxmIG1heSBoYXZlIGNs
aWVudHMsIHRoYXQgbmVlZCB0byBiZSBub3RpZmllZC4KKyAgICBjYWNoZS0+cmVtb3ZlUmVzb3Vy
Y2VzRnJvbVJlbmRlck9iamVjdChyZXNvdXJjZSk7CisKKyAgICBIYXNoTWFwPFJlbmRlck9iamVj
dCosIFNWR1Jlc291cmNlcyo+OjppdGVyYXRvciBlbmQgPSBjYWNoZS0+bV9jYWNoZS5lbmQoKTsK
KyAgICBmb3IgKEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9y
IGl0ID0gY2FjaGUtPm1fY2FjaGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBp
dC0+c2Vjb25kLT5yZXNvdXJjZURlc3Ryb3llZChyZXNvdXJjZSk7Cit9CisKK30KKworI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuaAkocmV2aXNp
b24gNzUyNzIpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0NhY2hlLmg6NzUy
NzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhaW50IHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYg
U1ZHUmVzb3VyY2VzQ2FjaGVfaAorI2RlZmluZSBTVkdSZXNvdXJjZXNDYWNoZV9oCisKKyNpZiBF
TkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJPYmpl
Y3Q7CitjbGFzcyBSZW5kZXJTdHlsZTsKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
OworY2xhc3MgU1ZHUmVzb3VyY2VzOworCitjbGFzcyBTVkdSZXNvdXJjZXNDYWNoZSA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGUoKTsKKyAgICB+
U1ZHUmVzb3VyY2VzQ2FjaGUoKTsKKworICAgIHZvaWQgYWRkUmVzb3VyY2VzRnJvbVJlbmRlck9i
amVjdChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSopOworICAgIHZvaWQgcmVtb3Zl
UmVzb3VyY2VzRnJvbVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqKTsKKyAgICBzdGF0aWMgU1ZH
UmVzb3VyY2VzKiBjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0Kik7
CisKKyAgICAvLyBDYWxsZWQgZnJvbSBhbGwgU1ZHIHJlbmRlcmVycyBkZXN0cm95KCkgbWV0aG9k
cyAtIGV4Y2VwdCBmb3IgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuCisgICAgc3RhdGljIHZv
aWQgY2xpZW50RGVzdHJveWVkKFJlbmRlck9iamVjdCopOworCisgICAgLy8gQ2FsbGVkIGZyb20g
YWxsIFNWRyByZW5kZXJlcnMgbGF5b3V0KCkgbWV0aG9kcy4KKyAgICBzdGF0aWMgdm9pZCBjbGll
bnRMYXlvdXRDaGFuZ2VkKFJlbmRlck9iamVjdCopOworCisgICAgLy8gQ2FsbGVkIGZyb20gYWxs
IFNWRyByZW5kZXJlcnMgc3R5bGVEaWRDaGFuZ2UoKSBtZXRob2RzLgorICAgIHN0YXRpYyB2b2lk
IGNsaWVudFN0eWxlQ2hhbmdlZChSZW5kZXJPYmplY3QqLCBTdHlsZURpZmZlcmVuY2UsIGNvbnN0
IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CisKKyAgICAvLyBDYWxsZWQgZnJvbSBhbGwgU1ZHIHJl
bmRlcmVycyB1cGRhdGVGcm9tRWxlbWVudCgpIG1ldGhvZHMuCisgICAgc3RhdGljIHZvaWQgY2xp
ZW50VXBkYXRlZEZyb21FbGVtZW50KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiBu
ZXdTdHlsZSk7CisKKyAgICAvLyBDYWxsZWQgZnJvbSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
cjo6ZGVzdHJveSgpLgorICAgIHN0YXRpYyB2b2lkIHJlc291cmNlRGVzdHJveWVkKFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyKik7CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxSZW5kZXJPYmpl
Y3QqLCBTVkdSZXNvdXJjZXMqPiBtX2NhY2hlOworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2
ZXIuY3BwCShyZXZpc2lvbiA3NTI3MikJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3Vy
Y2VzQ3ljbGVTb2x2ZXIuY3BwOjc1MjcyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
c291cmNlc0N5Y2xlU29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMyBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZH
UmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCIKKworLy8gU2V0IHRvIGEgdmFsdWUgPiAwLCB0byBkZWJ1
ZyB0aGUgcmVzb3VyY2UgY2FjaGUuCisjZGVmaW5lIERFQlVHX0NZQ0xFX0RFVEVDVElPTiAwCisK
KyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIgor
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIgor
I2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdHcmFkaWVudEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJTVkdQYXR0ZXJuRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1Jlc291
cmNlcy5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXI6OlNWR1Jlc291cmNlc0N5Y2xlU29sdmVy
KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzKQorICAgIDog
bV9yZW5kZXJlcihyZW5kZXJlcikKKyAgICAsIG1fcmVzb3VyY2VzKHJlc291cmNlcykKK3sKKyAg
ICBBU1NFUlQobV9yZW5kZXJlcik7CisgICAgQVNTRVJUKG1fcmVzb3VyY2VzKTsKK30KKworU1ZH
UmVzb3VyY2VzQ3ljbGVTb2x2ZXI6On5TVkdSZXNvdXJjZXNDeWNsZVNvbHZlcigpCit7Cit9CisK
K2Jvb2wgU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXI6OnJlc291cmNlQ29udGFpbnNDeWNsZXMoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKK3sKKyAgICBBU1NFUlQocmVuZGVyZXIpOworCisg
ICAgLy8gRmlyc3Qgb3BlcmF0ZSBvbiB0aGUgcmVzb3VyY2VzIG9mIHRoZSBnaXZlbiByZW5kZXJl
ci4KKyAgICAvLyA8bWFya2VyIGlkPSJhIj4gPHBhdGggbWFya2VyLXN0YXJ0PSJ1cmwoI2IpIi8+
IC4uLgorICAgIC8vIDxtYXJrZXIgaWQ9ImIiIG1hcmtlci1zdGFydD0idXJsKCNhKSIvPgorICAg
IGlmIChTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRS
ZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QocmVuZGVyZXIpKSB7CisgICAgICAgIEhhc2hTZXQ8UmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPiByZXNvdXJjZVNldDsKKyAgICAgICAgcmVzb3VyY2Vz
LT5idWlsZFNldE9mUmVzb3VyY2VzKHJlc291cmNlU2V0KTsKKworICAgICAgICAvLyBXYWxrIGFs
bCByZXNvdXJjZXMgYW5kIGNoZWNrIHdoZXRlciB0aGV5IHJlZmVyZW5jZSBhbnkgcmVzb3VyY2Ug
Y29udGFpbmVkIGluIHRoZSByZXNvdXJjZXMgc2V0LgorICAgICAgICBIYXNoU2V0PFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGVuZCA9IHJlc291cmNlU2V0LmVuZCgpOwor
ICAgICAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPjo6aXRlcmF0
b3IgaXQgPSByZXNvdXJjZVNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
ICAgIGlmIChtX2FsbFJlc291cmNlcy5jb250YWlucygqaXQpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhlbiBvcGVyYXRlIG9uIHRo
ZSBjaGlsZCByZXNvdXJjZXMgb2YgdGhlIGdpdmVuIHJlbmRlcmVyLgorICAgIC8vIDxtYXJrZXIg
aWQ9ImEiPiA8cGF0aCBtYXJrZXItc3RhcnQ9InVybCgjYikiLz4gLi4uCisgICAgLy8gPG1hcmtl
ciBpZD0iYiI+IDxwYXRoIG1hcmtlci1zdGFydD0idXJsKCNhKSIvPiAuLi4KKyAgICBmb3IgKFJl
bmRlck9iamVjdCogY2hpbGQgPSByZW5kZXJlci0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBTVkdSZXNvdXJjZXMqIGNoaWxkUmVz
b3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVj
dChjaGlsZCk7CisgICAgICAgIGlmICghY2hpbGRSZXNvdXJjZXMpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgCisgICAgICAgIC8vIEEgY2hpbGQgb2YgdGhlIGdpdmVuICdyZXNvdXJj
ZScgY29udGFpbnMgcmVzb3VyY2VzLiAKKyAgICAgICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lcio+IGNoaWxkU2V0OworICAgICAgICBjaGlsZFJlc291cmNlcy0+YnVpbGRTZXRP
ZlJlc291cmNlcyhjaGlsZFNldCk7CisKKyAgICAgICAgLy8gV2FsayBhbGwgY2hpbGQgcmVzb3Vy
Y2VzIGFuZCBjaGVjayB3aGV0ZXIgdGhleSByZWZlcmVuY2UgYW55IHJlc291cmNlIGNvbnRhaW5l
ZCBpbiB0aGUgcmVzb3VyY2VzIHNldC4KKyAgICAgICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lcio+OjppdGVyYXRvciBlbmQgPSBjaGlsZFNldC5lbmQoKTsKKyAgICAgICAgZm9y
IChIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGl0ID0gY2hp
bGRTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBpZiAobV9hbGxS
ZXNvdXJjZXMuY29udGFpbnMoKml0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFdhbGsgY2hpbGRyZW4gcmVjdXJzaXZlbHksIHN0b3AgaW1t
ZWRpYXRlbHkgaWYgd2UgZm91bmQgYSBjeWNsZQorICAgICAgICBpZiAocmVzb3VyY2VDb250YWlu
c0N5Y2xlcyhjaGlsZCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXI6OnJlc29sdmVD
eWNsZXMoKQoreworICAgIEFTU0VSVChtX2FsbFJlc291cmNlcy5pc0VtcHR5KCkpOworCisjaWYg
REVCVUdfQ1lDTEVfREVURUNUSU9OID4gMAorICAgIGZwcmludGYoc3RkZXJyLCAiXG5CZWZvcmUg
Y3ljbGUgZGV0ZWN0aW9uOlxuIik7CisgICAgbV9yZXNvdXJjZXMtPmR1bXAobV9yZW5kZXJlcik7
CisjZW5kaWYKKworICAgIC8vIFN0YXNoIGFsbCByZXNvdXJjZXMgaW50byBhIEhhc2hTZXQgZm9y
IHRoZSBlYXNlIG9mIHRyYXZlcnNpbmcuCisgICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lcio+IGxvY2FsUmVzb3VyY2VzOworICAgIG1fcmVzb3VyY2VzLT5idWlsZFNldE9mUmVz
b3VyY2VzKGxvY2FsUmVzb3VyY2VzKTsKKyAgICBBU1NFUlQoIWxvY2FsUmVzb3VyY2VzLmlzRW1w
dHkoKSk7CisKKyAgICAvLyBBZGQgYWxsIHBhcmVudCByZXNvdXJjZSBjb250YWluZXJzIHRvIHRo
ZSBIYXNoU2V0LgorICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPiBwYXJl
bnRSZXNvdXJjZXM7CisgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSBtX3JlbmRlcmVyLT5wYXJl
bnQoKTsKKyAgICB3aGlsZSAocGFyZW50KSB7CisgICAgICAgIGlmIChwYXJlbnQtPmlzU1ZHUmVz
b3VyY2VDb250YWluZXIoKSkKKyAgICAgICAgICAgIHBhcmVudFJlc291cmNlcy5hZGQocGFyZW50
LT50b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCkpOworICAgICAgICBwYXJlbnQgPSBwYXJl
bnQtPnBhcmVudCgpOworICAgIH0KKworI2lmIERFQlVHX0NZQ0xFX0RFVEVDVElPTiA+IDAKKyAg
ICBmcHJpbnRmKHN0ZGVyciwgIlxuRGV0ZWN0aW5nIHdoZXRlciBhbnkgcmVzb3VyY2VzIHJlZmVy
ZW5jZXMgYW55IG9mIGZvbGxvd2luZyBvYmplY3RzOlxuIik7CisgICAgeworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkxvY2FsIHJlc291cmNlczpcbiIpOworICAgICAgICBIYXNoU2V0PFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGVuZCA9IGxvY2FsUmVzb3VyY2VzLmVu
ZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPjo6
aXRlcmF0b3IgaXQgPSBsb2NhbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInw+ICVzOiBvYmplY3Q9JXAgKG5vZGU9JXApXG4i
LCAoKml0KS0+cmVuZGVyTmFtZSgpLCAqaXQsICgqaXQpLT5ub2RlKCkpOworCisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiUGFyZW50IHJlc291cmNlczpcbiIpOworICAgICAgICBlbmQgPSBwYXJl
bnRSZXNvdXJjZXMuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IHBhcmVudFJlc291cmNlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInw+ICVzOiBvYmplY3Q9
JXAgKG5vZGU9JXApXG4iLCAoKml0KS0+cmVuZGVyTmFtZSgpLCAqaXQsICgqaXQpLT5ub2RlKCkp
OworICAgIH0KKyNlbmRpZgorCisgICAgLy8gQnVpbGQgY29tYmluZWQgc2V0IG9mIGxvY2FsIGFu
ZCBwYXJlbnQgcmVzb3VyY2VzLgorICAgIG1fYWxsUmVzb3VyY2VzID0gbG9jYWxSZXNvdXJjZXM7
CisgICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBlbmQg
PSBwYXJlbnRSZXNvdXJjZXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGl0ID0gcGFyZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgbV9hbGxSZXNvdXJjZXMuYWRkKCppdCk7CisKKyAgICAv
LyBJZiB3ZSdyZSBhIHJlc291cmNlLCBhZGQgb3Vyc2VsdmVzIHRvIHRoZSBIYXNoU2V0LgorICAg
IGlmIChtX3JlbmRlcmVyLT5pc1NWR1Jlc291cmNlQ29udGFpbmVyKCkpCisgICAgICAgIG1fYWxs
UmVzb3VyY2VzLmFkZChtX3JlbmRlcmVyLT50b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCkp
OworCisgICAgQVNTRVJUKCFtX2FsbFJlc291cmNlcy5pc0VtcHR5KCkpOworCisgICAgLy8gVGhl
IGpvYiBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGRldGVybWluZSB3aGV0ZXIgYW55IG9mIHRoZSAn
cmVzb3VyY2VzJyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuICdyZW5kZXJlcicKKyAgICAvLyBy
ZWZlcmVuY2VzIHVzIChvciB3aGV0ZXIgYW55IG9mIGl0cyBraWRzIHJlZmVyZW5jZXMgdXMpIC0+
IHRoYXQncyBhIGN5Y2xlLCB3ZSBuZWVkIHRvIGZpbmQgYW5kIGJyZWFrIGl0LgorICAgIGVuZCA9
IGxvY2FsUmVzb3VyY2VzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IGxvY2FsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVzb3Vy
Y2UgPSAqaXQ7CisgICAgICAgIGlmIChwYXJlbnRSZXNvdXJjZXMuY29udGFpbnMocmVzb3VyY2Up
IHx8IHJlc291cmNlQ29udGFpbnNDeWNsZXMocmVzb3VyY2UpKQorICAgICAgICAgICAgYnJlYWtD
eWNsZShyZXNvdXJjZSk7CisgICAgfQorCisjaWYgREVCVUdfQ1lDTEVfREVURUNUSU9OID4gMAor
ICAgIGZwcmludGYoc3RkZXJyLCAiXG5BZnRlciBjeWNsZSBkZXRlY3Rpb246XG4iKTsKKyAgICBt
X3Jlc291cmNlcy0+ZHVtcChtX3JlbmRlcmVyKTsKKyNlbmRpZgorCisgICAgbV9hbGxSZXNvdXJj
ZXMuY2xlYXIoKTsKK30KKwordm9pZCBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlcjo6YnJlYWtDeWNs
ZShSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVzb3VyY2VMZWFkaW5nVG9DeWNsZSkKK3sK
KyAgICBBU1NFUlQocmVzb3VyY2VMZWFkaW5nVG9DeWNsZSk7CisgICAgaWYgKHJlc291cmNlTGVh
ZGluZ1RvQ3ljbGUgPT0gbV9yZXNvdXJjZXMtPmxpbmtlZFJlc291cmNlKCkpIHsKKyAgICAgICAg
bV9yZXNvdXJjZXMtPnJlc2V0TGlua2VkUmVzb3VyY2UoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHN3aXRjaCAocmVzb3VyY2VMZWFkaW5nVG9DeWNsZS0+cmVzb3VyY2VUeXBlKCkp
IHsKKyAgICBjYXNlIE1hc2tlclJlc291cmNlVHlwZToKKyAgICAgICAgQVNTRVJUKHJlc291cmNl
TGVhZGluZ1RvQ3ljbGUgPT0gbV9yZXNvdXJjZXMtPm1hc2tlcigpKTsKKyAgICAgICAgbV9yZXNv
dXJjZXMtPnJlc2V0TWFza2VyKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWFya2VyUmVz
b3VyY2VUeXBlOgorICAgICAgICBBU1NFUlQocmVzb3VyY2VMZWFkaW5nVG9DeWNsZSA9PSBtX3Jl
c291cmNlcy0+bWFya2VyU3RhcnQoKSB8fCByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlID09IG1fcmVz
b3VyY2VzLT5tYXJrZXJNaWQoKSB8fCByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlID09IG1fcmVzb3Vy
Y2VzLT5tYXJrZXJFbmQoKSk7CisgICAgICAgIGlmIChtX3Jlc291cmNlcy0+bWFya2VyU3RhcnQo
KSA9PSByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlKQorICAgICAgICAgICAgbV9yZXNvdXJjZXMtPnJl
c2V0TWFya2VyU3RhcnQoKTsKKyAgICAgICAgaWYgKG1fcmVzb3VyY2VzLT5tYXJrZXJNaWQoKSA9
PSByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlKQorICAgICAgICAgICAgbV9yZXNvdXJjZXMtPnJlc2V0
TWFya2VyTWlkKCk7CisgICAgICAgIGlmIChtX3Jlc291cmNlcy0+bWFya2VyRW5kKCkgPT0gcmVz
b3VyY2VMZWFkaW5nVG9DeWNsZSkKKyAgICAgICAgICAgIG1fcmVzb3VyY2VzLT5yZXNldE1hcmtl
ckVuZCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhdHRlcm5SZXNvdXJjZVR5cGU6Cisg
ICAgY2FzZSBMaW5lYXJHcmFkaWVudFJlc291cmNlVHlwZToKKyAgICBjYXNlIFJhZGlhbEdyYWRp
ZW50UmVzb3VyY2VUeXBlOgorICAgICAgICBBU1NFUlQocmVzb3VyY2VMZWFkaW5nVG9DeWNsZSA9
PSBtX3Jlc291cmNlcy0+ZmlsbCgpIHx8IHJlc291cmNlTGVhZGluZ1RvQ3ljbGUgPT0gbV9yZXNv
dXJjZXMtPnN0cm9rZSgpKTsKKyAgICAgICAgaWYgKG1fcmVzb3VyY2VzLT5maWxsKCkgPT0gcmVz
b3VyY2VMZWFkaW5nVG9DeWNsZSkKKyAgICAgICAgICAgIG1fcmVzb3VyY2VzLT5yZXNldEZpbGwo
KTsKKyAgICAgICAgaWYgKG1fcmVzb3VyY2VzLT5zdHJva2UoKSA9PSByZXNvdXJjZUxlYWRpbmdU
b0N5Y2xlKQorICAgICAgICAgICAgbV9yZXNvdXJjZXMtPnJlc2V0U3Ryb2tlKCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRmlsdGVyUmVzb3VyY2VUeXBlOgorI2lmIEVOQUJMRShGSUxURVJT
KQorICAgICAgICBBU1NFUlQocmVzb3VyY2VMZWFkaW5nVG9DeWNsZSA9PSBtX3Jlc291cmNlcy0+
ZmlsdGVyKCkpOworICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRGaWx0ZXIoKTsKKyNlbmRpZgor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENsaXBwZXJSZXNvdXJjZVR5cGU6CisgICAgICAgIEFT
U0VSVChyZXNvdXJjZUxlYWRpbmdUb0N5Y2xlID09IG1fcmVzb3VyY2VzLT5jbGlwcGVyKCkpOwor
ICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRDbGlwcGVyKCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU29saWRDb2xvclJlc291cmNlVHlwZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oCShyZXZpc2lv
biA3NTI3MikJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIu
aDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2lmbmRlZiBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlcl9oCisjZGVmaW5lIFNWR1Jlc291cmNl
c0N5Y2xlU29sdmVyX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJPYmplY3Q7CitjbGFzcyBS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjsKK2NsYXNzIFNWR1Jlc291cmNlczsKKworY2xhc3Mg
U1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgor
ICAgIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyKFJlbmRlck9iamVjdCosIFNWR1Jlc291cmNlcyop
OworICAgIH5TVkdSZXNvdXJjZXNDeWNsZVNvbHZlcigpOworCisgICAgdm9pZCByZXNvbHZlQ3lj
bGVzKCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCByZXNvdXJjZUNvbnRhaW5zQ3ljbGVzKFJlbmRl
ck9iamVjdCopIGNvbnN0OworICAgIHZvaWQgYnJlYWtDeWNsZShSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lciopOworCisgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOworICAgIFNWR1Jlc291
cmNlcyogbV9yZXNvdXJjZXM7CisgICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
cio+IG1fYWxsUmVzb3VyY2VzOyAKK307CisKK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCShyZXZp
c2lvbiA3NTI3MikJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRz
LmNwcDo3NTI3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVu
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJT
VkdTaGFkb3dUcmVlRWxlbWVudHMuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKKyNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQKKworU1ZHU2hhZG93VHJlZUNv
bnRhaW5lckVsZW1lbnQ6OlNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50KERvY3VtZW50KiBk
b2N1bWVudCkKKyAgICA6IFNWR0dFbGVtZW50KFNWR05hbWVzOjpnVGFnLCBkb2N1bWVudCkKK3sK
K30KKworUGFzc1JlZlB0cjxTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudD4gU1ZHU2hhZG93
VHJlZUNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudChkb2N1bWVu
dCkpOworfQorCitGbG9hdFNpemUgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6OmNvbnRh
aW5lclRyYW5zbGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRTaXplKG1feE9mZnNl
dC52YWx1ZSh0aGlzKSwgbV95T2Zmc2V0LnZhbHVlKHRoaXMpKTsKK30KKworLy8gU1ZHU2hhZG93
VHJlZVJvb3RFbGVtZW50CisKK2lubGluZSBTVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQ6OlNWR1No
YWRvd1RyZWVSb290RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIFNWR1VzZUVsZW1lbnQqIHNo
YWRvd1BhcmVudCkKKyAgICA6IFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50KGRvY3VtZW50
KQoreworICAgIHNldFNoYWRvd0hvc3Qoc2hhZG93UGFyZW50KTsKKyAgICBzZXRJbkRvY3VtZW50
KCk7Cit9CisKK1Bhc3NSZWZQdHI8U1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50PiBTVkdTaGFkb3dU
cmVlUm9vdEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIFNWR1VzZUVsZW1lbnQq
IHNoYWRvd1BhcmVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1NoYWRvd1RyZWVS
b290RWxlbWVudChkb2N1bWVudCwgc2hhZG93UGFyZW50KSk7Cit9CisKK3ZvaWQgU1ZHU2hhZG93
VHJlZVJvb3RFbGVtZW50OjphdHRhY2hFbGVtZW50KFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0
eWxlLCBSZW5kZXJBcmVuYSogYXJlbmEpCit7CisgICAgQVNTRVJUKHNoYWRvd0hvc3QoKSk7CisK
KyAgICAvLyBDcmVhdGUgdGhlIHJlbmRlcmVyIHdpdGggdGhlIHNwZWNpZmllZCBzdHlsZQorICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihhcmVuYSwgc3R5bGUuZ2V0
KCkpOworICAgIGlmIChyZW5kZXJlcikgeworICAgICAgICBzZXRSZW5kZXJlcihyZW5kZXJlcik7
CisgICAgICAgIHJlbmRlcmVyLT5zZXRTdHlsZShzdHlsZSk7CisgICAgfQorCisgICAgLy8gU2V0
IHRoZXNlIGV4cGxpY2l0bHkgc2luY2UgdGhpcyBub3JtYWxseSBoYXBwZW5zIGR1cmluZyBhbiBh
dHRhY2goKQorICAgIHNldEF0dGFjaGVkKCk7CisKKyAgICAvLyBBZGQgdGhlIHJlbmRlcmVyIHRv
IHRoZSByZW5kZXIgdHJlZQorICAgIGlmIChyZW5kZXJlcikKKyAgICAgICAgc2hhZG93SG9zdCgp
LT5yZW5kZXJlcigpLT5hZGRDaGlsZChyZW5kZXJlcik7Cit9CisKK3ZvaWQgU1ZHU2hhZG93VHJl
ZVJvb3RFbGVtZW50OjpjbGVhclNoYWRvd0hvc3QoKQoreworICAgIHNldFNoYWRvd0hvc3QoMCk7
Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93
VHJlZUVsZW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1No
YWRvd1RyZWVFbGVtZW50cy5oCShyZXZpc2lvbiA3NTI3MikJKGZyb20gV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmg6NzUyNzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFNWR1NoYWRvd1RyZWVFbGVtZW50c19o
CisjZGVmaW5lIFNWR1NoYWRvd1RyZWVFbGVtZW50c19oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2lu
Y2x1ZGUgIlNWR0dFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRTaXplOworY2xhc3MgU1ZHVXNlRWxlbWVudDsKKwor
Y2xhc3MgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQgOiBwdWJsaWMgU1ZHR0VsZW1lbnQg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1NoYWRvd1RyZWVDb250YWluZXJF
bGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKKworICAgIEZsb2F0U2l6ZSBjb250YWluZXJUcmFu
c2xhdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGFpbmVyT2Zmc2V0KGNvbnN0IFNWR0xl
bmd0aCYgeCwgY29uc3QgU1ZHTGVuZ3RoJiB5KQorICAgIHsKKyAgICAgICAgbV94T2Zmc2V0ID0g
eDsKKyAgICAgICAgbV95T2Zmc2V0ID0geTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBTVkdT
aGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCopOworCitwcml2YXRlOgorICAgIHZp
cnR1YWwgYm9vbCBpc1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgU1ZHTGVuZ3RoIG1feE9mZnNldDsKKyAgICBTVkdMZW5ndGggbV95T2Zm
c2V0OworfTsKKworY2xhc3MgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50IDogcHVibGljIFNWR1No
YWRvd1RyZWVDb250YWluZXJFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIFNWR1VzZUVsZW1l
bnQqIHNoYWRvd1BhcmVudCk7CisKKyAgICB2b2lkIGF0dGFjaEVsZW1lbnQoUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4sIFJlbmRlckFyZW5hKik7CisgICAgdm9pZCBjbGVhclNoYWRvd0hvc3QoKTsK
KworcHJpdmF0ZToKKyAgICBTVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQoRG9jdW1lbnQqLCBTVkdV
c2VFbGVtZW50KiBzaGFkb3dQYXJlbnQpOworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78343</attachid>
            <date>2011-01-09 00:15:02 -0800</date>
            <delta_ts>2011-01-09 02:52:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52087-20110109091452.patch</filename>
            <type>text/plain</type>
            <size>894424</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1MzQ2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ4IEBACisyMDExLTAxLTA5ICBEaXJrIFNj
aHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW92ZSBhbGwgU1ZHIHJlbmRlcmVyIHRvIFdlYkNvcmUvcmVuZGVy
aW5nL3N2ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTIwODcKKworICAgICAgICBObyBjaGFuZ2Ugb2YgZnVuY3Rpb25hbGl0eS4gSnVzdCBtb3ZlZCBh
bGwgU1ZHIHJlbmRlcmVyIHRvIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy4KKworICAgICAgICAqIEFu
ZHJvaWQubWs6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgor
ICAgICAgICAqIFdlYkNvcmUudmpwcm9qL3Byb2plY3Qudmpwcm9qOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Rm9yZWlnbk9iamVjdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZv
cmVpZ25PYmplY3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHQWxs
SW5PbmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmg6IFJlbW92
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRp
ZW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VM
aW5lYXJHcmFkaWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlTWFya2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlTWFza2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Lmg6IFJlbW92ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oOiBSZW1v
dmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmg6IFJl
bW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWlu
ZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZH
SW1hZ2VCdWZmZXJUb29scy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR0lt
YWdlQnVmZmVyVG9vbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHTWFya2Vy
RGF0YS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZv
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5o
OiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9TVkdSZXNvdXJjZXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRl
cmluZy9TVkdSZXNvdXJjZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVz
b3VyY2VzQ2FjaGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZXNvdXJj
ZXNDYWNoZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZXNvdXJjZXNDeWNs
ZVNvbHZlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5
Y2xlU29sdmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVF
bGVtZW50cy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVF
bGVtZW50cy5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyRm9yZWln
bk9iamVjdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
b3JlaWduT2JqZWN0LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlckZvcmVpZ25P
YmplY3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVp
Z25PYmplY3QuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0FsbEluT25l
LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmNwcC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oLgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdDb250YWluZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0NvbnRhaW5lci5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
R3JhZGllbnRTdG9wLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0dyYWRpZW50U3RvcC5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdHcmFkaWVudFN0b3AuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0dyYWRpZW50U3RvcC5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oLgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW1hZ2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHSW1hZ2UuY3BwLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW1hZ2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lt
YWdlLmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
aC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmNwcC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oLgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAuCisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oLgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuY3BwLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyLmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZS5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAuCisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVh
ckdyYWRpZW50LmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1h
cmtlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZU1hcmtlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlTWFza2VyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlTWFza2VyLmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlTWFza2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAuCisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oLgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50
LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3Jh
ZGllbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlUmFkaWFsR3JhZGllbnQuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwLgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaC4KKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSb290Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSb290LmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAuCisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIu
aC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWlu
ZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVHJh
bnNmb3JtYWJsZUNvbnRhaW5lci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmguCisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAuCisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5j
cHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmguCisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJEYXRhLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJEYXRhLmguCisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uY3BwLgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyU3VwcG9ydC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
VkdSZW5kZXJTdXBwb3J0LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1
cHBvcnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1
cHBvcnQuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0Lmgu
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzLmNwcC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHUmVzb3VyY2VzLmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJj
ZXNDYWNoZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNv
dXJjZXNDYWNoZS5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNo
ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2Fj
aGUuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xl
U29sdmVyLmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29s
dmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXND
eWNsZVNvbHZlci5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1l
bnRzLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1NoYWRvd1Ry
ZWVFbGVtZW50cy5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxl
bWVudHMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1NoYWRvd1Ry
ZWVFbGVtZW50cy5oLgorCiAyMDExLTAxLTA4ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25A
aWdhbGlhLmNvbT4KIAogICAgICAgICBHVEsrIEJ1aWxkIGZpeC4gQWRkIG1pc3NpbmcgaGVhZGVy
cyB0byB0aGUgc291cmNlIGxpc3QsIGZpeGluZyBtYWtlIGRpc3QuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsJ
KHJldmlzaW9uIDc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawkod29ya2luZyBj
b3B5KQpAQCAtNjY4LDcgKzY2OCw2IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19G
SUxFUykgXAogCXJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAgXAogCXJlbmRlcmluZy9SZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAgXAogCXJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5j
cHAgXAotCXJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcCBcCiAJcmVuZGVyaW5nL1Jl
bmRlckZyYW1lLmNwcCBcCiAJcmVuZGVyaW5nL1JlbmRlckZyYW1lQmFzZS5jcHAgXAogCXJlbmRl
cmluZy9SZW5kZXJGcmFtZVNldC5jcHAgXApAQCAtNjk2LDM3ICs2OTUsNDYgQEAgTE9DQUxfU1JD
X0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAKIGlmZXEgKCQoRU5BQkxFX1NWRyksIHRy
dWUpCiBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKLQlyZW5kZXJpbmcv
UmVuZGVyU1ZHQmxvY2suY3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBc
Ci0JcmVuZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgXAotCXJlbmRlcmluZy9SZW5k
ZXJTVkdIaWRkZW5Db250YWluZXIuY3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3Bw
IFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIFwKLQlyZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuY3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmNwcCBcCi0JcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBcCi0JcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBcCi0JcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCBcCi0JcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFk
aWVudC5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAgXAotCXJl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4uY3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRp
YWxHcmFkaWVudC5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
Y3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJT
VkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJTVkdUcmFu
c2Zvcm1hYmxlQ29udGFpbmVyLmNwcCBcCi0JcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyLmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcCBcCisJ
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAgXAorCXJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHQ29udGFpbmVyLmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3Au
Y3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgXAorCXJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwIFwKIAlyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0lubGluZS5jcHAgXAogCXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgXAor
CXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIFwKIAlyZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNw
cCBcCisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIFwKKwlyZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBcCisJcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgXAorCXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGlu
ZWFyR3JhZGllbnQuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2Vy
LmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgXAorCXJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBcCisJcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jvb3QuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFp
bmVyLmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAgXAogCXJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAgXAogCXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBh
dGguY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIu
Y3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCBcCisJ
cmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVGbG93Qm94LmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNw
cCBcCisJcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcCBcCisJcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwIFwKKwlyZW5kZXJp
bmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJj
ZXNDeWNsZVNvbHZlci5jcHAgXAogCXJlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAg
XAorCXJlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcAogCXJlbmRlcmluZy9z
dmcvU1ZHVGV4dENodW5rLmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVy
LmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAgXApAQCAt
NzYxLDE4ICs3NjksNiBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwK
IAlyZW5kZXJpbmcvUmVuZGVyV29yZEJyZWFrLmNwcCBcCiAJcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guY3BwIFwKIAotaWZlcSAoJChFTkFCTEVfU1ZHKSwgdHJ1ZSkKLUxPQ0FMX1NSQ19GSUxFUyA6
PSAkKExPQ0FMX1NSQ19GSUxFUykgXAotCXJlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNw
cCBcCi0JcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uY3BwIFwKLQlyZW5kZXJpbmcvU1ZH
UmVuZGVyU3VwcG9ydC5jcHAgXAotCXJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBc
Ci0JcmVuZGVyaW5nL1NWR1Jlc291cmNlcy5jcHAgXAotCXJlbmRlcmluZy9TVkdSZXNvdXJjZXND
YWNoZS5jcHAgXAotCXJlbmRlcmluZy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAgXAotCXJl
bmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCi1lbmRpZgotCiBMT0NBTF9TUkNfRklM
RVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlyZW5kZXJpbmcvU2Nyb2xsQmVoYXZpb3IuY3Bw
IFwKIAlyZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBcCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTc4OSw0OCArMTc4OSw0OCBAQCBJRiAoRU5BQkxF
X1NWRykKICAgICAgICAgY3NzL1NWR0NTU1BhcnNlci5jcHAKICAgICAgICAgY3NzL1NWR0NTU1N0
eWxlU2VsZWN0b3IuY3BwCiAgICAgICAgIHJlbmRlcmluZy9Qb2ludGVyRXZlbnRzSGl0UnVsZXMu
Y3BwCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAotICAgICAgICBy
ZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suY3BwCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuY3Bw
Ci0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCi0gICAgICAg
IHJlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3Bw
Ci0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCi0gICAgICAg
IHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKLSAgICAgICAgcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAotICAgICAgICByZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50LmNwcAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VMaW5lYXJHcmFkaWVudC5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
TWFya2VyLmNwcAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3Bw
Ci0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCi0gICAgICAg
IHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcAotICAgICAgICBy
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAotICAgICAgICByZW5kZXJp
bmcvUmVuZGVyU1ZHUm9vdC5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1Ry
ZWVSb290Q29udGFpbmVyLmNwcAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3Jt
YWJsZUNvbnRhaW5lci5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyLmNwcAotICAgICAgICByZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAKLSAg
ICAgICAgcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uY3BwCi0gICAgICAgIHJlbmRlcmlu
Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAotICAgICAgICByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1NWR1Jlc291cmNlcy5jcHAKLSAgICAgICAgcmVu
ZGVyaW5nL1NWR1Jlc291cmNlc0NhY2hlLmNwcAotICAgICAgICByZW5kZXJpbmcvU1ZHUmVzb3Vy
Y2VzQ3ljbGVTb2x2ZXIuY3BwCi0gICAgICAgIHJlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVu
dHMuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5jcHAKICAgICAg
ICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAKKyAgICAgICAgcmVuZGVy
aW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0Jsb2NrLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5l
ci5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwCisg
ICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAorICAgICAg
ICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAogICAgICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZS5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNw
cAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyUHJpbWl0aXZlLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VM
aW5lYXJHcmFkaWVudC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlci5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tl
ci5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3Bw
CisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5j
cHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3Bw
CisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKKyAgICAgICAgcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAKICAgICAgICAgcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNw
cAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIu
Y3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3Bw
CisgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAKICAgICAgICAg
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAogICAgICAgICByZW5kZXJpbmcvc3Zn
L1NWR0lubGluZVRleHRCb3guY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5
b3V0SW5mby5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAor
ICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisgICAgICAgIHJl
bmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1Jl
c291cmNlc0NhY2hlLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xl
U29sdmVyLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCisg
ICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcAogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0Q2h1bmtCdWlsZGVyLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDc1MzQ1KQor
KysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI3NDIs
OCArMjc0Miw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbGV4aWJsZUJveC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbGV4aWJsZUJveC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWln
bk9iamVjdC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2Jq
ZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZUJhc2UuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVCYXNlLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHAgXApAQCAtMjgxNyw1MCArMjgxNSw2IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNs
aWRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU3VtbWFyeS5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTdW1tYXJ5LmggXAotCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdCbG9jay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHQ29udGFpbmVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Nv
bnRhaW5lci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHR3JhZGllbnRT
dG9wLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50U3Rv
cC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaCBcCi0JU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0LmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmggXAotCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCBcCi0JU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCBcCi0J
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmggXAotCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50LmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaCBcCi0JU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCBc
Ci0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFp
bmVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxl
Q29udGFpbmVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RyYW5z
Zm9ybWFibGVDb250YWluZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1ZpZXdwb3J0Q29udGFpbmVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAgXApA
QCAtMjk1OSw0MSArMjkxMyw4NyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmggXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
VkdNYXJrZXJEYXRhLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJMYXlv
dXRJbmZvLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR01hcmtlckxheW91dElu
Zm8uaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmggXAotCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TVkdSZXNvdXJjZXNDYWNoZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVz
b3VyY2VzLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xl
U29sdmVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xl
U29sdmVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuaCBcCi0J
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaCBcCisJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcCBcCisJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmggXAorCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW5saW5lLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdJbmxpbmVUZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdJbmxpbmVUZXh0LmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIFwK
KwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
aCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3Jh
ZGllbnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlTGluZWFyR3JhZGllbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jvb3QuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jv
b3QuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVl
Um9vdENvbnRhaW5lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVFNwYW4uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0
LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmggXAor
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRh
aW5lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNm
b3JtYWJsZUNvbnRhaW5lci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVGbG93Qm94LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtlckRh
dGEuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZv
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZv
LmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaCBcCisJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuaCBcCisJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRDaHVuay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dENodW5rLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5r
QnVpbGRlci5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzUzNDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM2NTQsMjQgKzM2
NTQsODcgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3R5bGUvU3R5bGVUcmFuc2Zvcm1EYXRh
LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdHlsZS9TdHlsZVZpc3VhbERhdGEuY3BwJywK
ICAgICAgICAgICAgICdyZW5kZXJpbmcvc3R5bGUvU3R5bGVWaXN1YWxEYXRhLmgnLAorICAgICAg
ICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAnLAorICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oJywKKyAgICAgICAgICAgICdy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdCbG9jay5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0NvbnRhaW5lci5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGll
bnRTdG9wLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVu
dFN0b3AuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250
YWluZXIuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNv
bnRhaW5lci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNw
cCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oJywKICAgICAg
ICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAnLAogICAgICAgICAgICAg
J3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1BhdGguY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaCcs
CisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAnLAorICAg
ICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCcsCisgICAgICAgICAg
ICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwJywKKyAgICAgICAg
ICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oJywKKyAgICAgICAg
ICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCcsCisgICAg
ICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oJywKKyAg
ICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCcsCisg
ICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oJywKKyAg
ICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZl
LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZS5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgnLAorICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCcsCisgICAgICAgICAgICAncmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCcsCisgICAgICAgICAgICAncmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCcsCisgICAgICAgICAg
ICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgnLAorICAg
ICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCcs
CisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
aCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcCcsCisgICAg
ICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgnLAorICAgICAgICAgICAgJ3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwJywKKyAgICAg
ICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uY3BwJywKICAgICAg
ICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmgnLAogICAgICAgICAgICAgJ3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVGV4dC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1RleHRQYXRoLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0
UGF0aC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFi
bGVDb250YWluZXIuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Ry
YW5zZm9ybWFibGVDb250YWluZXIuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2
Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9T
VkdJbWFnZUJ1ZmZlclRvb2xzLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lRmxvd0JveC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxv
d0JveC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3Bw
JywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaCcsCisgICAg
ICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJEYXRhLmgnLAorICAgICAgICAgICAgJ3Jl
bmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAnLAorICAgICAgICAgICAgJ3JlbmRl
cmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclN1cHBvcnQuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcCcs
CisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuaCcsCisgICAgICAgICAg
ICAncmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAnLAorICAgICAgICAgICAgJ3Jl
bmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9TVkdSb290SW5saW5lQm94LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9T
VkdSb290SW5saW5lQm94LmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93
VHJlZUVsZW1lbnRzLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dU
cmVlRWxlbWVudHMuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsu
Y3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5oJywKICAgICAg
ICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuY3BwJywKQEAgLTM3NTEs
OCArMzgxNCw2IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250
cm9sLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAnLAog
ICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oJywKLSAgICAgICAgICAg
ICdyZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAnLAotICAgICAgICAgICAgJ3JlbmRl
cmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5k
ZXJGcmFtZS5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJGcmFtZS5oJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyRnJhbWVCYXNlLmNwcCcsCkBAIC0zODIxLDUwICsz
ODgyLDYgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyUnVieVRleHQuaCcsCiAgICAg
ICAgICAgICAncmVuZGVyaW5nL1JlbmRlclN1bW1hcnkuY3BwJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyU3VtbWFyeS5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZH
QmxvY2suY3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suaCcsCi0g
ICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAnLAotICAgICAgICAg
ICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaCcsCi0gICAgICAgICAgICAncmVuZGVy
aW5nL1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9S
ZW5kZXJTVkdHcmFkaWVudFN0b3AuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR0ltYWdl
LmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmgnLAotICAgICAg
ICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAnLAotICAgICAgICAgICAg
J3JlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oJywKLSAgICAgICAgICAgICdyZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2UuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXIuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oJywK
LSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUu
Y3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmlt
aXRpdmUuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuY3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFk
aWVudC5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVh
ckdyYWRpZW50LmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1h
cmtlci5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtl
ci5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3Bw
JywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCcsCi0g
ICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAnLAotICAg
ICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCcsCi0gICAgICAg
ICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwJywKLSAg
ICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oJywK
LSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCcs
Ci0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oJywK
LSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAnLAotICAgICAgICAgICAg
J3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5k
ZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oJywKLSAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAnLAotICAgICAgICAgICAg
J3JlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgnLAotICAgICAgICAg
ICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAnLAotICAgICAgICAg
ICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5n
L1JlbmRlclNjcm9sbGJhci5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU2Nyb2xs
YmFyUGFydC5jcHAnLApAQCAtMzkyNiwyMyArMzk0Myw2IEBACiAgICAgICAgICAgICAncmVuZGVy
aW5nL1Njcm9sbEJlaGF2aW9yLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9TaGFkb3dFbGVt
ZW50LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1NoYWRvd0VsZW1lbnQuaCcsCi0gICAg
ICAgICAgICAncmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwJywKLSAgICAgICAgICAg
ICdyZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5oJywKLSAgICAgICAgICAgICdyZW5kZXJp
bmcvU1ZHTWFya2VyRGF0YS5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHTWFya2VyTGF5
b3V0SW5mby5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZv
LmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcCcsCi0gICAg
ICAgICAgICAncmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaCcsCi0gICAgICAgICAgICAncmVu
ZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHUmVzb3Vy
Y2VzLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1NWR1Jlc291cmNlcy5oJywKLSAgICAg
ICAgICAgICdyZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwJywKLSAgICAgICAgICAgICdy
ZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2FjaGUuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1NW
R1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1NWR1Jl
c291cmNlc0N5Y2xlU29sdmVyLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdTaGFkb3dU
cmVlRWxlbWVudHMuY3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVs
ZW1lbnRzLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9UYWJsZUxheW91dC5oJywKICAgICAg
ICAgICAgICdyZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCcsCiAgICAgICAg
ICAgICAncmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oJywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJvCShyZXZpc2lvbiA3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjY4LDcgKzIyNjgsNiBAQCBIRUFERVJTICs9IFwKICAgICByZW5k
ZXJpbmcvUmVuZGVyRmllbGRzZXQuaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRD
b250cm9sLmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oIFwKLSAgICByZW5k
ZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVyRnJhbWUu
aCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckZyYW1lQmFzZS5oIFwKICAgICByZW5kZXJpbmcvUmVu
ZGVyRnJhbWVTZXQuaCBcCkBAIC0yMzA2LDI4ICsyMzA1LDYgQEAgSEVBREVSUyArPSBcCiAgICAg
cmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJT
bGlkZXIuaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclN1bW1hcnkuaCBcCi0gICAgcmVuZGVyaW5n
L1JlbmRlclNWR0Jsb2NrLmggXAotICAgIHJlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaCBc
Ci0gICAgcmVuZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50U3RvcC5oIFwKLSAgICByZW5kZXJpbmcv
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggXAotICAgIHJlbmRlcmluZy9SZW5kZXJTVkdJbWFn
ZS5oIFwKLSAgICByZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCi0gICAgcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlLmggXAotICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuaCBcCi0gICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgg
XAotICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIFwgCi0gICAgcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmggXAotICAgIHJlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggXAotICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZUxpbmVhckdyYWRpZW50LmggXAotICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1h
cmtlci5oIFwKLSAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCBcCi0gICAg
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIFwKLSAgICByZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIFwKLSAgICByZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yLmggXAotICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmggXAot
ICAgIHJlbmRlcmluZy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIFwKLSAgICBy
ZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIFwKLSAgICByZW5kZXJp
bmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaCBcCiAgICAgcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmggXApAQCAtMjM3MiwxNSArMjM0OSw0NyBAQCBIRUFERVJTICs9IFwK
ICAgICByZW5kZXJpbmcvc3R5bGUvU3R5bGVWaXN1YWxEYXRhLmggXAogICAgIHJlbmRlcmluZy9z
dHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRl
clN0eWxlLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oIFwKKyAg
ICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHQ29udGFpbmVyLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRT
dG9wLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggXAor
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmUuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0
LmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAgICAgcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2UuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIu
aCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIFwKKyAg
ICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggXCAKKyAgICByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmggXAorICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlci5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlTWFza2VyLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
LmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5o
IFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIFwKKyAg
ICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RTcGFuLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oIFwKICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyLmggXAorICAgIHJlbmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZm
ZXJUb29scy5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guaCBcCiAgICAg
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmggXAorICAgIHJlbmRlcmluZy9zdmcvU1ZH
TWFya2VyRGF0YS5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1NWR01hcmtlckxheW91dEluZm8uaCBc
CisgICAgcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmggXAorICAgIHJlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNl
cy5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmggXAorICAgIHJlbmRl
cmluZy9zdmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9T
VkdSb290SW5saW5lQm94LmggXAorICAgIHJlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1l
bnRzLmggXAogICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmggXAogICAgIHJlbmRlcmlu
Zy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRG
cmFnbWVudC5oIFwKQEAgLTIzOTEsMTUgKzI0MDAsNiBAQCBIRUFERVJTICs9IFwKICAgICByZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmggXAogICAgIHJlbmRlcmluZy9z
dmcvU1ZHVGV4dE1ldHJpY3MuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaCBc
Ci0gICAgcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuaCBcCi0gICAgcmVuZGVyaW5nL1NW
R01hcmtlckRhdGEuaCBcCi0gICAgcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uaCBcCi0g
ICAgcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaCBcCi0gICAgcmVuZGVyaW5nL1NWR1JlbmRl
clRyZWVBc1RleHQuaCBcCi0gICAgcmVuZGVyaW5nL1NWR1Jlc291cmNlcy5oIFwKLSAgICByZW5k
ZXJpbmcvU1ZHUmVzb3VyY2VzQ2FjaGUuaCBcCi0gICAgcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5
Y2xlU29sdmVyLmggXAotICAgIHJlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaCBcCiAg
ICAgcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIFwKICAgICByZW5kZXJpbmcv
VHJhbnNmb3JtU3RhdGUuaCBcCiAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5o
IFwKQEAgLTM0NzAsMTUgKzM0NzAsNDUgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0x
KSB7CiAgICAgICAgIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCBcCiAgICAgICAgIHJlbmRl
cmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5jcHAgXAogICAgICAgICByZW5kZXJpbmcvc3R5bGUv
U1ZHUmVuZGVyU3R5bGVEZWZzLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyRm9y
ZWlnbk9iamVjdC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNw
cCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBcCisgICAg
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCBcCisgICAgICAgIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCBcCisgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmUuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3Bw
IFwKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBcCisgICAgICAgIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4uY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVS
b290Q29udGFpbmVyLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4u
Y3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcCBcCiAgICAgICAg
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwIFwKKyAgICAgICAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCBcCisgICAgICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIFwKKyAgICAgICAgcmVuZGVy
aW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9zdmcv
U1ZHSW5saW5lRmxvd0JveC5jcHAgXAogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRl
eHRCb3guY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNw
cCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgXAorICAgICAg
ICByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3Zn
L1NWR1Jlc291cmNlc0NhY2hlLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHUmVzb3Vy
Y2VzQ3ljbGVTb2x2ZXIuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5l
Qm94LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNw
cAogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAgXAogICAgICAgICByZW5k
ZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAgXApAQCAtMzYyOCwzNyArMzY1OCw3IEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgICAgICBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyQnVpbGRlci5jcHAgXAogICAgICAgICBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIFwKLSAg
ICAgICAgc3ZnL3Byb3BlcnRpZXMvU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwIFwK
LSAgICAgICAgcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwIFwKLSAgICAgICAgcmVu
ZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdD
b250YWluZXIuY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50U3RvcC5j
cHAgXAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCBcCi0g
ICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAgXAotICAgICAgICByZW5kZXJpbmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlLmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIu
Y3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBc
Ci0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgXAotICAgICAg
ICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwIFwKLSAgICAg
ICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIFwKLSAgICAgICAgcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwIFwKLSAgICAgICAgcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgXAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZVJhZGlhbEdyYWRpZW50LmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IuY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwIFwK
LSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCBc
Ci0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCBc
Ci0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgXAotICAg
ICAgICByZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAgXAotICAgICAgICByZW5kZXJp
bmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAgXAotICAgICAgICByZW5kZXJpbmcvU1ZHUmVuZGVy
U3VwcG9ydC5jcHAgXAotICAgICAgICByZW5kZXJpbmcvU1ZHUmVzb3VyY2VzLmNwcCBcCi0gICAg
ICAgIHJlbmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAgXAotICAgICAgICByZW5kZXJpbmcv
U1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1NWR1NoYWRv
d1RyZWVFbGVtZW50cy5jcHAKKyAgICAgICAgc3ZnL3Byb3BlcnRpZXMvU1ZHUGF0aFNlZ0xpc3RQ
cm9wZXJ0eVRlYXJPZmYuY3BwCiB9CiAKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9KQVZBU0NS
SVBUX0RFQlVHR0VSPTEpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzM1OCw3ICszMzM1
OCw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHJlbmRlcmluZ1xSZW5kZXJGb3JlaWduT2JqZWN0LmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHJlbmRlcmluZ1xzdmdcUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAiCiAJCQkJPgogCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTMzNDEwLDcgKzMzNDEw
LDcgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJGb3JlaWduT2JqZWN0LmgiCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlckZvcmVpZ25PYmplY3QuaCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpAQCAtMzU0NjIsMTEgKzM1NDYyLDExIEBACiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xS
ZW5kZXJTVkdBbGxJbk9uZS5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3Zn
XFJlbmRlclNWR0FsbEluT25lLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR0Jsb2NrLmNwcCIKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHQmxvY2suY3BwIgogCQkJCT4KIAkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zNTUxOCwx
MSArMzU1MTgsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdCbG9jay5oIgor
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdCbG9jay5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdc
UmVuZGVyU1ZHQ29udGFpbmVyLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xz
dmdcUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9u
CiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzU1NzQsMTEgKzM1NTc0LDExIEBACiAJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHQ29udGFpbmVyLmgiCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0NvbnRhaW5lci5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHR3Jh
ZGllbnRTdG9wLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVy
U1ZHR3JhZGllbnRTdG9wLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJ
CU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzU2MzAsMTEgKzM1NjMwLDExIEBACiAJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxyZW5kZXJpbmdcUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0dyYWRpZW50U3RvcC5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9u
CiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzU2ODYsMTEgKzM1Njg2LDExIEBACiAJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgiCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdc
UmVuZGVyU1ZHSW1hZ2UuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xS
ZW5kZXJTVkdJbWFnZS5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlO
YW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM1NzQyLDExICszNTc0MiwxMSBAQAogCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cmVuZGVyaW5nXFJlbmRlclNWR0ltYWdlLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJp
bmdcc3ZnXFJlbmRlclNWR0ltYWdlLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR01vZGVsT2JqZWN0LmNw
cCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMy
IgpAQCAtMzU3OTgsMTEgKzM1Nzk4LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVy
U1ZHTW9kZWxPYmplY3QuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jlc291cmNlLmNwcCIKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVzb3VyY2UuY3BwIgogCQkJCT4K
IAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zNTg1
NCwxMSArMzU4NTQsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJj
ZS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJj
ZS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxy
ZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCIKIAkJCQk+CiAJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzU5MTAs
MTEgKzM1OTEwLDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIgorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
ci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xX
aW4zMiIKQEAgLTM1OTY2LDExICszNTk2NiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJp
bmdcc3ZnXFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCiAJCQkJPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJ
CU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzYwMjIsMTEgKzM2MDIyLDExIEBACiAJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxyZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRl
cmluZ1xzdmdcUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwIgogCQkJCT4KIAkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zNjA3OCwx
MSArMzYwNzgsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlclByaW1pdGl2ZS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJ
TmFtZT0iRGVidWd8V2luMzIiCkBAIC0zNjEzNCwxMSArMzYxMzQsMTEgQEAKIAkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgiCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCIKIAkJCQk+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRl
clNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVu
ZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCIKIAkJCQk+CiAJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzYxOTAs
MTEgKzM2MTkwLDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VM
aW5lYXJHcmFkaWVudC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5k
ZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
ci5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1Jlc291
cmNlTWFya2VyLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9
IkRlYnVnfFdpbjMyIgpAQCAtMzYyNDYsMTEgKzM2MjQ2LDExIEBACiAJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5k
ZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jlc291
cmNlTWFza2VyLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJ
CQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zNjMwMiwxMSArMzYzMDIsMTEgQEAKIAkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIgorCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIgogCQkJCT4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xz
dmdcUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1
cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzYzNTgsMTEgKzM2MzU4LDExIEBA
CiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgiCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5o
IgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5k
ZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAiCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3Bw
IgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIi
CkBAIC0zNjQxNCwxMSArMzY0MTQsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJT
VkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJp
bmdcc3ZnXFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvci5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3Zn
XFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM2NDcwLDExICszNjQ3MCwxMSBA
QAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgor
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccmVuZGVyaW5nXFJlbmRlclNWR1Jvb3QuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVu
ZGVyaW5nXHN2Z1xSZW5kZXJTVkdSb290LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0
aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzY1MjYsMTEgKzM2NTI2LDExIEBACiAJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHUm9vdC5oIgorCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSb290LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdTaGFkb3dUcmVl
Um9vdENvbnRhaW5lci5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJl
bmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzY1ODIsMTEgKzM2NTgyLDEx
IEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWlu
ZXIuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHU2hhZG93
VHJlZVJvb3RDb250YWluZXIuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIu
Y3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdUcmFuc2Zv
cm1hYmxlQ29udGFpbmVyLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJ
CU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzY2MzgsMTEgKzM2NjM4LDExIEBACiAJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxyZW5kZXJpbmdcUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIgorCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVy
LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAiCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCIKIAkJCQk+
CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzc4
OTYsMTEgKzM3ODk2LDExIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdNYXJrZXJEYXRhLmgiCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxyZW5kZXJpbmdcc3ZnXFNWR01hcmtlckRhdGEuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNWR01hcmtlckxheW91dElu
Zm8uY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdNYXJrZXJMYXlv
dXRJbmZvLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRl
YnVnfFdpbjMyIgpAQCAtMzc5NTIsMTEgKzM3OTUyLDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJp
bmdcU1ZHTWFya2VyTGF5b3V0SW5mby5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5n
XHN2Z1xTVkdNYXJrZXJMYXlvdXRJbmZvLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdSZW5kZXJTdXBwb3J0LmNwcCIKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHUmVuZGVyU3VwcG9ydC5jcHAiCiAJ
CQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAg
LTM4MDA4LDExICszODAwOCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNWR1JlbmRlclN1
cHBvcnQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHUmVuZGVyU3Vw
cG9ydC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxyZW5kZXJpbmdcU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxyZW5kZXJpbmdcc3ZnXFNWR1JlbmRlclRyZWVBc1RleHQuY3BwIgogCQkJCT4KIAkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zODA2NCwxMSArMzgw
NjQsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1JlbmRlclRyZWVBc1RleHQuaCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVy
aW5nXFNWR1Jlc291cmNlcy5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3Zn
XFNWR1Jlc291cmNlcy5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlO
YW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM4MTIwLDExICszODEyMCwxMSBAQAogCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cmVuZGVyaW5nXFNWR1Jlc291cmNlcy5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5n
XHN2Z1xTVkdSZXNvdXJjZXMuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNWR1Jlc291cmNlc0NhY2hlLmNwcCIKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIgogCQkJCT4K
IAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zODE3
NiwxMSArMzgxNzYsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdSZXNvdXJjZXNDYWNo
ZS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdSZXNvdXJjZXNDYWNo
ZS5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxy
ZW5kZXJpbmdcU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccmVuZGVyaW5nXHN2Z1xTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAiCiAJCQkJPgogCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM4MjMyLDEx
ICszODIzMiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNWR1Jlc291cmNlc0N5Y2xlU29s
dmVyLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1Jlc291cmNlc0N5
Y2xlU29sdmVyLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHJlbmRlcmluZ1xTVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwIgorCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwIgogCQkJCT4K
IAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zODI4
OCw3ICszODI4OCw3IEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHU2hhZG93VHJlZUVsZW1l
bnRzLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1NoYWRvd1RyZWVF
bGVtZW50cy5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3
NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNiBAQAogCQkwODA0QkY2RTBFRTA5QzNCMDAw
NkMwMDAgLyogV01MRG9FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4MDRCRjZDMEVFMDlDM0IwMDA2QzAwMCAvKiBXTUxEb0VsZW1lbnQu
Y3BwICovOyB9OwogCQkwODA0QkY2RjBFRTA5QzNCMDAwNkMwMDAgLyogV01MRG9FbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODA0QkY2RDBF
RTA5QzNCMDAwNkMwMDAgLyogV01MRG9FbGVtZW50LmggKi87IH07CiAJCTA4MDZFNTdBMTI4OTMw
NDUwMDdDRUQzMiAvKiBTVkdNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4MDZFNTc5MTI4OTMwNDUwMDdDRUQzMiAvKiBTVkdNYXRyaXguaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwODA4MjM3
MzExNzk4N0MxMDAyNDFERTggLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MDgyMzcyMTE3OTg3QzEw
MDI0MURFOCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oICovOyB9OwogCQkwODBBRUM4
MTBFRDg3MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgwQUVDN0QwRUQ4NzA4QTAwREY0Q0NF
IC8qIFdNTEludHJpbnNpY0V2ZW50LmNwcCAqLzsgfTsKIAkJMDgwQUVDODIwRUQ4NzA4QjAwREY0
Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODBBRUM3RTBFRDg3MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2lj
RXZlbnQuaCAqLzsgfTsKIAkJMDgwQUVDODMwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNp
Y0V2ZW50SGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwODBBRUM3RjBFRDg3MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnRIYW5k
bGVyLmNwcCAqLzsgfTsKQEAgLTk3LDEwICs5Niw2IEBACiAJCTA4MjNEMTU5MTI3QUQ2QUMwMDBF
QkM5NSAvKiBTVkdBbmltYXRlZEludGVnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA4MjNEMTU4MTI3QUQ2QUMwMDBFQkM5NSAvKiBTVkdBbmltYXRl
ZEludGVnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwODI1MDkzOTEyOEJENEQ4MDBFMkVEOEUgLyogU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODI1MDkz
ODEyOEJENEQ4MDBFMkVEOEUgLyogU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDgyREU0MkQxMjkyNjIx
NjAwRDkyM0RGIC8qIFNWR1BhdGhTZWdXaXRoQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgyREU0MkMxMjkyNjIxNjAwRDkyM0RGIC8qIFNW
R1BhdGhTZWdXaXRoQ29udGV4dC5oICovOyB9OwotCQkwODMxOTJBQTExMkI0MzA1MDA4M0MzQjkg
LyogUmVuZGVyU1ZHUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4MzE5MkE3MTEyQjQzMDUwMDgzQzNCOSAvKiBSZW5kZXJTVkdSZXNvdXJj
ZS5oICovOyB9OwotCQkwODMxOTJBQjExMkI0MzA1MDA4M0MzQjkgLyogUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDgzMTkyQTgxMTJCNDMwNTAwODNDM0I5IC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmNw
cCAqLzsgfTsKLQkJMDgzMTkyQUMxMTJCNDMwNTAwODNDM0I5IC8qIFJlbmRlclNWR1Jlc291cmNl
TWFza2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
ODMxOTJBOTExMkI0MzA1MDA4M0MzQjkgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCAqLzsg
fTsKLQkJMDgzODVGRjYxMEYwMTg2MDAwQkZFMDdCIC8qIFNWR01hcmtlckRhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4Mzg1RkY1MTBGMDE4NjAw
MEJGRTA3QiAvKiBTVkdNYXJrZXJEYXRhLmggKi87IH07CiAJCTA4Mzk0NzZDMEVDRTRCRDYwMDAy
NzM1MCAvKiBXTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwOEZCODRCMDBFQ0UzNzMzMDBEQzA2NEUgLyogV01MRWxlbWVu
dEZhY3RvcnkuY3BwICovOyB9OwogCQkwODM5NDc2RDBFQ0U0QkQ2MDAwMjczNTAgLyogV01MRWxl
bWVudEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA4RkI4NEIxMEVDRTM3MzMwMERDMDY0RSAvKiBXTUxFbGVtZW50RmFjdG9yeS5oICovOyB9
OwogCQkwODNEQUVBNjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgz
REFFQTIwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcCAq
LzsgfTsKQEAgLTExNCwxMCArMTA5LDYgQEAKIAkJMDg0Q0U1Q0MwRjI3REFEQzAwRTYyNDBFIC8q
IFdNTE9wdEdyb3VwRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDg0Q0U1QzgwRjI3REFEQzAwRTYyNDBFIC8qIFdNTE9wdEdyb3VwRWxlbWVu
dC5oICovOyB9OwogCQkwODRDRTVDRDBGMjdEQURDMDBFNjI0MEUgLyogV01MT3B0aW9uRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODRD
RTVDOTBGMjdEQURDMDBFNjI0MEUgLyogV01MT3B0aW9uRWxlbWVudC5jcHAgKi87IH07CiAJCTA4
NENFNUNFMEYyN0RBREMwMEU2MjQwRSAvKiBXTUxPcHRpb25FbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODRDRTVDQTBGMjdEQURDMDBFNjI0
MEUgLyogV01MT3B0aW9uRWxlbWVudC5oICovOyB9OwotCQkwODREMEUzQzExRjU4MTYxMDAwODFF
MUEgLyogU1ZHUmVzb3VyY2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4NEQwRTM4MTFGNTgxNjEwMDA4MUUxQSAvKiBTVkdSZXNvdXJjZXMuY3Bw
ICovOyB9OwotCQkwODREMEUzRDExRjU4MTYxMDAwODFFMUEgLyogU1ZHUmVzb3VyY2VzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODREMEUzOTExRjU4
MTYxMDAwODFFMUEgLyogU1ZHUmVzb3VyY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMDg0RDBFM0UxMUY1ODE2MTAwMDgxRTFBIC8qIFNWR1Jl
c291cmNlc0NhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4NEQwRTNBMTFGNTgxNjEwMDA4MUUxQSAvKiBTVkdSZXNvdXJjZXNDYWNoZS5jcHAg
Ki87IH07Ci0JCTA4NEQwRTNGMTFGNTgxNjEwMDA4MUUxQSAvKiBTVkdSZXNvdXJjZXNDYWNoZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0RDBFM0Ix
MUY1ODE2MTAwMDgxRTFBIC8qIFNWR1Jlc291cmNlc0NhY2hlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDg0REI1OUIxMjgwMDhDQzAwMkE2RDY0
IC8qIFNWR0FuaW1hdGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODREQjU5QTEyODAwOENDMDAyQTZENjQgLyogU1ZHQW5pbWF0ZWRTdHJp
bmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
ODREQkFBMTBFRDM5RDM2MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NERCQTlEMEVEMzlEMzUwMDM4QzIy
NiAvKiBXTUxWYXJpYWJsZXMuY3BwICovOyB9OwogCQkwODREQkFBMjBFRDM5RDM2MDAzOEMyMjYg
LyogV01MVmFyaWFibGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwODREQkE5RTBFRDM5RDM2MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmggKi87IH07
CkBAIC0xNDAsMzAgKzEzMSwyMiBAQAogCQkwODU0QjAyMzEyNTVFNEU2MDBCOUNERDAgLyogU1ZH
Um9vdElubGluZUJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDg1NEIwMTExMjU1RTRFNjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLzsg
fTsKIAkJMDg1NEIwMjQxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAxMjEyNTVFNEU2
MDBCOUNERDAgLyogU1ZHVGV4dFF1ZXJ5LmNwcCAqLzsgfTsKIAkJMDg1NEIwMjUxMjU1RTRFNjAw
QjlDREQwIC8qIFNWR1RleHRRdWVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDg1NEIwMTMxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5o
ICovOyB9OwotCQkwODU2M0JCNDExNzg2MTc4MDAxMkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4NTYzQkIyMTE3ODYxNzcwMDEyQjU3OCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3Bw
ICovOyB9OwotCQkwODU2M0JCNTExNzg2MTc4MDAxMkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
ODU2M0JCMzExNzg2MTc3MDAxMkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggKi87
IH07Ci0JCTA4NTYzQkQwMTE3ODY1RjUwMDEyQjU3OCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU2M0JDRjEx
Nzg2NUY1MDAxMkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2UuY3BwICovOyB9OwogCQkwODU3OTcw
OTEyNzgzOTRDMDBBOEVDNUYgLyogU1ZHQW5pbWF0ZWRCb29sZWFuLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU3OTcwODEyNzgzOTRDMDBBOEVDNUYg
LyogU1ZHQW5pbWF0ZWRCb29sZWFuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMDg1OTFBQTUwRjA4NUM0RTAwOUJBQ0IxIC8qIElucHV0RWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1OTFB
QTQwRjA4NUM0RTAwOUJBQ0IxIC8qIElucHV0RWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4NUExNTkzMTI4OUE4REQwMDI3MTBFMyAv
KiBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NUExNTkyMTI4OUE4REQwMDI3MTBF
MyAvKiBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwODVBRkRDODBGMjk3NzM1
MDA2MUYyQjMgLyogV01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NUFGREM2MEYyOTc3MzUwMDYxRjJCMyAvKiBX
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwICovOyB9OwogCQkwODVBRkRDOTBGMjk3NzM1MDA2MUYy
QjMgLyogV01MRm9ybUNvbnRyb2xFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODVBRkRDNzBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNv
bnRyb2xFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKLQkJ
MDg1QjA1QzIxMUZBRTE2QzAwNEQ2NUY2IC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NUIwNUMwMTFG
QUUxNkMwMDRENjVGNiAvKiBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAgKi87IH07Ci0JCTA4
NUIwNUMzMTFGQUUxNkMwMDRENjVGNiAvKiBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1QjA1QzExMUZBRTE2
QzAwNEQ2NUY2IC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmggKi87IH07CiAJCTA4NUI5MkJB
MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1QjkyQjgwRUZERTczRDAwRTYxMjNDIC8q
IEZvcm1EYXRhQnVpbGRlci5jcHAgKi87IH07CiAJCTA4NUI5MkJCMEVGREU3M0QwMEU2MTIzQyAv
KiBGb3JtRGF0YUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4NUI5MkI5MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkwODY0MUQ0NzEyMTQyRjdE
MDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg2NDFENDUxMjE0MkY3RDAwOERF
OUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNwcCAqLzsgfTsKIAkJMDg2NDFE
NDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODY0MUQ0NjEyMTQy
RjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwODY1Q0NFNjBFRERGNTFC
MDBERjlFQzMgLyogV01MTm9vcEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDg2NUNDRTQwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BF
bGVtZW50LmNwcCAqLzsgfTsKIAkJMDg2NUNDRTcwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
ODY1Q0NFNTBFRERGNTFCMDBERjlFQzMgLyogV01MTm9vcEVsZW1lbnQuaCAqLzsgfTsKLQkJMDg2
QTQwMDYxMUY2RDZCNzAwMkNFQzUzIC8qIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NkE0MDA1MTFG
NkQ2QjcwMDJDRUM1MyAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgKi87IH07CiAJ
CTA4NzAwQkU3MEYwODZDNTMwMDkxOTQxOSAvKiBJbnB1dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg3MDBCRTYwRjA4NkM1MzAwOTE5
NDE5IC8qIElucHV0RWxlbWVudC5jcHAgKi87IH07CiAJCTA4NzI4MTU1MEYyNkI5QjYwMEFGQzU5
NiAvKiBPcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4NzI4MTUxMEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmNw
cCAqLzsgfTsKIAkJMDg3MjgxNTYwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzI4MTUyMEYy
NkI5QjYwMEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmggKi87IH07CiAJCTA4NzI4MTU3MEYyNkI5
QjYwMEFGQzU5NiAvKiBPcHRpb25Hcm91cEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg3MjgxNTMwRjI2QjlCNjAwQUZDNTk2IC8qIE9w
dGlvbkdyb3VwRWxlbWVudC5jcHAgKi87IH07CiAJCTA4NzI4MTU4MEYyNkI5QjYwMEFGQzU5NiAv
KiBPcHRpb25Hcm91cEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4NzI4MTU0MEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25Hcm91cEVsZW1l
bnQuaCAqLzsgfTsKLQkJMDg3MzVGQjgxMEU5MTIzMjAwNkQ2RkFEIC8qIFNWR01hcmtlckxheW91
dEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDg3MzVGQjYxMEU5MTIzMjAwNkQ2RkFEIC8qIFNWR01hcmtlckxheW91dEluZm8uY3BwICovOyB9
OwotCQkwODczNUZCOTEwRTkxMjMyMDA2RDZGQUQgLyogU1ZHTWFya2VyTGF5b3V0SW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg3MzVGQjcxMEU5
MTIzMjAwNkQ2RkFEIC8qIFNWR01hcmtlckxheW91dEluZm8uaCAqLzsgfTsKIAkJMDg3NDRCQUEw
RURCN0Q4NjAwNEM5RTYzIC8qIFdNTE9uRXZlbnRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzQ0QkE5MEVEQjdEODYwMDRDOUU2MyAv
KiBXTUxPbkV2ZW50RWxlbWVudC5jcHAgKi87IH07CiAJCTA4NzQ0QkFFMEVEQjdEOTIwMDRDOUU2
MyAvKiBXTUxPbkV2ZW50RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDg3NDRCQUQwRURCN0Q5MjAwNEM5RTYzIC8qIFdNTE9uRXZlbnRFbGVt
ZW50LmggKi87IH07CiAJCTA4N0I4NDk2MTI3MkNFQzgwMEExNDQxNyAvKiBTVkdBbmltYXRlZEFu
Z2xlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODdC
ODQ5NTEyNzJDRUM3MDBBMTQ0MTcgLyogU1ZHQW5pbWF0ZWRBbmdsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMjMsMjAgKzIwNiwxMCBAQAog
CQkwOEE0OEE2RTBFODZDRjZEMDBFMjI1REQgLyogSlNTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhBNDhB
NkQwRTg2Q0Y2RDAwRTIyNUREIC8qIEpTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcCAqLzsg
fTsKIAkJMDhCMzVCMTMxMjdCNkE3QzAwNTMxNEREIC8qIFNWR0FuaW1hdGVkTnVtYmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEIzNUIxMjEyN0I2
QTdDMDA1MzE0REQgLyogU1ZHQW5pbWF0ZWROdW1iZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwOEIzNUIxNzEyN0I2QTg4MDA1MzE0REQgLyog
U1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwOEIzNUIxNjEyN0I2QTg4MDA1MzE0REQgLyogU1ZHQW5pbWF0ZWROdW1i
ZXJMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMDhDMzRBRjUxMTc5QzA1NzAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDMzRB
RjExMTc5QzA1NjAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwICovOyB9
OwotCQkwOEMzNEFGNjExNzlDMDU3MDAyRDc0NTYgLyogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDMzRB
RjIxMTc5QzA1NzAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCAqLzsgfTsK
LQkJMDhDMzRBRjcxMTc5QzA1NzAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3Jh
ZGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDhDMzRBRjMxMTc5QzA1NzAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGll
bnQuY3BwICovOyB9OwotCQkwOEMzNEFGODExNzlDMDU3MDAyRDc0NTYgLyogUmVuZGVyU1ZHUmVz
b3VyY2VMaW5lYXJHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDhDMzRBRjQxMTc5QzA1NzAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNl
TGluZWFyR3JhZGllbnQuaCAqLzsgfTsKLQkJMDhDMzRBRkQxMTc5QzA3MjAwMkQ3NDU2IC8qIFJl
bmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDMzRBRkIxMTc5QzA3MjAwMkQ3NDU2IC8qIFJlbmRl
clNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwICovOyB9OwotCQkwOEMzNEFGRTExNzlDMDcy
MDAyRDc0NTYgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDMzRBRkMxMTc5QzA3MjAwMkQ3
NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCAqLzsgfTsKLQkJMDhDNDZC
NjkxMjEyRjE1RTAwMTFBRjQwIC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDNDZCNjcxMjEyRjE1RDAwMTFB
RjQwIC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMuY3BwICovOyB9OwotCQkwOEM0NkI2QTEyMTJGMTVF
MDAxMUFGNDAgLyogU1ZHSW1hZ2VCdWZmZXJUb29scy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDNDZCNjgxMjEyRjE1RDAwMTFBRjQwIC8qIFNWR0lt
YWdlQnVmZmVyVG9vbHMuaCAqLzsgfTsKIAkJMDhDNEM1MTgwRUYxOUE0MDAwRTQ4NDBGIC8qIFdN
TEltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwOEM0QzUxNDBFRjE5QTQwMDBFNDg0MEYgLyogV01MSW1hZ2VFbGVtZW50LmNwcCAq
LzsgfTsKIAkJMDhDNEM1MTkwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdlRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDNEM1MTUwRUYx
OUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdlRWxlbWVudC5oICovOyB9OwogCQkwOEM0QzUxQTBFRjE5
QTQwMDBFNDg0MEYgLyogV01MSW1hZ2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDNEM1MTYwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTElt
YWdlTG9hZGVyLmNwcCAqLzsgfTsKIAkJMDhDNEM1MUIwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTElt
YWdlTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwOEM0QzUxNzBFRjE5QTQwMDBFNDg0MEYgLyogV01MSW1hZ2VMb2FkZXIuaCAqLzsgfTsKLQkJ
MDhDNkE3QUIxMTdERkJBQjAwRkVBMUEyIC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEM2QTdB
OTExN0RGQkFCMDBGRUExQTIgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCAqLzsg
fTsKLQkJMDhDNkE3QUMxMTdERkJBQjAwRkVBMUEyIC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRD
b2xvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhD
NkE3QUExMTdERkJBQjAwRkVBMUEyIC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oICov
OyB9OwogCQkwOEM3MTM2RTEyODk1NkEzMDAxQjEwN0UgLyogU1ZHVHJhbnNmb3JtTGlzdFByb3Bl
cnR5VGVhck9mZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDhDNzEzNkQxMjg5NTZBMzAwMUIxMDdFIC8qIFNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRl
YXJPZmYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwOEM3QTJDNzEwREM3NDYyMDAyRDM2OEIgLyogU1ZHTmFtZXMuaCBpbiBDb3B5IEdlbmVyYXRl
ZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4MUU5MDlE
MTUwOEQwMDBFNjFENyAvKiBTVkdOYW1lcy5oICovOyB9OwogCQkwOEM4NTlDMDEyNzQ1NzU0MDBB
NTcyOEQgLyogU1ZHQW5pbWF0ZWRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwOEM4NTlCRjEyNzQ1NzUzMDBBNTcyOEQgLyogU1ZHQW5pbWF0ZWRS
ZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTI0NiwxMCArMjE5LDYgQEAKIAkJMDhDRDYxQkMwRUQzOTI5QzAwMkRERjUxIC8qIFdNTFRhc2tF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4Q0Q2MUI4MEVEMzkyOUMwMDJEREY1MSAvKiBXTUxUYXNrRWxlbWVudC5jcHAgKi87IH07CiAJ
CTA4Q0Q2MUJEMEVEMzkyOUMwMDJEREY1MSAvKiBXTUxUYXNrRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDRDYxQjkwRUQzOTI5QzAwMkRE
RjUxIC8qIFdNTFRhc2tFbGVtZW50LmggKi87IH07CiAJCTA4RDQ2Q0UzMTI3QUQ1RkMwMDg5Njk0
QiAvKiBTVkdBbmltYXRlZEVudW1lcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwOEQ0NkNFMjEyN0FENUZDMDA4OTY5NEIgLyogU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTA4REFCOUJBMTEwM0Q5QTUwMDNFN0FCQSAvKiBSZW5kZXJTVkdTaGFkb3dUcmVl
Um9vdENvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwOERBQjlCODExMDNEOUE1MDAzRTdBQkEgLyogUmVuZGVyU1ZHU2hhZG93VHJlZVJv
b3RDb250YWluZXIuY3BwICovOyB9OwotCQkwOERBQjlCQjExMDNEOUE1MDAzRTdBQkEgLyogUmVu
ZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4REFCOUI5MTEwM0Q5QTUwMDNFN0FCQSAvKiBSZW5kZXJT
VkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oICovOyB9OwotCQkwOERBQjlDMjExMDNEOUMxMDAz
RTdBQkEgLyogU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4REFCOUMwMTEwM0Q5QzEwMDNFN0FCQSAvKiBTVkdT
aGFkb3dUcmVlRWxlbWVudHMuY3BwICovOyB9OwotCQkwOERBQjlDMzExMDNEOUMxMDAzRTdBQkEg
LyogU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwOERBQjlDMTExMDNEOUMxMDAzRTdBQkEgLyogU1ZHU2hhZG93VHJl
ZUVsZW1lbnRzLmggKi87IH07CiAJCTA4RTE5MjUzMEVERTBDM0EwMDg3Qjc4MCAvKiBXTUxFcnJv
ckhhbmRsaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA4RTE5MjUxMEVERTBDMzkwMDg3Qjc4MCAvKiBXTUxFcnJvckhhbmRsaW5nLmNwcCAqLzsg
fTsKIAkJMDhFMTkyNTQwRURFMEMzQTAwODdCNzgwIC8qIFdNTEVycm9ySGFuZGxpbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4RTE5MjUyMEVERTBD
M0EwMDg3Qjc4MCAvKiBXTUxFcnJvckhhbmRsaW5nLmggKi87IH07CiAJCTA4RTRGRTQ2MEUyQkQ0
MTQwMEY0Q0FFMCAvKiBKU1NWR0xlbmd0aEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEU0RkU0NTBFMkJENDE0MDBGNENBRTAgLyogSlNT
VkdMZW5ndGhDdXN0b20uY3BwICovOyB9OwpAQCAtMzgyLDggKzM1MSw2IEBACiAJCTE4RjgzMUI4
MEZENDhDNzgwMEQ4QzU2QiAvKiBXb3JrZXJMb2FkZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThGODMxQjcwRkQ0OEM3ODAwRDhDNTZCIC8q
IFdvcmtlckxvYWRlclByb3h5LmggKi87IH07CiAJCTE5MjEzMjc0MTFDMEU2QkIwMDQ1NjIzOCAv
KiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOTIxMzI3MTExQzBFNkJCMDA0NTYyMzggLyogU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwICovOyB9OwogCQkxOTIxMzI3NTExQzBFNkJCMDA0NTYy
MzggLyogU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE5MjEzMjcyMTFDMEU2QkIwMDQ1NjIzOCAvKiBTVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5oICovOyB9OwotCQkxOTQyM0I1MDEyMzRFODZCMDBEMUVF
OUUgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTk0MjNCNEUxMjM0RTg2QjAwRDFFRTlF
IC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCAqLzsgfTsKLQkJMTk0MjNC
NTExMjM0RTg2QjAwRDFFRTlFIC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOTQyM0I0RjEy
MzRFODZCMDBEMUVFOUUgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCAqLzsg
fTsKIAkJMTlCRkY2NEIxMUMwRjJBQzAwQjhDMDREIC8qIERPTVNWR0ZFQ29udm9sdmVNYXRyaXhF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
OUJGRjY0NjExQzBGMkFDMDBCOEMwNEQgLyogRE9NU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQu
aCAqLzsgfTsKIAkJMTlCRkY2NEMxMUMwRjJBQzAwQjhDMDREIC8qIERPTVNWR0ZFQ29udm9sdmVN
YXRyaXhFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTlCRkY2NDcxMUMwRjJBQzAwQjhDMDREIC8qIERPTVNWR0ZFQ29udm9sdmVNYXRyaXhF
bGVtZW50Lm1tICovOyB9OwogCQkxOUJGRjY0RDExQzBGMkFDMDBCOEMwNEQgLyogRE9NU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTlCRkY2NDgxMUMwRjJBQzAwQjhDMDREIC8qIERPTVNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50SW50ZXJuYWwuaCAqLzsgfTsKQEAgLTk3Miw2ICs5MzksNjkg
QEAKIAkJNDFGMUQyMUYwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMUQyMUQw
RUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxRjFEMjIwMEVGMzVDMkEwMERB
ODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMUQyMUUwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlw
dENhY2hlZEZyYW1lRGF0YS5jcHAgKi87IH07CiAJCTQxRjU4NEM3MTA0NjUyQ0IwMDlDQUE2NCAv
KiBKU01lc3NhZ2VQb3J0Q3VzdG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MUY1ODRDNjEwNDY1MkNCMDA5Q0FBNjQgLyogSlNNZXNzYWdlUG9ydEN1
c3RvbS5oICovOyB9OworCQk0MzY3MDgwNzEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyRm9yZWln
bk9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MzY3MDdDODEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAgKi87
IH07CisJCTQzNjcwODA4MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJGb3JlaWduT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdDOTEy
RDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5oICovOyB9OworCQk0MzY3MDgw
OTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA3Q0ExMkQ5OUNDMzAwMDQ0MjM0IC8q
IFJlbmRlclNWR0Jsb2NrLmNwcCAqLzsgfTsKKwkJNDM2NzA4MEExMkQ5OUNDMzAwMDQ0MjM0IC8q
IFJlbmRlclNWR0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MzY3MDdDQjEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHQmxvY2suaCAqLzsg
fTsKKwkJNDM2NzA4MEIxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR0NvbnRhaW5lci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdDQzEy
RDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCAqLzsgfTsKKwkJNDM2NzA4
MEMxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR0NvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA3Q0QxMkQ5OUNDMzAwMDQ0MjM0
IC8qIFJlbmRlclNWR0NvbnRhaW5lci5oICovOyB9OworCQk0MzY3MDgwRDEyRDk5Q0MzMDAwNDQy
MzQgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwN0NFMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJT
VkdHcmFkaWVudFN0b3AuY3BwICovOyB9OworCQk0MzY3MDgwRTEyRDk5Q0MzMDAwNDQyMzQgLyog
UmVuZGVyU1ZHR3JhZGllbnRTdG9wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MzY3MDdDRjEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHR3JhZGll
bnRTdG9wLmggKi87IH07CisJCTQzNjcwODBGMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDM2NzA3RDAxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR0hpZGRlbkNvbnRh
aW5lci5jcHAgKi87IH07CisJCTQzNjcwODEwMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQzNjcwN0QxMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWlu
ZXIuaCAqLzsgfTsKKwkJNDM2NzA4MTExMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR0ltYWdl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcw
N0QyMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgKi87IH07CisJCTQzNjcw
ODEyMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA3RDMxMkQ5OUNDMzAwMDQ0MjM0IC8q
IFJlbmRlclNWR0ltYWdlLmggKi87IH07CisJCTQzNjcwODEzMTJEOTlDQzMwMDA0NDIzNCAvKiBS
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MzY3MDdENDEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxP
YmplY3QuY3BwICovOyB9OworCQk0MzY3MDgxNDEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZH
TW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzNjcwN0Q1MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oICov
OyB9OworCQk0MzY3MDgxNTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA3RDYx
MkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlLmNwcCAqLzsgfTsKKwkJNDM2NzA4
MTYxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdENzEyRDk5Q0MzMDAwNDQyMzQg
LyogUmVuZGVyU1ZHUmVzb3VyY2UuaCAqLzsgfTsKKwkJNDM2NzA4MTcxMkQ5OUNDMzAwMDQ0MjM0
IC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdEODEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCAqLzsgfTsKKwkJNDM2NzA4MTgxMkQ5OUNDMzAwMDQ0MjM0
IC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA3RDkxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5oICovOyB9OworCQk0MzY3MDgxOTEyRDk5Q0MzMDAwNDQyMzQgLyog
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA3REExMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyLmNwcCAqLzsgfTsKKwkJNDM2NzA4MUExMkQ5OUNDMzAwMDQ0MjM0
IC8qIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdEQjEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIuaCAqLzsgfTsKKwkJNDM2NzA4MUIxMkQ5OUNDMzAwMDQ0MjM0
IC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwN0RDMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAgKi87IH07CisJCTQzNjcwODFDMTJEOTlDQzMwMDA0NDIzNCAv
KiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDM2NzA3REQxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmggKi87IH07CisJCTQzNjcwODFEMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdERTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwICovOyB9OworCQk0MzY3MDgxRTEyRDk5Q0Mz
MDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwN0RGMTJEOTlDQzMwMDA0
NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oICovOyB9OworCQk0MzY3
MDgxRjEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdFMDEyRDk5
Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgKi87IH07CisJCTQz
NjcwODIwMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdFMTEyRDk5
Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oICovOyB9OworCQk0MzY3
MDgyMTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdF
MjEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAg
Ki87IH07CisJCTQzNjcwODIyMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUxp
bmVhckdyYWRpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MzY3MDdFMzEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJH
cmFkaWVudC5oICovOyB9OworCQk0MzY3MDgyMzEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDM2NzA3RTQxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyLmNwcCAqLzsgfTsKKwkJNDM2NzA4MjQxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jl
c291cmNlTWFya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MzY3MDdFNTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIu
aCAqLzsgfTsKKwkJNDM2NzA4MjUxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNl
TWFza2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQzNjcwN0U2MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAg
Ki87IH07CisJCTQzNjcwODI2MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZU1h
c2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2
NzA3RTcxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmggKi87IH07
CisJCTQzNjcwODI3MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA3
RTgxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgKi87IH07
CisJCTQzNjcwODI4MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwN0U5
MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCAqLzsgfTsKKwkJ
NDM2NzA4MjkxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2
NzA3RUExMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQu
Y3BwICovOyB9OworCQk0MzY3MDgyQTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3Vy
Y2VSYWRpYWxHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDM2NzA3RUIxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlUmFk
aWFsR3JhZGllbnQuaCAqLzsgfTsKKwkJNDM2NzA4MkIxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdFQzEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmNwcCAqLzsgfTsKKwkJNDM2NzA4MkMxMkQ5OUNDMzAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA3RUQxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5oICovOyB9OworCQk0MzY3MDgyRDEyRDk5Q0MzMDAwNDQyMzQg
LyogUmVuZGVyU1ZHUm9vdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MzY3MDdFRTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5jcHAg
Ki87IH07CisJCTQzNjcwODJFMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdFRjEyRDk5
Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5oICovOyB9OworCQk0MzY3MDgyRjEyRDk5Q0Mz
MDAwNDQyMzQgLyogUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA3RjAxMkQ5OUNDMzAw
MDQ0MjM0IC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCAqLzsgfTsKKwkJ
NDM2NzA4MzAxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFp
bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3
MDdGMTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIu
aCAqLzsgfTsKKwkJNDM2NzA4MzExMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1RyYW5zZm9y
bWFibGVDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDM2NzA3RjIxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFi
bGVDb250YWluZXIuY3BwICovOyB9OworCQk0MzY3MDgzMjEyRDk5Q0MzMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA3RjMxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXIuaCAqLzsgfTsKKwkJNDM2NzA4MzMxMkQ5OUNDMzAwMDQ0
MjM0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwN0Y0MTJEOTlDQzMwMDA0NDIzNCAvKiBS
ZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgKi87IH07CisJCTQzNjcwODM0MTJEOTlDQzMw
MDA0NDIzNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA3RjUxMkQ5OUNDMzAwMDQ0MjM0IC8q
IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggKi87IH07CisJCTQzNjcwODM1MTJEOTlDQzMw
MDA0NDIzNCAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwN0Y2MTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdJ
bWFnZUJ1ZmZlclRvb2xzLmNwcCAqLzsgfTsKKwkJNDM2NzA4MzYxMkQ5OUNDMzAwMDQ0MjM0IC8q
IFNWR0ltYWdlQnVmZmVyVG9vbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQzNjcwN0Y3MTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdJbWFnZUJ1ZmZlclRv
b2xzLmggKi87IH07CisJCTQzNjcwODM3MTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdNYXJrZXJEYXRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdG
ODEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHTWFya2VyRGF0YS5oICovOyB9OworCQk0MzY3MDgzODEy
RDk5Q0MzMDAwNDQyMzQgLyogU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdGOTEyRDk5Q0MzMDAwNDQyMzQg
LyogU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAgKi87IH07CisJCTQzNjcwODM5MTJEOTlDQzMwMDA0
NDIzNCAvKiBTVkdNYXJrZXJMYXlvdXRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdGQTEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHTWFya2Vy
TGF5b3V0SW5mby5oICovOyB9OworCQk0MzY3MDgzQTEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVu
ZGVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MzY3MDdGQjEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgKi87
IH07CisJCTQzNjcwODNCMTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdSZW5kZXJTdXBwb3J0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdGQzEyRDk5
Q0MzMDAwNDQyMzQgLyogU1ZHUmVuZGVyU3VwcG9ydC5oICovOyB9OworCQk0MzY3MDgzQzEyRDk5
Q0MzMDAwNDQyMzQgLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdGRDEyRDk5Q0MzMDAwNDQyMzQgLyog
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgKi87IH07CisJCTQzNjcwODNEMTJEOTlDQzMwMDA0NDIz
NCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDdGRTEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5oICovOyB9OworCQk0MzY3MDgzRTEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3Vy
Y2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQz
NjcwN0ZGMTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdSZXNvdXJjZXMuY3BwICovOyB9OworCQk0MzY3
MDgzRjEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDgwMDEyRDk5Q0MzMDAwNDQyMzQgLyog
U1ZHUmVzb3VyY2VzLmggKi87IH07CisJCTQzNjcwODQwMTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdS
ZXNvdXJjZXNDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MzY3MDgwMTEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzQ2FjaGUuY3Bw
ICovOyB9OworCQk0MzY3MDg0MTEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzQ2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODAy
MTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdSZXNvdXJjZXNDYWNoZS5oICovOyB9OworCQk0MzY3MDg0
MjEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4MDMxMkQ5OUNDMzAw
MDQ0MjM0IC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCAqLzsgfTsKKwkJNDM2NzA4NDMx
MkQ5OUNDMzAwMDQ0MjM0IC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDgwNDEyRDk5Q0MzMDAwNDQy
MzQgLyogU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCAqLzsgfTsKKwkJNDM2NzA4NDQxMkQ5OUND
MzAwMDQ0MjM0IC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDgwNTEyRDk5Q0MzMDAwNDQyMzQgLyog
U1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCAqLzsgfTsKKwkJNDM2NzA4NDUxMkQ5OUNDMzAwMDQ0
MjM0IC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4MDYxMkQ5OUNDMzAwMDQ0MjM0IC8qIFNWR1NoYWRv
d1RyZWVFbGVtZW50cy5oICovOyB9OwogCQk0NDE1MjkyRTBFMUFFOEEwMDBDNEEyRDAgLyogSFRN
TFBsdWdJbkltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDQxNTI5MkMwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk0NDE1MjkyRjBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDE1MjkyRDBF
MUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAgKi87IH07CiAJCTQ0
MUIwNTVDMENENzdBMkQwMDdDMUYxOCAvKiBET01IVE1MRW1iZWRFbGVtZW50UHJpdmF0ZS5oIGlu
IENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDQyOUFBRkIwQ0I4NEU4ODAwNzY0N0M1IC8qIERPTUhUTUxFbWJlZEVsZW1lbnRQcml2YXRl
LmggKi87IH07CkBAIC0xNjU1LDggKzE2ODUsNiBAQAogCQk4NDE5RDJBRDEyMEQ5MkZDMDAxNDFG
OEYgLyogU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MTlEMkFCMTIwRDkyRkMwMDE0MUY4RiAvKiBTVkdQYXRo
Qnl0ZVN0cmVhbVNvdXJjZS5oICovOyB9OwogCQk4NDE5RDJCOTEyMEUwQzc2MDAxNDFGOEYgLyog
U1ZHUGF0aFN0cmluZ0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQxOUQyQjcxMjBFMEM3NjAwMTQxRjhGIC8qIFNWR1BhdGhTdHJpbmdC
dWlsZGVyLmNwcCAqLzsgfTsKIAkJODQxOUQyQkExMjBFMEM3NjAwMTQxRjhGIC8qIFNWR1BhdGhT
dHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NDE5RDJCODEyMEUwQzc2MDAxNDFGOEYgLyogU1ZHUGF0aFN0cmluZ0J1aWxkZXIuaCAq
LzsgfTsKLQkJODQxRkRDMjYxMTc4QzlCRTAwRjhBQzlCIC8qIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
MUZEQzI0MTE3OEM5QkUwMEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgKi87
IH07Ci0JCTg0MUZEQzI3MTE3OEM5QkUwMEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQxRkRD
MjUxMTc4QzlCRTAwRjhBQzlCIC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggKi87IH07CiAJ
CTg0MjI0MTgzMTA3RTc3RjQwMDc2NkE4NyAvKiBKU1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQyMjQxODEx
MDdFNzdGNDAwNzY2QTg3IC8qIEpTU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgKi87IH07CiAJ
CTg0MjI0MTg0MTA3RTc3RjQwMDc2NkE4NyAvKiBKU1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MjI0MTgyMTA3
RTc3RjQwMDc2NkE4NyAvKiBKU1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCAqLzsgfTsKIAkJODQy
MjQxOEMxMDdFNzg2RjAwNzY2QTg3IC8qIERPTVNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MjI0MTg5MTA3RTc4
NkYwMDc2NkE4NyAvKiBET01TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggKi87IH07CkBAIC0xNzIx
LDggKzE3NDksNiBAQAogCQk4NDg1MjI4NjExOTAxNkE3MDA2RURDN0YgLyogRE9NU1ZHVktlcm5F
bGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODQ4NTIyODIxMTkwMTZBNzAwNkVEQzdGIC8qIERPTVNWR1ZLZXJuRWxlbWVudC5tbSAqLzsgfTsK
IAkJODQ4NTIyOEExMTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDg1MjI4NzExOTAxNzND
MDA2RURDN0YgLyogU1ZHVktlcm5FbGVtZW50LmNwcCAqLzsgfTsKIAkJODQ4NTIyOEIxMTkwMTcz
QzAwNkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQ4NTIyODgxMTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZLZXJu
RWxlbWVudC5oICovOyB9OwotCQk4NDk5QTUxNDExNUZCMzMwMDBGNTY2RTMgLyogUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ5OUE1MTIxMTVGQjMzMDAwRjU2NkUzIC8qIFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyLmNwcCAqLzsgfTsKLQkJODQ5OUE1MTUxMTVGQjMzMDAwRjU2NkUzIC8qIFJlbmRlclNWR1Jl
c291cmNlTWFya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NDk5QTUxMzExNUZCMzMwMDBGNTY2RTMgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIu
aCAqLzsgfTsKIAkJODQ5Rjc3NzYwRUZFQzYyMDAwOTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGll
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ5Rjc3
NzUwRUZFQzYyMDAwOTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGllci5oICovOyB9OwogCQk4NEE4
MUYzRDBGQzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRBODFGM0IwRkM3REZGMDAwOTU1MzAwIC8q
IFNvdXJjZUFscGhhLmNwcCAqLzsgfTsKIAkJODRBODFGM0UwRkM3REZGMDAwOTU1MzAwIC8qIFNv
dXJjZUFscGhhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NEE4MUYzQzBGQzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuaCAqLzsgfTsKQEAgLTE3
MzAsOCArMTc1Niw2IEBACiAJCTg0QTgxRjQyMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFw
aGljLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEE4
MUY0MDBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5oICovOyB9OwogCQk4NEI2Qjk3
NzEyMEYxM0U1MDBCOEVGQUYgLyogU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRCNkI5NzUxMjBGMTNFNTAwQjhF
RkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmNwcCAqLzsgfTsKIAkJODRCNkI5NzgxMjBGMTNF
NTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEI2Qjk3NjEyMEYxM0U1MDBCOEVGQUYgLyogU1ZH
UGF0aFNlZ0xpc3RTb3VyY2UuaCAqLzsgfTsKLQkJODRCREExNkIxMTM1OEQyQTAwREJGNjRDIC8q
IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NEJEQTE2OTExMzU4RDJBMDBEQkY2NEMgLyogUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcCAqLzsgfTsKLQkJODRCREExNkMxMTM1OEQyQTAwREJGNjRDIC8q
IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODRCREExNkExMTM1OEQyQTAwREJGNjRDIC8qIFJlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5oICovOyB9OwogCQk4NEM1QjJGQTEyMTZEQzgxMDA4OEI1M0EgLyogU1ZH
UGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NEM1QjJGODEyMTZEQzgxMDA4OEI1M0EgLyogU1ZHUGF0aFRy
YXZlcnNhbFN0YXRlQnVpbGRlci5jcHAgKi87IH07CiAJCTg0QzVCMkZCMTIxNkRDODEwMDg4QjUz
QSAvKiBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEM1QjJGOTEyMTZEQzgxMDA4OEI1M0EgLyogU1ZH
UGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5oICovOyB9OwogCQk4NEM2Nzg0QzEyMTQ4MTQ3MDBB
OTI5MDIgLyogU1ZHUGF0aEJsZW5kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODRDNjc4NEExMjE0ODE0NzAwQTkyOTAyIC8qIFNWR1BhdGhCbGVu
ZGVyLmNwcCAqLzsgfTsKQEAgLTE5ODUsMTIgKzIwMDksNiBAQAogCQk4NTNCRjREQjBBQkI2QjU1
MDA4NjQ3QkIgLyogRE9NTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODUzQkY0RDkwQUJCNkI1NTAwODY0N0JCIC8qIERPTU5vZGUuaCAqLzsgfTsK
IAkJODUzQkY0REMwQUJCNkI1NTAwODY0N0JCIC8qIERPTU5vZGUubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTNCRjREQTBBQkI2QjU1MDA4NjQ3QkIg
LyogRE9NTm9kZS5tbSAqLzsgfTsKIAkJODUzQkY0RUMwQUJCNkVCOTAwODY0N0JCIC8qIERPTU5v
ZGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg1M0JGNEQ5MEFCQjZCNTUwMDg2NDdCQiAvKiBET01Ob2RlLmggKi87IH07Ci0J
CTg1M0NBOUQ2MEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdDb250YWluZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUzQ0E5Q0EwQUVFQzVF
OTAwMjM3MkRDIC8qIFJlbmRlclNWR0NvbnRhaW5lci5jcHAgKi87IH07Ci0JCTg1M0NBOUQ3MEFF
RUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1M0NBOUNCMEFFRUM1RTkwMDIzNzJEQyAvKiBS
ZW5kZXJTVkdDb250YWluZXIuaCAqLzsgfTsKLQkJODUzQ0E5RDgwQUVFQzVFOTAwMjM3MkRDIC8q
IFJlbmRlclNWR0ltYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg1M0NBOUNDMEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdJbWFnZS5jcHAg
Ki87IH07Ci0JCTg1M0NBOUQ5MEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdJbWFnZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUzQ0E5Q0QwQUVF
QzVFOTAwMjM3MkRDIC8qIFJlbmRlclNWR0ltYWdlLmggKi87IH07Ci0JCTg1M0NBOUVDMEFFRUM2
M0MwMDIzNzJEQyAvKiBSZW5kZXJGb3JlaWduT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1M0NBOUVBMEFFRUM2M0MwMDIzNzJEQyAvKiBS
ZW5kZXJGb3JlaWduT2JqZWN0LmNwcCAqLzsgfTsKLQkJODUzQ0E5RUQwQUVFQzYzQzAwMjM3MkRD
IC8qIFJlbmRlckZvcmVpZ25PYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg1M0NBOUVCMEFFRUM2M0MwMDIzNzJEQyAvKiBSZW5kZXJGb3JlaWdu
T2JqZWN0LmggKi87IH07CiAJCTg1NDA3NEZDMEFENkMyMkUwMDYyMEM1NyAvKiBET01TVkdOdW1i
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1NDA3
NEY5MEFENkMyMkUwMDYyMEM1NyAvKiBET01TVkdOdW1iZXIuaCAqLzsgfTsKIAkJODU0MDc0RkQw
QUQ2QzIyRTAwNjIwQzU3IC8qIERPTVNWR1BvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTQwNzRGQTBBRDZDMjJFMDA2MjBDNTcgLyogRE9NU1ZH
UG9pbnQuaCAqLzsgfTsKIAkJODU0MDc0RkUwQUQ2QzIyRTAwNjIwQzU3IC8qIERPTVNWR1JlY3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1NDA3NEZC
MEFENkMyMkUwMDYyMEM1NyAvKiBET01TVkdSZWN0LmggKi87IH07CkBAIC0zMTE4LDggKzMxMzYs
NiBAQAogCQlBNjIyQThGRjEyMkM0NEE2MDBBNzg1QjMgLyogR2VuZXJpY0JpbmRpbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MjJBOEY5MTIyQzQ0
QTYwMEE3ODVCMyAvKiBHZW5lcmljQmluZGluZy5oICovOyB9OwogCQlBNzE4NzYwRTBCMkExMjAx
MDBBMTZFQ0UgLyogRHJhZ0FjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3MTg3NjBEMEIyQTEyMDEwMEExNkVDRSAvKiBEcmFnQWN0aW9ucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTg3
ODkwMEIyRDA0QUMwMEExNkVDRSAvKiBEcmFnQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTg3ODhGMEIyRDA0QUMwMEExNkVD
RSAvKiBEcmFnQ29udHJvbGxlck1hYy5tbSAqLzsgfTsKLQkJQTczNTJDMTkwQjFCQjg5RDAwQTk4
NkQwIC8qIFJlbmRlclNWR0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3MzUyQzE3MEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdCbG9j
ay5jcHAgKi87IH07Ci0JCUE3MzUyQzFBMEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdCbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTczNTJD
MTgwQjFCQjg5RDAwQTk4NkQwIC8qIFJlbmRlclNWR0Jsb2NrLmggKi87IH07CiAJCUE3NUU0OTc2
MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU0OTc0MTA3NTJBQ0IwMEM5Qjg5
NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzVFNDk3NzEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3NUU0OTc1MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwICovOyB9OwogCQlBNzVFOEI4ODBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzVFOEI4MDBF
MURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5jcHAgKi87IH07CkBAIC0zMTYzLDEwICszMTc5LDYg
QEAKIAkJQTdEQkY4REUxMjc2OTE5QzAwNkI2MDA4IC8qIFRleHRDaGVja2luZ0hlbHBlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEQkY4REMxMjc2
OTE5QzAwNkI2MDA4IC8qIFRleHRDaGVja2luZ0hlbHBlci5oICovOyB9OwogCQlBN0YzMzhBMzEx
QzBFRkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0YzMzhBMTExQzBFRkNBMDBBMzIwQTcgLyogU2hh
ZG93RWxlbWVudC5jcHAgKi87IH07CiAJCUE3RjMzOEE0MTFDMEVGQ0EwMEEzMjBBNyAvKiBTaGFk
b3dFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0YzMzhBMjExQzBFRkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5oICovOyB9OwotCQlB
ODA5RjE0NzBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODA5RjE0NTBCNzM3OTNB
MDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmggKi87IH07Ci0JCUE4MDlGMTQ4MEI3
Mzc5M0IwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxNDYwQjczNzkzQTAwMkU0RDdG
IC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgKi87IH07Ci0JCUE4MDlGMUFBMEI3MzdGQjYw
MDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MDlGMUE4MEI3MzdGQjYwMDJFNEQ3RiAvKiBS
ZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCAqLzsgfTsKLQkJQTgwOUYxQUIwQjczN0ZCNjAwMkU0
RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODA5RjFBOTBCNzM3RkI2MDAyRTREN0YgLyogUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCAqLzsgfTsKIAkJQTgwQTM4RkUwRTUwQ0M4MjAwQTI1
RUJDIC8qIFBhdHRlcm5DRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODBBMzhGRDBFNTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLzsg
fTsKIAkJQTgwRDY3MDgwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZUNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBODBENjcwNzBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlQ0cuaCAqLzsgfTsKIAkJQTgwRTZDRTQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBF
NkNCQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmNwcCAqLzsgfTsKQEAgLTM1NDks
OCArMzU2MSw2IEBACiAJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODk5NDMy
NzBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwICovOyB9OwogCQlBODlDQ0M1MjBG
NDRFOTgxMDBCNURBMTAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg5Q0NDNTAwRjQ0RTk4MTAw
QjVEQTEwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCAqLzsgfTsKIAkJQTg5Q0ND
NTMwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODlDQ0M1MTBGNDRFOTgx
MDBCNURBMTAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuaCAqLzsgfTsKLQkJQThBOTA5
QUMwQ0JDRDZCNTAwMjlCODA3IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTkwOUFBMENC
Q0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmggKi87IH07
Ci0JCUE4QTkwOUFEMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29u
dGFpbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTkwOUFCMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFp
bmVyLmNwcCAqLzsgfTsKIAkJQThCQzA0OTIxMjE0RjY5NjAwQjVGMTIyIC8qIEhUTUxFbnRpdHlU
YWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OEJDMDQ5MTEyMTRGNjk2MDBCNUYxMjIgLyogSFRNTEVudGl0eVRhYmxlLmNwcCAqLzsgfTsKIAkJ
QThDMjI4MEUxMUQ0QTU5NzAwRDVBN0QzIC8qIERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzIyODBEMTFENEE1OTcwMEQ1
QTdEMyAvKiBEb2N1bWVudFBhcnNlci5jcHAgKi87IH07CiAJCUE4QzIyOEExMTFENTcyMkUwMEQ1
QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMyMjg5RjExRDU3MjJFMDBENUE3RDMgLyogRGVj
b2RlZERhdGFEb2N1bWVudFBhcnNlci5oICovOyB9OwpAQCAtMzk1NiwxMCArMzk2Niw2IEBACiAJ
CUE4RjQ2QjdDMENCMjBBOUQwMDNBOTY3MCAvKiBET01TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQu
aCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg1QzlBMkZCMEFEN0U5NDIwMEZCRkYxRSAvKiBET01TVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQuaCAqLzsgfTsKIAkJQThGNDZCN0QwQ0IyMEE5RDAwM0E5NjcwIC8qIERPTVNWR1JhZGlh
bEdyYWRpZW50RWxlbWVudC5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODU5RDYyNzkwQUQ4ODhFRTAwMDEyOTk1IC8qIERPTVNW
R1JhZGlhbEdyYWRpZW50RWxlbWVudC5oICovOyB9OwogCQlBOEY0NkI4MTBDQjIwQTlEMDAzQTk2
NzAgLyogRE9NU1ZHU3RyaW5nTGlzdC5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVENzlBRDIwQUNBMTdFQjAwRjAyRkM1IC8q
IERPTVNWR1N0cmluZ0xpc3QuaCAqLzsgfTsKLQkJQThGNEZCOTQwQzE2OUU3QjAwMkFGRUQ1IC8q
IFNWR1JlbmRlclN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4RjRGQjkzMEMxNjlFN0IwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0Lmgg
Ki87IH07Ci0JCUE4RjRGQjk2MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjRGQjk1
MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmNwcCAqLzsgfTsKLQkJQThGNUMw
QjgwRjkyODVBQzAwOThFMDZCIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEY1QzBCNjBGOTI4NUFDMDA5OEUw
NkIgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLzsgfTsKLQkJQThGNUMwQjkwRjkyODVBQzAw
OThFMDZCIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RjVDMEI3MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5k
ZXJTVkdNb2RlbE9iamVjdC5jcHAgKi87IH07CiAJCUE4RkE2RTVEMEU0Q0ZERUQwMEQ1Q0Y0OSAv
KiBQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4RkE2RTVFMEU0Q0ZERUQwMEQ1Q0Y0
OSAvKiBQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLzsgfTsKIAkJ
QTlDNkU0RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEUxMEQ3NDVFMDUwMDY0NDJF
OSAvKiBET01NaW1lVHlwZS5jcHAgKi87IH07CkBAIC0zOTkwLDggKzM5OTYsNiBAQAogCQlBOUQy
NDgwOTBENzU3RTdEMDBGREY5NTkgLyogSlNET01NaW1lVHlwZUFycmF5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUQyNDgwNTBENzU3RTdEMDBGREY5
NTkgLyogSlNET01NaW1lVHlwZUFycmF5LmggKi87IH07CiAJCUFBMjFFQ0NBMEFCRjBGQkEwMDJC
ODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBMDk3OEVEMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJz
b3JJbWFnZVZhbHVlLmNwcCAqLzsgfTsKIAkJQUEyMUVDQ0QwQUJGMEZDNjAwMkI4MzRDIC8qIENT
U0N1cnNvckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFBMDk3OEVFMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJbWFnZVZhbHVl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQUEz
MUI1QjQwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRlclNWR1Jvb3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUEzMUI1QjIwQzFERkQxMDAwQUU3MDgz
IC8qIFJlbmRlclNWR1Jvb3QuY3BwICovOyB9OwotCQlBQTMxQjVCNTBDMURGRDEwMDBBRTcwODMg
LyogUmVuZGVyU1ZHUm9vdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQUEzMUI1QjMwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRlclNWR1Jvb3QuaCAqLzsg
fTsKIAkJQUE0QzNBNzYwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTRDM0E3NDBCMkIxNjc5
MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJQUE0QzNBNzcwQjJCMTY3OTAw
MjMzNEEyIC8qIFN0eWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUE0QzNBNzUwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5o
ICovOyB9OwogCQlBQjAxNERFMzBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEFCMDE0REUxMEU2ODlBNDMwMEUxMDQ0NSAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3Bw
ICovOyB9OwpAQCAtNDQzNywxNCArNDQ0MSwxMCBAQAogCQlCMkNCOTI2MjBCNUJEQTAyMDA5QkFB
NzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQjkyNUUwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0Vs
ZW1lbnRJbnN0YW5jZS5tbSAqLzsgfTsKIAkJQjJDQjkyNjMwQjVCREEwMjAwOUJBQTc4IC8qIERP
TVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyQ0I5MjVGMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50
SW5zdGFuY2VMaXN0LmggKi87IH07CiAJCUIyQ0I5MjY0MEI1QkRBMDIwMDlCQUE3OCAvKiBET01T
VkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJDQjkyNjAwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJ
bnN0YW5jZUxpc3QubW0gKi87IH07Ci0JCUIyQ0NFQzQ3MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5k
ZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMkNDRUM0NTBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmll
d3BvcnRDb250YWluZXIuY3BwICovOyB9OwotCQlCMkNDRUM0ODBDNkNBOUYxMDA2QTU0MjQgLyog
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0NFQzQ2MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdW
aWV3cG9ydENvbnRhaW5lci5oICovOyB9OwogCQlCMkUyN0M5RjBCMEYyQjA5MDBGMTdDN0IgLyog
RmxvYXRQb2ludDNELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwICovOyB9
OwogCQlCMkUyN0NBMDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkUyN0M5RTBCMEYyQjA5MDBG
MTdDN0IgLyogRmxvYXRQb2ludDNELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQjJFNEVDOTcwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkU0
RUM5NDBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmNwcCAqLzsgfTsKIAkJQjJFNEVD
OTgwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFNEVDOTUwRDAwQzIyQjAwNDMyNjQzIC8qIFNW
R1pvb21FdmVudC5oICovOyB9OwotCQlCMkVCREM5QzBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMkVCREM5QTBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHAgKi87IH07Ci0JCUIyRUJEQzlEMEFGNzdFMzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNU
ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkVC
REM5QjBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5oICovOyB9OwogCQlC
MkVEOTc3MTBCMUY1NUNFMDAyNTdEMEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFRDk3NzAwQjFGNTVDRTAw
MjU3RDBGIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCAqLzsgfTsKIAkJQjJGMzRGRTYwRTgyRjgx
NDAwRjYyN0NEIC8qIEROUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJGMzRGRTUwRTgyRjgxNDAwRjYyN0NEIC8qIEROUy5oICovOyB9OwogCQlCMkYz
NEZFOTBFODJGODI3MDBGNjI3Q0QgLyogRE5TQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJGMzRGRTgwRTgyRjgyNzAwRjYyN0NEIC8qIERO
U0NGTmV0LmNwcCAqLzsgfTsKQEAgLTYzNDcsNyArNjM0Nyw2IEBACiAJCTA4MDRCRjZDMEVFMDlD
M0IwMDA2QzAwMCAvKiBXTUxEb0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV01MRG9FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDgwNEJGNkQwRUUwOUMzQjAwMDZDMDAwIC8qIFdNTERvRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxEb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDgwNkU1NzkxMjg5MzA0NTAwN0NFRDMyIC8qIFNWR01hdHJpeC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdNYXRyaXguaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMDgwODIzNzIxMTc5ODdDMTAwMjQxREU4IC8qIFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MEFF
QzdEMEVEODcwOEEwMERGNENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxJbnRyaW5zaWNFdmVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MEFFQzdFMEVEODcwOEIwMERGNENDRSAvKiBXTUxJbnRy
aW5zaWNFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxJbnRyaW5z
aWNFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODBBRUM3RjBFRDg3MDhC
MDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzgxLDEwICs2MzgwLDYgQEAKIAkJMDgyM0QxNTgx
MjdBRDZBQzAwMEVCQzk1IC8qIFNWR0FuaW1hdGVkSW50ZWdlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZEludGVnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDgyNTA5MzgxMjhCRDREODAwRTJFRDhFIC8qIFNWR0FuaW1hdGVkVHJhbnNm
b3JtTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFRy
YW5zZm9ybUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgyREU0MkMxMjky
NjIxNjAwRDkyM0RGIC8qIFNWR1BhdGhTZWdXaXRoQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdQYXRoU2VnV2l0aENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMDgzMTkyQTcxMTJCNDMwNTAwODNDM0I5IC8qIFJlbmRlclNWR1Jlc291
cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4MzE5MkE4MTEyQjQzMDUwMDgzQzNC
OSAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTA4MzE5MkE5MTEyQjQzMDUwMDgzQzNCOSAvKiBSZW5kZXJTVkdSZXNv
dXJjZU1hc2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODM4NUZGNTEw
RjAxODYwMDBCRkUwN0IgLyogU1ZHTWFya2VyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTVkdNYXJrZXJEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA4M0RBRUEyMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJv
bE11bHRpTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUEzMEYw
MUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBNDBGMDFBN0ZCMDAzNDI3NTQgLyogUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC02Mzk2LDEwICs2MzkxLDYgQEAKIAkJMDg0Q0U1QzgwRjI3REFEQzAw
RTYyNDBFIC8qIFdNTE9wdEdyb3VwRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXTUxPcHRHcm91cEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDg0Q0U1QzkwRjI3REFEQzAwRTYyNDBFIC8qIFdNTE9wdGlvbkVsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MT3B0aW9uRWxlbWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NENFNUNBMEYyN0RBREMwMEU2MjQwRSAvKiBX
TUxPcHRpb25FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTE9w
dGlvbkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg0RDBFMzgxMUY1
ODE2MTAwMDgxRTFBIC8qIFNWR1Jlc291cmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdSZXNvdXJjZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwODREMEUzOTExRjU4MTYxMDAwODFFMUEgLyogU1ZHUmVzb3VyY2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Jlc291cmNlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwODREMEUzQTExRjU4MTYxMDAwODFFMUEgLyogU1ZHUmVzb3VyY2VzQ2Fj
aGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2Vz
Q2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODREMEUzQjExRjU4MTYx
MDAwODFFMUEgLyogU1ZHUmVzb3VyY2VzQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUmVzb3VyY2VzQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDg0REI1OUExMjgwMDhDQzAwMkE2RDY0IC8qIFNWR0FuaW1hdGVkU3RyaW5nLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkU3RyaW5nLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NERCQTlEMEVEMzlEMzUwMDM4QzIyNiAvKiBXTUxWYXJp
YWJsZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MVmFyaWFi
bGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg0REJBOUUwRUQzOUQzNjAw
MzhDMjI2IC8qIFdNTFZhcmlhYmxlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXTUxWYXJpYWJsZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0MjIsMzAg
KzY0MTMsMjIgQEAKIAkJMDg1NEIwMTExMjU1RTRFNjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVC
b3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUm9vdElubGluZUJveC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODU0QjAxMjEyNTVFNEU2MDBCOUNERDAg
LyogU1ZHVGV4dFF1ZXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR1RleHRRdWVyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NTRCMDEz
MTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdUZXh0UXVlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHVGV4dFF1ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTA4NTYzQkIyMTE3ODYxNzcwMDEyQjU3OCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg1NjNCQjMxMTc4NjE3
NzAwMTJCNTc4IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMDg1NjNCQ0YxMTc4NjVGNTAwMTJCNTc4IC8qIFJlbmRlclNWR1Jl
c291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNW
R1Jlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1Nzk3MDgxMjc4
Mzk0QzAwQThFQzVGIC8qIFNWR0FuaW1hdGVkQm9vbGVhbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZEJvb2xlYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDg1OTFBQTQwRjA4NUM0RTAwOUJBQ0IxIC8qIElucHV0RWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnB1dEVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDg1QTE1OTIxMjg5QThERDAwMjcxMEUzIC8qIFNWR0FuaW1hdGVk
VHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1QUZEQzYwRjI5NzczNTAwNjFGMkIzIC8qIFdNTEZv
cm1Db250cm9sRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwODVBRkRDNzBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNvbnRyb2xFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEZvcm1Db250cm9sRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODVCMDVDMDExRkFFMTZDMDA0RDY1RjYgLyog
U1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwODVCMDVDMTExRkFFMTZDMDA0RDY1RjYgLyogU1ZHUmVzb3VyY2VzQ3ljbGVT
b2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVzb3VyY2VzQ3lj
bGVTb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1QjkyQjgwRUZERTcz
RDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGb3JtRGF0YUJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwODVCOTJCOTBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1EYXRhQnVpbGRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODY0MUQ0NTEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwODY0MUQ0NjEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VS
ZXNvdXJjZVN0eWxlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDg2NUNDRTQwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BFbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTE5vb3BFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2NUNDRTUwRURERjUxQjAwREY5RUMzIC8qIFdNTE5v
b3BFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTE5vb3BFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4NkE0MDA1MTFGNkQ2QjcwMDJD
RUM1MyAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NzAwQkU2MEYwODZDNTMwMDkxOTQxOSAvKiBJbnB1
dEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXRF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg3MjgxNTEwRjI2QjlC
NjAwQUZDNTk2IC8qIE9wdGlvbkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT3B0aW9uRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA4NzI4MTUyMEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDg3MjgxNTMwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkdyb3VwRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25Hcm91
cEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODcyODE1NDBGMjZC
OUI2MDBBRkM1OTYgLyogT3B0aW9uR3JvdXBFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE9wdGlvbkdyb3VwRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwODczNUZCNjEwRTkxMjMyMDA2RDZGQUQgLyogU1ZHTWFya2VyTGF5b3V0SW5mby5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdNYXJrZXJMYXlvdXRJ
bmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg3MzVGQjcxMEU5MTIzMjAw
NkQ2RkFEIC8qIFNWR01hcmtlckxheW91dEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHTWFya2VyTGF5b3V0SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwODc0NEJBOTBFREI3RDg2MDA0QzlFNjMgLyogV01MT25FdmVudEVsZW1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MT25FdmVudEVsZW1lbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODc0NEJBRDBFREI3RDkyMDA0QzlFNjMg
LyogV01MT25FdmVudEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V01MT25FdmVudEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg3Qjg0
OTUxMjcyQ0VDNzAwQTE0NDE3IC8qIFNWR0FuaW1hdGVkQW5nbGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRBbmdsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNjQ5MywyMCArNjQ3NiwxMCBAQAogCQkwOEE0OEE2RDBFODZDRjZEMDBFMjI1
REQgLyogSlNTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwOEIzNUIxMjEyN0I2QTdDMDA1MzE0REQgLyogU1ZHQW5p
bWF0ZWROdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0
ZWROdW1iZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhCMzVCMTYxMjdCNkE4
ODAwNTMxNEREIC8qIFNWR0FuaW1hdGVkTnVtYmVyTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZE51bWJlckxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMDhDMzRBRjExMTc5QzA1NjAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4
QzM0QUYyMTE3OUMwNTcwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDhDMzRBRjMxMTc5QzA1NzAwMkQ3NDU2
IC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4QzM0QUY0MTE3OUMwNTcwMDJENzQ1NiAv
KiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDhDMzRBRkIxMTc5QzA3MjAwMkQ3NDU2IC8qIFJlbmRlclNW
R1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTA4QzM0QUZDMTE3OUMwNzIwMDJENzQ1NiAvKiBSZW5kZXJTVkdS
ZXNvdXJjZVJhZGlhbEdyYWRpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMDhDNDZCNjcxMjEyRjE1RDAwMTFBRjQwIC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHSW1hZ2VCdWZmZXJU
b29scy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4QzQ2QjY4MTIxMkYxNUQw
MDExQUY0MCAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR0ltYWdlQnVmZmVyVG9vbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDhDNEM1MTQwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdlRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxJbWFnZUVsZW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEM0QzUxNTBFRjE5QTQwMDBFNDg0MEYgLyog
V01MSW1hZ2VFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTElt
YWdlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEM0QzUxNjBFRjE5
QTQwMDBFNDg0MEYgLyogV01MSW1hZ2VMb2FkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV01MSW1hZ2VMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwOEM0QzUxNzBFRjE5QTQwMDBFNDg0MEYgLyogV01MSW1hZ2VMb2FkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MSW1hZ2VMb2FkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDhDNkE3QTkxMTdERkJBQjAwRkVBMUEyIC8qIFJlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwOEM2QTdBQTExN0RGQkFCMDBGRUExQTIgLyogUmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEM3MTM2
RDEyODk1NkEzMDAxQjEwN0UgLyogU1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlU
ZWFyT2ZmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4Qzg1OUJGMTI3NDU3NTMw
MEE1NzI4RCAvKiBTVkdBbmltYXRlZFJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHQW5pbWF0ZWRSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4
QzkyNTE3MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsdGVyRWZmZWN0LmNwcDsgcGF0aCA9IGZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY1MTUsMTAg
KzY0ODgsNiBAQAogCQkwOENENjFCODBFRDM5MjlDMDAyRERGNTEgLyogV01MVGFza0VsZW1lbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MVGFza0VsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOENENjFCOTBFRDM5MjlDMDAyRERG
NTEgLyogV01MVGFza0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V01MVGFza0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhENDZDRTIx
MjdBRDVGQzAwODk2OTRCIC8qIFNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwOERBQjlCODExMDNEOUE1MDAzRTdBQkEgLyogUmVuZGVyU1ZH
U2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwOERBQjlCOTExMDNEOUE1MDAzRTdBQkEgLyogUmVuZGVyU1ZH
U2hhZG93VHJlZVJvb3RDb250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMDhEQUI5QzAxMTAzRDlDMTAwM0U3QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVt
ZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdTaGFkb3dU
cmVlRWxlbWVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwOERBQjlDMTEx
MDNEOUMxMDAzRTdBQkEgLyogU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1NoYWRvd1RyZWVFbGVtZW50cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwOEUxOTI1MTBFREUwQzM5MDA4N0I3ODAgLyogV01MRXJyb3JIYW5k
bGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxFcnJvckhh
bmRsaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhFMTkyNTIwRURFMEMz
QTAwODdCNzgwIC8qIFdNTEVycm9ySGFuZGxpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV01MRXJyb3JIYW5kbGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwOEU0RkU0NTBFMkJENDE0MDBGNENBRTAgLyogSlNTVkdMZW5ndGhDdXN0b20uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdMZW5ndGhDdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjY2OCw4ICs2NjM3LDYgQEAKIAkJMTkyMTMy
NzExMUMwRTZCQjAwNDU2MjM4IC8qIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTkyMTMyNzIxMUMwRTZCQjAw
NDU2MjM4IC8qIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE5MjEzMjczMTFDMEU2QkIwMDQ1NjIzOCAvKiBTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxOTQyM0I0
RTEyMzRFODZCMDBEMUVFOUUgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXJQcmltaXRpdmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxOTQyM0I0
RjEyMzRFODZCMDBEMUVFOUUgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTlCRkY2NDYxMUMwRjJB
QzAwQjhDMDREIC8qIERPTVNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE5QkZGNjQ3MTFDMEYyQUMwMEI4QzA0RCAvKiBE
T01TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IERPTVNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxOUJGRjY0ODExQzBGMkFDMDBCOEMwNEQgLyogRE9NU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudEludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzAxLDYgKzcyNjgsNjkgQEAKIAkJNDFGMUQyMUQw
RUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRDYWNoZWRGcmFtZURhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDFGMUQyMUUwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hl
ZEZyYW1lRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3Jp
cHRDYWNoZWRGcmFtZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUY1
ODRDNjEwNDY1MkNCMDA5Q0FBNjQgLyogSlNNZXNzYWdlUG9ydEN1c3RvbS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU01lc3NhZ2VQb3J0Q3VzdG9tLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQzNjcwN0M4MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJGb3Jl
aWduT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRl
ckZvcmVpZ25PYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDdD
OTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJGb3JlaWduT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQzNjcwN0NBMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdCbG9j
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdCbG9j
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwN0NCMTJEOTlDQzMwMDA0
NDIzNCAvKiBSZW5kZXJTVkdCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJTVkdCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDdD
QzEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0NvbnRhaW5lci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwN0NEMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJT
VkdDb250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZH
Q29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwN0NFMTJEOTlD
QzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA3Q0YxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNW
R0dyYWRpZW50U3RvcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJT
VkdHcmFkaWVudFN0b3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA3RDAx
MkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDdEMTEyRDk5Q0MzMDAwNDQyMzQg
LyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MzY3MDdEMjEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1hZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHSW1hZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDdEMzEyRDk5Q0MzMDAwNDQyMzQgLyog
UmVuZGVyU1ZHSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVy
U1ZHSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA3RDQxMkQ5OUND
MzAwMDQ0MjM0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA3RDUxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR01v
ZGVsT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR01v
ZGVsT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwN0Q2MTJEOTlD
QzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQzNjcwN0Q3MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJj
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDdEODEyRDk5Q0MzMDAwNDQyMzQg
LyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQzNjcwN0Q5MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwN0RB
MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwN0RCMTJEOTlDQzMwMDA0
NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0MzY3MDdEQzEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MzY3MDdERDEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA3REUxMkQ5OUNDMzAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA3REYxMkQ5OUNDMzAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwN0UwMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MzY3MDdFMTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwN0UyMTJEOTlD
QzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3Jh
ZGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDdFMzEyRDk5Q0Mz
MDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwN0U0MTJEOTlDQzMwMDA0NDIzNCAv
KiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQzNjcwN0U1MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNv
dXJjZU1hcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDdFNjEyRDk5
Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDdFNzEyRDk5Q0MzMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDM2NzA3RTgxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDdFOTEyRDk5Q0Mz
MDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0MzY3MDdFQTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVz
b3VyY2VSYWRpYWxHcmFkaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDM2NzA3RUIxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291
cmNlUmFkaWFsR3JhZGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0MzY3MDdFQzEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcw
N0VEMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwN0VFMTJEOTlDQzMwMDA0NDIz
NCAvKiBSZW5kZXJTVkdSb290LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbmRlclNWR1Jvb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3
MDdFRjEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSb290Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQzNjcwN0YwMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdTaGFkb3dUcmVlUm9v
dENvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQzNjcwN0YxMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdTaGFkb3dUcmVlUm9v
dENvbnRhaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdT
aGFkb3dUcmVlUm9vdENvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MzY3MDdGMjEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5l
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdUcmFu
c2Zvcm1hYmxlQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2
NzA3RjMxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDdGNDEyRDk5
Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDdGNTEyRDk5Q0MzMDAwNDQyMzQg
LyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDM2NzA3RjYxMkQ5OUNDMzAwMDQ0MjM0IC8qIFNWR0ltYWdlQnVmZmVyVG9v
bHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHSW1hZ2VCdWZm
ZXJUb29scy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwN0Y3MTJEOTlD
QzMwMDA0NDIzNCAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0ltYWdlQnVmZmVyVG9vbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDM2NzA3RjgxMkQ5OUNDMzAwMDQ0MjM0IC8qIFNWR01hcmtlckRhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTWFya2VyRGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0MzY3MDdGOTEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHTWFya2Vy
TGF5b3V0SW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdN
YXJrZXJMYXlvdXRJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA3
RkExMkQ5OUNDMzAwMDQ0MjM0IC8qIFNWR01hcmtlckxheW91dEluZm8uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTWFya2VyTGF5b3V0SW5mby5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0MzY3MDdGQjEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVuZGVyU3Vw
cG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSZW5kZXJT
dXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA3RkMxMkQ5OUND
MzAwMDQ0MjM0IC8qIFNWR1JlbmRlclN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUmVuZGVyU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0MzY3MDdGRDEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA3RkUxMkQ5OUNDMzAwMDQ0MjM0
IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHUmVuZGVyVHJlZUFzVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MzY3MDdGRjEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1Jlc291cmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQzNjcwODAwMTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdSZXNvdXJjZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVzb3VyY2VzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwODAxMTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdS
ZXNvdXJjZXNDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdSZXNvdXJjZXNDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcw
ODAyMTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdSZXNvdXJjZXNDYWNoZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdSZXNvdXJjZXNDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0MzY3MDgwMzEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzQ3lj
bGVTb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVz
b3VyY2VzQ3ljbGVTb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3
MDgwNDEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4MDUxMkQ5OUNDMzAwMDQ0MjM0IC8qIFNW
R1NoYWRvd1RyZWVFbGVtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0MzY3MDgwNjEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1NoYWRvd1RyZWVFbGVtZW50cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyQzBFMUFFOEEwMDBDNEEyRDAg
LyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ0MTUyOTJEMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDI5QUFGQjBDQjg0RTg4
MDA3NjQ3QzUgLyogRE9NSFRNTEVtYmVkRWxlbWVudFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERPTUhUTUxFbWJlZEVsZW1lbnRQcml2YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDYxLDggKzgwOTEsNiBAQAogCQk4NDE5RDJBQjEyMEQ5
MkZDMDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODQxOUQyQjcxMjBFMEM3NjAwMTQxRjhGIC8qIFNWR1BhdGhTdHJp
bmdCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1Bh
dGhTdHJpbmdCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQxOUQy
QjgxMjBFMEM3NjAwMTQxRjhGIC8qIFNWR1BhdGhTdHJpbmdCdWlsZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdCdWlsZGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTg0MUZEQzI0MTE3OEM5QkUwMEY4QUM5QiAvKiBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTg0MUZEQzI1MTE3OEM5QkUwMEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDIyNDE4MTEwN0U3N0Y0MDA3NjZBODcg
LyogSlNTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg0MjI0MTgyMTA3RTc3RjQwMDc2NkE4NyAvKiBKU1NWR0ZFTW9ycGhv
bG9neUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdGRU1v
cnBob2xvZ3lFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MjI0MTg5
MTA3RTc4NkYwMDc2NkE4NyAvKiBET01TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxMjksOCArODE1Nyw2IEBACiAJCTg0ODUyMjg3
MTE5MDE3M0MwMDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVktlcm5FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODQ4NTIyODgxMTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdWS2VybkVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ4NTIyODkxMTkwMTczQzAwNkVEQzdGIC8q
IFNWR1ZLZXJuRWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHVktlcm5FbGVt
ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ5OUE1MTIxMTVGQjMzMDAw
RjU2NkUzIC8qIFJlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ5OUE1MTMxMTVGQjMzMDAwRjU2NkUzIC8qIFJlbmRlclNW
R1Jlc291cmNlTWFya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clNWR1Jlc291cmNlTWFya2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0OUY3
Nzc1MEVGRUM2MjAwMDkwODQ5RCAvKiBTdHJva2VTdHlsZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ryb2tlU3R5bGVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg0QTgxRjNCMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTb3VyY2VBbHBoYS5jcHA7
IHBhdGggPSBmaWx0ZXJzL1NvdXJjZUFscGhhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODRBODFGM0MwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNvdXJjZUFscGhhLmg7IHBhdGggPSBmaWx0ZXJzL1Nv
dXJjZUFscGhhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTQxLDggKzgxNjcs
NiBAQAogCQk4NEIyQjI0RjA1NkJGMTVGMDBEMkI3NzEgLyogU1NMS2V5R2VuZXJhdG9yTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gU1NMS2V5R2VuZXJhdG9yTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJODRCNkI5NzUxMjBGMTNFNTAwQjhFRkFGIC8qIFNW
R1BhdGhTZWdMaXN0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNWR1BhdGhTZWdMaXN0U291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTZWdMaXN0U291cmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0QkRBMTY5MTEzNThEMkEwMERCRjY0QyAvKiBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJODRCREExNkExMTM1OEQyQTAwREJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODRDNUIyRjgxMjE2
REM4MTAwODhCNTNBIC8qIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0QzVCMkY5MTIxNkRDODEwMDg4
QjUzQSAvKiBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODRDNjc4NEExMjE0ODE0NzAwQTkyOTAyIC8qIFNWR1BhdGhC
bGVuZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhC
bGVuZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgzOTEsMTIgKzg0MTUs
NiBAQAogCQk4NTM4RjA4NDBBRDcyQ0I2MDA2QTgxRDEgLyogRE9NUmFuZ2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVJhbmdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NTNCRjREOTBBQkI2QjU1MDA4NjQ3QkIgLyogRE9NTm9kZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NTNCRjREQTBBQkI2QjU1MDA4NjQ3QkIgLyogRE9NTm9kZS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01Ob2RlLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk4NTNDQTlDQTBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJTVkdDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NTNDQTlD
QjBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdDb250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJODUzQ0E5Q0MwQUVFQzVFOTAwMjM3MkRDIC8qIFJlbmRlclNWR0ltYWdl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdJbWFn
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg1M0NBOUNEMEFFRUM1RTkwMDIz
NzJEQyAvKiBSZW5kZXJTVkdJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyU1ZHSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODUzQ0E5
RUEwQUVFQzYzQzAwMjM3MkRDIC8qIFJlbmRlckZvcmVpZ25PYmplY3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckZvcmVpZ25PYmplY3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NTNDQTlFQjBBRUVDNjNDMDAyMzcyREMgLyogUmVu
ZGVyRm9yZWlnbk9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyRm9yZWlnbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTQwNzRG
OTBBRDZDMjJFMDA2MjBDNTcgLyogRE9NU1ZHTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01TVkdOdW1iZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODU0MDc0RkEwQUQ2QzIyRTAwNjIwQzU3IC8qIERPTVNWR1BvaW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdQb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NTQwNzRGQjBBRDZDMjJFMDA2MjBDNTcgLyogRE9NU1ZHUmVjdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHUmVjdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtOTQ3MSw4ICs5NDg5LDYgQEAKIAkJQTcxODc2MEQwQjJBMTIwMTAw
QTE2RUNFIC8qIERyYWdBY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERyYWdBY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTg3ODhGMEIy
RDA0QUMwMEExNkVDRSAvKiBEcmFnQ29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzFBNzBDOTExQUZCMDIwMDA5ODlENkQgLyogSFRNTE1ldGVyRWxl
bWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSFRNTE1ldGVyRWxlbWVudC5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3MzUyQzE3MEIxQkI4OUQwMEE5ODZEMCAvKiBS
ZW5kZXJTVkdCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyU1ZHQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzM1MkMx
ODBCMUJCODlEMDBBOTg2RDAgLyogUmVuZGVyU1ZHQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3NUU0OTc0MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VyaWFsaXplZFNjcmlwdFZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NUU0OTc1MTA3NTJBQ0IwMEM5Qjg5
NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTc1RThCODAwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRkVCbGVuZC5jcHA7IHBhdGggPSBmaWx0
ZXJzL0ZFQmxlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTUxOCwxMCAr
OTUzNCw2IEBACiAJCUE3REJGOERDMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxw
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENoZWNraW5nSGVscGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RjMzOEExMTFDMEVGQ0EwMEEzMjBB
NyAvKiBTaGFkb3dFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNoYWRvd0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0Yz
MzhBMjExQzBFRkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTaGFkb3dFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE4MDlGMTQ1MEI3Mzc5M0EwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3Au
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHR3JhZGllbnRTdG9w
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4MDlGMTQ2MEI3Mzc5M0EwMDJFNEQ3
RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTgwOUYxQTgwQjczN0ZCNjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNv
bnRhaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdIaWRk
ZW5Db250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTgwOUYxQTkwQjcz
N0ZCNjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBBMzhGRDBFNTBDQzgyMDBBMjVFQkMgLyog
UGF0dGVybkNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhdHRl
cm5DRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MEQ2NzA3MEU5RTlERUIw
MEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBFNkNCQTBBMTk4OUNBMDA3RkI4QzUg
LyogQ1NTVmFsdWVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDU1NWYWx1ZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTc3MCw4
ICs5NzgyLDYgQEAKIAkJQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg5Q0NDNTAwRjQ0RTk4MTAwQjVEQTEwIC8q
IFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTg5Q0NDNTEwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VOb2Rl
V2l0aFNwYW5Db21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGxh
Y2VOb2RlV2l0aFNwYW5Db21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4
QTkwOUFBMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1RyYW5zZm9ybWFi
bGVDb250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBOTA5QUIwQ0JD
RDZCNTAwMjlCODA3IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNv
bnRhaW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QkMwNDkxMTIxNEY2
OTYwMEI1RjEyMiAvKiBIVE1MRW50aXR5VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSFRNTEVudGl0eVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQThDMjI4MEQxMUQ0QTU5NzAwRDVBN0QzIC8qIERvY3VtZW50UGFyc2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50UGFyc2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDMjI4OUYxMUQ1NzIyRTAwRDVBN0QzIC8q
IERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTAwNTMsMTAgKzEwMDYzLDYgQEAKIAkJQThFQTgwMDQwQTE5NTE2RTAwQThFRjVG
IC8qIFN0eWxlU2hlZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxl
U2hlZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThFQTgwMDUwQTE5NTE2RTAw
QThFRjVGIC8qIFN0eWxlU2hlZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN0eWxlU2hlZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEVB
ODAwNjBBMTk1MTZFMDBBOEVGNUYgLyogTWVkaWFMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNZWRpYUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QThGNEZCOTMwQzE2OUU3QjAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVuZGVyU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBOEY0RkI5NTBDMTY5RTg1MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3Vw
cG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSZW5kZXJT
dXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThGNUMwQjYwRjkyODVB
QzAwOThFMDZCIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclNWR01vZGVsT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE4RjVDMEI3MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5kZXJTVkdNb2RlbE9iamVj
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4RkE2RTVCMEU0Q0ZE
RUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThGQTZFNUMwRTRDRkRF
RDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUGF0dGVybi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE5QzZFNEUx
MEQ3NDVFMDUwMDY0NDJFOSAvKiBET01NaW1lVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRE9NTWltZVR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTAwOTIsOCArMTAwOTgsNiBAQAogCQlBOUQyNDgwNTBENzU3RTdEMDBGREY5NTkg
LyogSlNET01NaW1lVHlwZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0RPTU1pbWVUeXBlQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUEw
OTc4RUQwQUJBQTZFMTAwODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0N1cnNvckltYWdlVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTA5NzhFRTBBQkFBNkUxMDA4NzQ0ODAgLyog
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQTMx
QjVCMjBDMURGRDEwMDBBRTcwODMgLyogUmVuZGVyU1ZHUm9vdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUm9vdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUFBMzFCNUIzMEMxREZEMTAwMEFFNzA4MyAvKiBSZW5kZXJTVkdSb290
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSb290Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBNEMzQTc0MEIyQjE2NzkwMDIzMzRBMiAvKiBT
dHlsZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0
eWxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBNEMzQTc1MEIy
QjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0eWxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
QjAxNERFMTBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDY4NCwxNSArMTA2ODgs
MTEgQEAKIAkJQjJDQjkyNUUwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5j
ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TVkdFbGVt
ZW50SW5zdGFuY2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQ0I5MjVGMEI1
QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQ0I5MjYwMEI1QkRBMDIwMDlCQUE3OCAvKiBET01T
VkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUIyQ0NFQzQ1MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3cG9y
dENvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlCMkNDRUM0NjBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTI3QzlEMEIwRjJCMDkw
MEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZsb2F0UG9pbnQzRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyRTI3QzlFMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0UG9pbnQzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkU0RUM5NDBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdab29tRXZlbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkU0RUM5NTBEMDBDMjJCMDA0MzI2NDMgLyog
U1ZHWm9vbUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdab29t
RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJFNEVDOTYwRDAwQzIyQjAw
NDMyNjQzIC8qIFNWR1pvb21FdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR1pv
b21FdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyRUJEQzlBMEFGNzdF
MzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQjJFQkRDOUIwQUY3N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRlclRy
ZWVBc1RleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1JlbmRlclRy
ZWVBc1RleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJFRDk3NzAwQjFGNTVD
RTAwMjU3RDBGIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyRjM0RkU1MEU4MkY4MTQwMEY2MjdDRCAvKiBETlMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE5TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyRjM0RkU4MEU4MkY4MjcwMEY2MjdDRCAvKiBETlNDRk5ldC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBETlNDRk5ldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMjM5Miw2ICsxMjM5Miw2OSBAQAogCQkwODhDMkY3NDEyMzkwMDgwMDAz
RDY1Q0UgLyogc3ZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk0MzY3MDdDODEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAg
Ki8sCisJCQkJNDM2NzA3QzkxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlckZvcmVpZ25PYmplY3Qu
aCAqLywKKwkJCQk0MzY3MDdDQTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHQmxvY2suY3Bw
ICovLAorCQkJCTQzNjcwN0NCMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdCbG9jay5oICov
LAorCQkJCTQzNjcwN0NDMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdDb250YWluZXIuY3Bw
ICovLAorCQkJCTQzNjcwN0NEMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdDb250YWluZXIu
aCAqLywKKwkJCQk0MzY3MDdDRTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHR3JhZGllbnRT
dG9wLmNwcCAqLywKKwkJCQk0MzY3MDdDRjEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHR3Jh
ZGllbnRTdG9wLmggKi8sCisJCQkJNDM2NzA3RDAxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5jcHAgKi8sCisJCQkJNDM2NzA3RDExMkQ5OUNDMzAwMDQ0MjM0IC8q
IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovLAorCQkJCTQzNjcwN0QyMTJEOTlDQzMwMDA0
NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgKi8sCisJCQkJNDM2NzA3RDMxMkQ5OUNDMzAwMDQ0
MjM0IC8qIFJlbmRlclNWR0ltYWdlLmggKi8sCisJCQkJNDM2NzA3RDQxMkQ5OUNDMzAwMDQ0MjM0
IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCAqLywKKwkJCQk0MzY3MDdENTEyRDk5Q0MzMDAw
NDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLywKKwkJCQk0MzY3MDdENjEyRDk5Q0Mz
MDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2UuY3BwICovLAorCQkJCTQzNjcwN0Q3MTJEOTlD
QzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oICovLAorCQkJCTQzNjcwN0Q4MTJEOTlD
QzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwICovLAorCQkJCTQzNjcw
N0Q5MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCAqLywKKwkJ
CQk0MzY3MDdEQTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIu
Y3BwICovLAorCQkJCTQzNjcwN0RCMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lci5oICovLAorCQkJCTQzNjcwN0RDMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAgKi8sCisJCQkJNDM2NzA3REQxMkQ5OUNDMzAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggKi8sCisJCQkJNDM2NzA3REUxMkQ5OUNDMzAwMDQ0
MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCAqLywKKwkJCQk0MzY3
MDdERjEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUu
aCAqLywKKwkJCQk0MzY3MDdFMDEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHAgKi8sCisJCQkJNDM2NzA3RTExMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuaCAqLywKKwkJCQk0MzY3MDdFMjEyRDk5Q0MzMDAwNDQyMzQgLyog
UmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAgKi8sCisJCQkJNDM2NzA3RTMxMkQ5
OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCAqLywKKwkJ
CQk0MzY3MDdFNDEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3Bw
ICovLAorCQkJCTQzNjcwN0U1MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlci5oICovLAorCQkJCTQzNjcwN0U2MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNv
dXJjZU1hc2tlci5jcHAgKi8sCisJCQkJNDM2NzA3RTcxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRl
clNWR1Jlc291cmNlTWFza2VyLmggKi8sCisJCQkJNDM2NzA3RTgxMkQ5OUNDMzAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgKi8sCisJCQkJNDM2NzA3RTkxMkQ5OUNDMzAw
MDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oICovLAorCQkJCTQzNjcwN0VBMTJE
OTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCAqLywK
KwkJCQk0MzY3MDdFQjEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxH
cmFkaWVudC5oICovLAorCQkJCTQzNjcwN0VDMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IuY3BwICovLAorCQkJCTQzNjcwN0VEMTJEOTlDQzMwMDA0NDIzNCAv
KiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCAqLywKKwkJCQk0MzY3MDdFRTEyRDk5Q0Mz
MDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5jcHAgKi8sCisJCQkJNDM2NzA3RUYxMkQ5OUNDMzAw
MDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuaCAqLywKKwkJCQk0MzY3MDdGMDEyRDk5Q0MzMDAwNDQy
MzQgLyogUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwICovLAorCQkJCTQzNjcw
N0YxMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5o
ICovLAorCQkJCTQzNjcwN0YyMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmNwcCAqLywKKwkJCQk0MzY3MDdGMzEyRDk5Q0MzMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oICovLAorCQkJCTQzNjcwN0Y0MTJEOTlDQzMw
MDA0NDIzNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgKi8sCisJCQkJNDM2NzA3
RjUxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggKi8sCisJ
CQkJNDM2NzA3RjYxMkQ5OUNDMzAwMDQ0MjM0IC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMuY3BwICov
LAorCQkJCTQzNjcwN0Y3MTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmgg
Ki8sCisJCQkJNDM2NzA3RjgxMkQ5OUNDMzAwMDQ0MjM0IC8qIFNWR01hcmtlckRhdGEuaCAqLywK
KwkJCQk0MzY3MDdGOTEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAg
Ki8sCisJCQkJNDM2NzA3RkExMkQ5OUNDMzAwMDQ0MjM0IC8qIFNWR01hcmtlckxheW91dEluZm8u
aCAqLywKKwkJCQk0MzY3MDdGQjEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVuZGVyU3VwcG9ydC5j
cHAgKi8sCisJCQkJNDM2NzA3RkMxMkQ5OUNDMzAwMDQ0MjM0IC8qIFNWR1JlbmRlclN1cHBvcnQu
aCAqLywKKwkJCQk0MzY3MDdGRDEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAgKi8sCisJCQkJNDM2NzA3RkUxMkQ5OUNDMzAwMDQ0MjM0IC8qIFNWR1JlbmRlclRyZWVB
c1RleHQuaCAqLywKKwkJCQk0MzY3MDdGRjEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2Vz
LmNwcCAqLywKKwkJCQk0MzY3MDgwMDEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzLmgg
Ki8sCisJCQkJNDM2NzA4MDExMkQ5OUNDMzAwMDQ0MjM0IC8qIFNWR1Jlc291cmNlc0NhY2hlLmNw
cCAqLywKKwkJCQk0MzY3MDgwMjEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzQ2FjaGUu
aCAqLywKKwkJCQk0MzY3MDgwMzEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzQ3ljbGVT
b2x2ZXIuY3BwICovLAorCQkJCTQzNjcwODA0MTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdSZXNvdXJj
ZXNDeWNsZVNvbHZlci5oICovLAorCQkJCTQzNjcwODA1MTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdT
aGFkb3dUcmVlRWxlbWVudHMuY3BwICovLAorCQkJCTQzNjcwODA2MTJEOTlDQzMwMDA0NDIzNCAv
KiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuaCAqLywKIAkJCQkwODU0QjAwMjEyNTVFNEU2MDBCOUNE
RDAgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLywKIAkJCQkwODU0QjAwMzEyNTVFNEU2MDBCOUNE
RDAgLyogUmVuZGVyU1ZHSW5saW5lLmggKi8sCiAJCQkJMDg1NEIwMDQxMjU1RTRFNjAwQjlDREQw
IC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwICovLApAQCAtMTg1NDYsOCArMTg2MDksNiBAQAog
CQkJCTA2NkM3NzJGMEFCNjAzRkQwMDIzOENDNCAvKiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5o
ICovLAogCQkJCUJDRUE0ODJFMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJGbGV4aWJsZUJveC5j
cHAgKi8sCiAJCQkJQkNFQTQ4MkYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckZsZXhpYmxlQm94
LmggKi8sCi0JCQkJODUzQ0E5RUEwQUVFQzYzQzAwMjM3MkRDIC8qIFJlbmRlckZvcmVpZ25PYmpl
Y3QuY3BwICovLAotCQkJCTg1M0NBOUVCMEFFRUM2M0MwMDIzNzJEQyAvKiBSZW5kZXJGb3JlaWdu
T2JqZWN0LmggKi8sCiAJCQkJQTg3MURFQ0MwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlckZyYW1l
LmNwcCAqLywKIAkJCQlBODcxREVDQjBBMTUzMEM3MDBCMTJBNjggLyogUmVuZGVyRnJhbWUuaCAq
LywKIAkJCQkwRkQzMDgwQzExN0NGN0U3MDBBNzkxRjcgLyogUmVuZGVyRnJhbWVCYXNlLmNwcCAq
LywKQEAgLTE4NjI2LDUwICsxODY4Nyw2IEBACiAJCQkJQUIyNDdBNkIwQUZENjM4MzAwM0ZBNUZE
IC8qIFJlbmRlclNsaWRlci5oICovLAogCQkJCUQzMDI3NTRCMTJBNUZFQUIwMDRCRDgyOCAvKiBS
ZW5kZXJTdW1tYXJ5LmNwcCAqLywKIAkJCQlEMzAyNzU0QzEyQTVGRUFCMDA0QkQ4MjggLyogUmVu
ZGVyU3VtbWFyeS5oICovLAotCQkJCUE3MzUyQzE3MEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJT
VkdCbG9jay5jcHAgKi8sCi0JCQkJQTczNTJDMTgwQjFCQjg5RDAwQTk4NkQwIC8qIFJlbmRlclNW
R0Jsb2NrLmggKi8sCi0JCQkJODUzQ0E5Q0EwQUVFQzVFOTAwMjM3MkRDIC8qIFJlbmRlclNWR0Nv
bnRhaW5lci5jcHAgKi8sCi0JCQkJODUzQ0E5Q0IwQUVFQzVFOTAwMjM3MkRDIC8qIFJlbmRlclNW
R0NvbnRhaW5lci5oICovLAotCQkJCUE4MDlGMTQ2MEI3Mzc5M0EwMDJFNEQ3RiAvKiBSZW5kZXJT
VkdHcmFkaWVudFN0b3AuY3BwICovLAotCQkJCUE4MDlGMTQ1MEI3Mzc5M0EwMDJFNEQ3RiAvKiBS
ZW5kZXJTVkdHcmFkaWVudFN0b3AuaCAqLywKLQkJCQlBODA5RjFBOTBCNzM3RkI2MDAyRTREN0Yg
LyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCAqLywKLQkJCQlBODA5RjFBODBCNzM3RkI2
MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi8sCi0JCQkJODUzQ0E5Q0Mw
QUVFQzVFOTAwMjM3MkRDIC8qIFJlbmRlclNWR0ltYWdlLmNwcCAqLywKLQkJCQk4NTNDQTlDRDBB
RUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLywKLQkJCQlBOEY1QzBCNzBGOTI4
NUFDMDA5OEUwNkIgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwICovLAotCQkJCUE4RjVDMEI2
MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oICovLAotCQkJCTA4NTYz
QkNGMTE3ODY1RjUwMDEyQjU3OCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5jcHAgKi8sCi0JCQkJMDgz
MTkyQTcxMTJCNDMwNTAwODNDM0I5IC8qIFJlbmRlclNWR1Jlc291cmNlLmggKi8sCi0JCQkJODRC
REExNjkxMTM1OEQyQTAwREJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgKi8s
Ci0JCQkJODRCREExNkExMTM1OEQyQTAwREJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5oICovLAotCQkJCTA4NkE0MDA1MTFGNkQ2QjcwMDJDRUM1MyAvKiBSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lci5jcHAgKi8sCi0JCQkJMDgwODIzNzIxMTc5ODdDMTAwMjQxREU4IC8qIFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyLmggKi8sCi0JCQkJODQxRkRDMjQxMTc4QzlCRTAwRjhBQzlC
IC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCAqLywKLQkJCQk4NDFGREMyNTExNzhDOUJF
MDBGOEFDOUIgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCAqLywKLQkJCQkxOTQyM0I0RTEy
MzRFODZCMDBEMUVFOUUgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwICov
LAotCQkJCTE5NDIzQjRGMTIzNEU4NkIwMEQxRUU5RSAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZS5oICovLAotCQkJCTA4QzM0QUYxMTE3OUMwNTYwMDJENzQ1NiAvKiBSZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50LmNwcCAqLywKLQkJCQkwOEMzNEFGMjExNzlDMDU3MDAyRDc0NTYg
LyogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oICovLAotCQkJCTA4QzM0QUYzMTE3OUMwNTcw
MDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCAqLywKLQkJCQkw
OEMzNEFGNDExNzlDMDU3MDAyRDc0NTYgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVu
dC5oICovLAotCQkJCTg0OTlBNTEyMTE1RkIzMzAwMEY1NjZFMyAvKiBSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlci5jcHAgKi8sCi0JCQkJODQ5OUE1MTMxMTVGQjMzMDAwRjU2NkUzIC8qIFJlbmRlclNW
R1Jlc291cmNlTWFya2VyLmggKi8sCi0JCQkJMDgzMTkyQTgxMTJCNDMwNTAwODNDM0I5IC8qIFJl
bmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCAqLywKLQkJCQkwODMxOTJBOTExMkI0MzA1MDA4M0Mz
QjkgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCAqLywKLQkJCQkwODU2M0JCMjExNzg2MTc3
MDAxMkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCAqLywKLQkJCQkwODU2M0JC
MzExNzg2MTc3MDAxMkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggKi8sCi0JCQkJ
MDhDMzRBRkIxMTc5QzA3MjAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQuY3BwICovLAotCQkJCTA4QzM0QUZDMTE3OUMwNzIwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNv
dXJjZVJhZGlhbEdyYWRpZW50LmggKi8sCi0JCQkJMDhDNkE3QTkxMTdERkJBQjAwRkVBMUEyIC8q
IFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgKi8sCi0JCQkJMDhDNkE3QUExMTdERkJB
QjAwRkVBMUEyIC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oICovLAotCQkJCUFBMzFC
NUIyMEMxREZEMTAwMEFFNzA4MyAvKiBSZW5kZXJTVkdSb290LmNwcCAqLywKLQkJCQlBQTMxQjVC
MzBDMURGRDEwMDBBRTcwODMgLyogUmVuZGVyU1ZHUm9vdC5oICovLAotCQkJCTA4REFCOUI4MTEw
M0Q5QTUwMDNFN0FCQSAvKiBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAgKi8s
Ci0JCQkJMDhEQUI5QjkxMTAzRDlBNTAwM0U3QUJBIC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290
Q29udGFpbmVyLmggKi8sCi0JCQkJQThBOTA5QUIwQ0JDRDZCNTAwMjlCODA3IC8qIFJlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwICovLAotCQkJCUE4QTkwOUFBMENCQ0Q2QjUwMDI5
QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmggKi8sCi0JCQkJQjJDQ0VD
NDUwQzZDQTlGMTAwNkE1NDI0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCAqLywK
LQkJCQlCMkNDRUM0NjBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIuaCAqLywKIAkJCQlBOERGNEFFMjA5ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFibGUuY3Bw
ICovLAogCQkJCUE4REY0QUUxMDk4MEM0MkMwMDUyOTgxQiAvKiBSZW5kZXJUYWJsZS5oICovLAog
CQkJCUE4REY0QUUwMDk4MEM0MkMwMDUyOTgxQiAvKiBSZW5kZXJUYWJsZUNlbGwuY3BwICovLApA
QCAtMTg3MTAsMjMgKzE4NzI3LDYgQEAKIAkJCQk1RDkyNUI2NjBGNjRENEREMDBCODQ3RjAgLyog
U2Nyb2xsQmVoYXZpb3IuaCAqLywKIAkJCQlBN0YzMzhBMTExQzBFRkNBMDBBMzIwQTcgLyogU2hh
ZG93RWxlbWVudC5jcHAgKi8sCiAJCQkJQTdGMzM4QTIxMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRv
d0VsZW1lbnQuaCAqLywKLQkJCQkwOEM0NkI2NzEyMTJGMTVEMDAxMUFGNDAgLyogU1ZHSW1hZ2VC
dWZmZXJUb29scy5jcHAgKi8sCi0JCQkJMDhDNDZCNjgxMjEyRjE1RDAwMTFBRjQwIC8qIFNWR0lt
YWdlQnVmZmVyVG9vbHMuaCAqLywKLQkJCQkwODM4NUZGNTEwRjAxODYwMDBCRkUwN0IgLyogU1ZH
TWFya2VyRGF0YS5oICovLAotCQkJCTA4NzM1RkI2MTBFOTEyMzIwMDZENkZBRCAvKiBTVkdNYXJr
ZXJMYXlvdXRJbmZvLmNwcCAqLywKLQkJCQkwODczNUZCNzEwRTkxMjMyMDA2RDZGQUQgLyogU1ZH
TWFya2VyTGF5b3V0SW5mby5oICovLAotCQkJCUE4RjRGQjk1MEMxNjlFODUwMDJBRkVENSAvKiBT
VkdSZW5kZXJTdXBwb3J0LmNwcCAqLywKLQkJCQlBOEY0RkI5MzBDMTY5RTdCMDAyQUZFRDUgLyog
U1ZHUmVuZGVyU3VwcG9ydC5oICovLAotCQkJCUIyRUJEQzlBMEFGNzdFMzQwMEFFNEE2OCAvKiBT
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcCAqLywKLQkJCQlCMkVCREM5QjBBRjc3RTM0MDBBRTRBNjgg
LyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5oICovLAotCQkJCTA4NEQwRTM4MTFGNTgxNjEwMDA4MUUx
QSAvKiBTVkdSZXNvdXJjZXMuY3BwICovLAotCQkJCTA4NEQwRTM5MTFGNTgxNjEwMDA4MUUxQSAv
KiBTVkdSZXNvdXJjZXMuaCAqLywKLQkJCQkwODREMEUzQTExRjU4MTYxMDAwODFFMUEgLyogU1ZH
UmVzb3VyY2VzQ2FjaGUuY3BwICovLAotCQkJCTA4NEQwRTNCMTFGNTgxNjEwMDA4MUUxQSAvKiBT
VkdSZXNvdXJjZXNDYWNoZS5oICovLAotCQkJCTA4NUIwNUMwMTFGQUUxNkMwMDRENjVGNiAvKiBT
VkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAgKi8sCi0JCQkJMDg1QjA1QzExMUZBRTE2QzAwNEQ2
NUY2IC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmggKi8sCi0JCQkJMDhEQUI5QzAxMTAzRDlD
MTAwM0U3QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAgKi8sCi0JCQkJMDhEQUI5QzEx
MTAzRDlDMTAwM0U3QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5oICovLAogCQkJCUE4Q0ZG
MDRDMEExNTRGMDkwMDBBNDIzNCAvKiBUYWJsZUxheW91dC5oICovLAogCQkJCUFCMDE0REUxMEU2
ODlBNDMwMEUxMDQ0NSAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwICovLAogCQkJCUFC
MDE0REUyMEU2ODlBNDMwMEUxMDQ0NSAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCAqLywK
QEAgLTIxNTM0LDcgKzIxNTM0LDYgQEAKIAkJCQlBOEVBNzNDNDBBMTkwMEUzMDBBOEVGNUYgLyog
UmVuZGVyRmllbGRzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2NkM3NzMxMEFCNjAzRkQwMDIz
OENDNCAvKiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNF
QTQ4NkUwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckZsZXhpYmxlQm94LmggaW4gSGVhZGVycyAq
LywKLQkJCQk4NTNDQTlFRDBBRUVDNjNDMDAyMzcyREMgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MURFRDMwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlckZy
YW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzMDgwRjExN0NGN0U3MDBBNzkxRjcgLyogUmVu
ZGVyRnJhbWVCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcxREVEMTBBMTUzMEM3MDBCMTJB
NjggLyogUmVuZGVyRnJhbWVTZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMjE1ODYsMzQgKzIxNTg1
LDEyIEBACiAJCQkJQkM4QzhGQUUwRERDRDMxQjAwQjU5MkY0IC8qIFJlbmRlclN0eWxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzVFQjY2ODBFODFDQjcxMDBCMjU5NjUgLyogUmVuZGVyU3R5bGVD
b25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUQzMDI3NTRFMTJBNUZFQUIwMDRCRDgyOCAv
KiBSZW5kZXJTdW1tYXJ5LmggaW4gSGVhZGVycyAqLywKLQkJCQlBNzM1MkMxQTBCMUJCODlEMDBB
OTg2RDAgLyogUmVuZGVyU1ZHQmxvY2suaCBpbiBIZWFkZXJzICovLAotCQkJCTg1M0NBOUQ3MEFF
RUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUE4MDlGMTQ3MEI3Mzc5M0EwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUE4MDlGMUFBMEI3MzdGQjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRk
ZW5Db250YWluZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTg1M0NBOUQ5MEFFRUM1RTkwMDIzNzJE
QyAvKiBSZW5kZXJTVkdJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1NEIwMTUxMjU1RTRF
NjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1NEIw
MTcxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUE4RjVDMEI4MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQURERjFBRDcxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNW
R1BhdGguaCBpbiBIZWFkZXJzICovLAotCQkJCTA4MzE5MkFBMTEyQjQzMDUwMDgzQzNCOSAvKiBS
ZW5kZXJTVkdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODRCREExNkMxMTM1OEQyQTAw
REJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MDgwODIzNzMxMTc5ODdDMTAwMjQxREU4IC8qIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk4NDFGREMyNzExNzhDOUJFMDBGOEFDOUIgLyogUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTE5NDIzQjUxMTIzNEU4NkIwMEQx
RUU5RSAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMDhDMzRBRjYxMTc5QzA1NzAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTA4QzM0QUY4MTE3OUMwNTcwMDJENzQ1NiAvKiBSZW5k
ZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk4NDk5QTUx
NTExNUZCMzMwMDBGNTY2RTMgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTA4MzE5MkFDMTEyQjQzMDUwMDgzQzNCOSAvKiBSZW5kZXJTVkdSZXNvdXJjZU1h
c2tlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDg1NjNCQjUxMTc4NjE3ODAwMTJCNTc4IC8qIFJl
bmRlclNWR1Jlc291cmNlUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDhDMzRBRkUxMTc5
QzA3MjAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTA4QzZBN0FDMTE3REZCQUIwMEZFQTFBMiAvKiBSZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUFBMzFCNUI1MEMxREZEMTAwMEFFNzA4
MyAvKiBSZW5kZXJTVkdSb290LmggaW4gSGVhZGVycyAqLywKLQkJCQkwOERBQjlCQjExMDNEOUE1
MDAzRTdBQkEgLyogUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA4NTRCMDE5MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwODU0QjAxQjEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4
dFBhdGguaCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTkwOUFDMENCQ0Q2QjUwMDI5QjgwNyAvKiBS
ZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODU0
QjAxRDEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVFNwYW4uaCBpbiBIZWFkZXJzICovLAot
CQkJCUIyQ0NFQzQ4MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThERjRBRUIwOTgwQzQyQzAwNTI5ODFCIC8qIFJlbmRl
clRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOERGNEFFOTA5ODBDNDJDMDA1Mjk4MUIgLyog
UmVuZGVyVGFibGVDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOERGNEFGMTA5ODBDNDJDMDA1
Mjk4MUIgLyogUmVuZGVyVGFibGVDb2wuaCBpbiBIZWFkZXJzICovLApAQCAtMjE5MTksNyArMjE4
OTYsNiBAQAogCQkJCUIyMjI3QTJBMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdHcmFkaWVudEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1MEZCRjJCMEQ5QUYwNDcwMDhGQzI5MiAvKiBTVkdI
S2VybkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNTU5OUE0MEQwMEQ4QkEwMEJCODI1
QyAvKiBTVkdJbWFnZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDhDNDZCNkExMjEyRjE1RTAwMTFB
RjQwIC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTJE
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyOEM2QTJBMEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdJbWFnZUxvYWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDg1NEIwMUYxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lubGluZUZsb3dCb3guaCBp
biBIZWFkZXJzICovLApAQCAtMjE5MzIsOSArMjE5MDgsNyBAQAogCQkJCTA4MTA3NjQ0MTI4Mjg1
NTYwMDdDNjNCQSAvKiBTVkdMaXN0UHJvcGVydHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4OEEw
RTA5MTI2RUYxREIwMDk3OEY3QSAvKiBTVkdMaXN0UHJvcGVydHlUZWFyT2ZmLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjIyN0E0MTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTG9jYXRhYmxlLmggaW4g
SGVhZGVycyAqLywKLQkJCQkwODM4NUZGNjEwRjAxODYwMDBCRkUwN0IgLyogU1ZHTWFya2VyRGF0
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBNDQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR01h
cmtlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTA4NzM1RkI5MTBFOTEyMzIwMDZENkZB
RCAvKiBTVkdNYXJrZXJMYXlvdXRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E0NzBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHTWFza0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4
MDZFNTdBMTI4OTMwNDUwMDdDRUQzMiAvKiBTVkdNYXRyaXguaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyMjI3QTRCMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNZXRhZGF0YUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjE5ODcsMTUgKzIxOTYxLDkgQEAKIAkJCQlCMjIyN0FBMDBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHUmVuZGVyaW5nSW50ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzIyNzQ3
OTBFODM2NkUyMDBFN0Y5NzUgLyogU1ZHUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMjI3NDdCMEU4MzY2RTIwMEU3Rjk3NSAvKiBTVkdSZW5kZXJTdHlsZURlZnMuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUE4RjRGQjk0MEMxNjlFN0IwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMkVCREM5RDBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDg0RDBFM0QxMUY1ODE2MTAwMDgx
RTFBIC8qIFNWR1Jlc291cmNlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDg0RDBFM0YxMUY1ODE2
MTAwMDgxRTFBIC8qIFNWR1Jlc291cmNlc0NhY2hlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwODVC
MDVDMzExRkFFMTZDMDA0RDY1RjYgLyogU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA4NTRCMDIzMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdSb290SW5saW5lQm94
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FBMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU2Ny
aXB0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBQTYwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR1NldEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTA4REFCOUMzMTEwM0Q5QzEw
MDNFN0FCQSAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
QUZEMDEwMERBRjMzNTUwMEY1RjU1QyAvKiBTVkdTTUlMRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDg4MEY3MEUxMjgyQjQ2RDAwOTQ4NTA1IC8qIFNWR1N0YXRpY0xpc3RQcm9wZXJ0eVRl
YXJPZmYuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MTNBNEVBMTI4NDEzMjYwMDk5MjUxMSAvKiBT
VkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovLApAQCAtMjIyOTIsNiArMjIy
NjAsMzggQEAKIAkJCQk0OTNFNUUwOTEyRDY0MjA1MDAwMjAwODEgLyogUGxhdGZvcm1DQUxheWVy
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxRDVCQjEyRDUzMkM0MDA4MzJCRUMgLyog
V2ViS2l0TG9zZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjFENUMxMTJENTMzNTYw
MDgzMkJFQyAvKiBKU1dlYktpdExvc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzY3
MDgwODEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNDM2NzA4MEExMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR0Jsb2NrLmggaW4g
SGVhZGVycyAqLywKKwkJCQk0MzY3MDgwQzEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29u
dGFpbmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzY3MDgwRTEyRDk5Q0MzMDAwNDQyMzQgLyog
UmVuZGVyU1ZHR3JhZGllbnRTdG9wLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzY3MDgxMDEyRDk5
Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQk0MzY3MDgxMjEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1hZ2UuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTQzNjcwODE0MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdNb2RlbE9i
amVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4MTYxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJl
bmRlclNWR1Jlc291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzY3MDgxODEyRDk5Q0MzMDAw
NDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0
MzY3MDgxQTEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTQzNjcwODFDMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4MUUxMkQ5OUNDMzAwMDQ0
MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk0MzY3MDgyMDEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4MjIxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRl
clNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzNjcwODI0
MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNDM2NzA4MjYxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzY3MDgyODEyRDk5Q0MzMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzY3MDgyQTEyRDk5
Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNDM2NzA4MkMxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4MkUxMkQ5OUNDMzAwMDQ0MjM0
IC8qIFJlbmRlclNWR1Jvb3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzNjcwODMwMTJEOTlDQzMw
MDA0NDIzNCAvKiBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNDM2NzA4MzIxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFi
bGVDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzNjcwODM0MTJEOTlDQzMwMDA0NDIz
NCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2
NzA4MzYxMkQ5OUNDMzAwMDQ0MjM0IC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTQzNjcwODM3MTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdNYXJrZXJEYXRhLmggaW4g
SGVhZGVycyAqLywKKwkJCQk0MzY3MDgzOTEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHTWFya2VyTGF5
b3V0SW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4M0IxMkQ5OUNDMzAwMDQ0MjM0IC8q
IFNWR1JlbmRlclN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzNjcwODNEMTJEOTlDQzMw
MDA0NDIzNCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzY3
MDgzRjEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk0MzY3MDg0MTEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTQzNjcwODQzMTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdSZXNvdXJjZXNDeWNs
ZVNvbHZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4NDUxMkQ5OUNDMzAwMDQ0MjM0IC8q
IFNWR1NoYWRvd1RyZWVFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNDMyMiw3ICsyNDMy
Miw2IEBACiAJCQkJQThFQTczQzMwQTE5MDBFMzAwQThFRjVGIC8qIFJlbmRlckZpZWxkc2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA2NkM3NzMwMEFCNjAzRkQwMDIzOENDNCAvKiBSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VBNDg2RDA5N0Q5MzAy
MDA5NEM5RTQgLyogUmVuZGVyRmxleGlibGVCb3guY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJODUz
Q0E5RUMwQUVFQzYzQzAwMjM3MkRDIC8qIFJlbmRlckZvcmVpZ25PYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTg3MURFRDQwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlckZyYW1lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDMwODBFMTE3Q0Y3RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFt
ZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg3MURFRDIwQTE1MzBDNzAwQjEyQTY4IC8q
IFJlbmRlckZyYW1lU2V0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjQzNzEsMzQgKzI0MzcwLDEy
IEBACiAJCQkJQUIyNDdBNkMwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzhDOEZBRDBERENEMzFCMDBCNTkyRjQgLyogUmVuZGVyU3R5bGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDMwMjc1NEQxMkE1RkVBQjAwNEJEODI4IC8qIFJlbmRl
clN1bW1hcnkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTczNTJDMTkwQjFCQjg5RDAwQTk4NkQw
IC8qIFJlbmRlclNWR0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg1M0NBOUQ2MEFFRUM1
RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
QTgwOUYxNDgwQjczNzkzQjAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlBODA5RjFBQjBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg1M0NBOUQ4MEFFRUM1RTkwMDIz
NzJEQyAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODU0QjAxNDEy
NTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTA4NTRCMDE2MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUE4RjVDMEI5MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRERGMUFENjEyNTdDRDlBMDAwM0E3NTkg
LyogUmVuZGVyU1ZHUGF0aC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwODU2M0JEMDExNzg2NUY1
MDAxMkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJODRC
REExNkIxMTM1OEQyQTAwREJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwODZBNDAwNjExRjZENkI3MDAyQ0VDNTMgLyogUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJODQxRkRDMjYxMTc4QzlCRTAw
RjhBQzlCIC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTE5NDIzQjUwMTIzNEU4NkIwMEQxRUU5RSAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwOEMzNEFGNTExNzlDMDU3MDAyRDc0NTYgLyog
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwOEMzNEFG
NzExNzlDMDU3MDAyRDc0NTYgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk4NDk5QTUxNDExNUZCMzMwMDBGNTY2RTMgLyogUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDgzMTkyQUIxMTJCNDMwNTAw
ODNDM0I5IC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTA4NTYzQkI0MTE3ODYxNzgwMDEyQjU3OCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJMDhDMzRBRkQxMTc5QzA3MjAwMkQ3NDU2IC8qIFJlbmRlclNW
R1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDhDNkE3QUIx
MTdERkJBQjAwRkVBMUEyIC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBQTMxQjVCNDBDMURGRDEwMDBBRTcwODMgLyogUmVuZGVyU1ZHUm9vdC5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkwOERBQjlCQTExMDNEOUE1MDAzRTdBQkEgLyogUmVuZGVy
U1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDg1NEIw
MTgxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDg1NEIwMUExMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHRQYXRoLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUE4QTkwOUFEMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFu
c2Zvcm1hYmxlQ29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4NTRCMDFDMTI1NUU0
RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUU3Bhbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMkND
RUM0NzBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThERjRBRUMwOTgwQzQyQzAwNTI5ODFCIC8qIFJlbmRlclRhYmxl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4REY0QUVBMDk4MEM0MkMwMDUyOTgxQiAvKiBSZW5k
ZXJUYWJsZUNlbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThERjRBRTgwOTgwQzQyQzAwNTI5
ODFCIC8qIFJlbmRlclRhYmxlQ29sLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjQ2NjcsNyArMjQ2
NDQsNiBAQAogCQkJCUIyMjI3QTI5MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdHcmFkaWVudEVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjUwRkJGMkEwRDlBRjA0NzAwOEZDMjkyIC8qIFNW
R0hLZXJuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjU1OTlBMzBEMDBEOEJBMDBC
QjgyNUMgLyogU1ZHSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDhDNDZCNjkxMjEyRjE1
RTAwMTFBRjQwIC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIyMjdBMkMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ltYWdlRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMjhDNkEyOTBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHSW1hZ2VMb2FkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMDg1NEIwMUUxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lubGlu
ZUZsb3dCb3guY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNDY3OSw3ICsyNDY1NSw2IEBACiAJCQkJ
QjIyMjdBM0IwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0xpbmVFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyMjI3QTQwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdMb2NhdGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR01hcmtlckVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDg3MzVGQjgxMEU5MTIzMjAwNkQ2RkFEIC8q
IFNWR01hcmtlckxheW91dEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNDYwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR01hc2tFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
MjI3QTRBMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNZXRhZGF0YUVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjJBMUYyQjAwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR01pc3NpbmdHbHlwaEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNDcxMiwxNSArMjQ2ODcsOSBAQAogCQkJCUIy
MjI3QTlEMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdSZWN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzIyNzQ3ODBFODM2NkUyMDBFN0Y5NzUgLyogU1ZHUmVuZGVyU3R5bGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMyMjc0N0EwRTgzNjZFMjAwRTdGOTc1IC8qIFNWR1JlbmRlclN0
eWxlRGVmcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBOEY0RkI5NjBDMTY5RTg1MDAyQUZFRDUg
LyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMkVCREM5QzBBRjc3
RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQkwODREMEUzQzExRjU4MTYxMDAwODFFMUEgLyogU1ZHUmVzb3VyY2VzLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTA4NEQwRTNFMTFGNTgxNjEwMDA4MUUxQSAvKiBTVkdSZXNvdXJjZXNDYWNoZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkwODVCMDVDMjExRkFFMTZDMDA0RDY1RjYgLyogU1ZHUmVz
b3VyY2VzQ3ljbGVTb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDg1NEIwMjIxMjU1RTRF
NjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIy
MjdBQTIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1NjcmlwdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjIyMjdBQTUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1NldEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMDhEQUI5QzIxMTAzRDlDMTAwM0U3QUJBIC8qIFNWR1NoYWRvd1Ry
ZWVFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEFGRDAwRjBEQUYzMzU1MDBGNUY1
NUMgLyogU1ZHU01JTEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBQTgwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1N0b3BFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
MjI3QUFCMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTdHJpbmdMaXN0LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMjQ5NzYsNiArMjQ5NDUsMzcgQEAKIAkJCQk5M0YxRDVCQTEyRDUzMkM0MDA4MzJCRUMg
LyogV2ViS2l0TG9zZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMUQ1QzAxMkQ1
MzM1NjAwODMyQkVDIC8qIEpTV2ViS2l0TG9zZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQ0RFQTdDODUxMjc2MjMwNDAwQjg0NkREIC8qIFJlbmRlckZ1bGxTY3JlZW4uY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNDM2NzA4MDcxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlckZvcmVpZ25P
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM2NzA4MDkxMkQ5OUNDMzAwMDQ0MjM0IC8q
IFJlbmRlclNWR0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzNjcwODBCMTJEOTlDQzMw
MDA0NDIzNCAvKiBSZW5kZXJTVkdDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM2
NzA4MEQxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk0MzY3MDgwRjEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVu
Q29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzNjcwODExMTJEOTlDQzMwMDA0NDIz
NCAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MzY3MDgxMzEyRDk5
Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNDM2NzA4MTUxMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTQzNjcwODE3MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM2NzA4MTkxMkQ5OUNDMzAwMDQ0
MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTQzNjcwODFCMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk0MzY3MDgxRDEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM2NzA4MUYx
MkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNDM2NzA4MjExMkQ5OUNDMzAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNl
TGluZWFyR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM2NzA4MjMxMkQ5OUNDMzAw
MDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTQzNjcwODI1MTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk0MzY3MDgyNzEyRDk5Q0MzMDAwNDQyMzQgLyogUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzNjcwODI5MTJEOTlDQzMw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTQzNjcwODJCMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM2NzA4MkQxMkQ5OUNDMzAwMDQ0MjM0
IC8qIFJlbmRlclNWR1Jvb3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM2NzA4MkYxMkQ5OUND
MzAwMDQ0MjM0IC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTQzNjcwODMxMTJEOTlDQzMwMDA0NDIzNCAvKiBSZW5kZXJTVkdUcmFuc2Zv
cm1hYmxlQ29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzNjcwODMzMTJEOTlDQzMw
MDA0NDIzNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk0MzY3MDgzNTEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk0MzY3MDgzODEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHTWFya2Vy
TGF5b3V0SW5mby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MzY3MDgzQTEyRDk5Q0MzMDAwNDQy
MzQgLyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MzY3MDgzQzEy
RDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk0MzY3MDgzRTEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTQzNjcwODQwMTJEOTlDQzMwMDA0NDIzNCAvKiBTVkdSZXNvdXJjZXNDYWNo
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MzY3MDg0MjEyRDk5Q0MzMDAwNDQyMzQgLyogU1ZH
UmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM2NzA4NDQxMkQ5
OUNDMzAwMDQ0MjM0IC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVj
dC5jcHAJKHJldmlzaW9uIDc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZvcmVpZ25PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIAotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQotI2luY2x1
ZGUgIlJlbmRlckZvcmVpZ25PYmplY3QuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgotI2luY2x1ZGUgIlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHUmVu
ZGVyU3VwcG9ydC5oIgotI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJUcmFu
c2Zvcm1TdGF0ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlckZvcmVpZ25PYmpl
Y3Q6OlJlbmRlckZvcmVpZ25PYmplY3QoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQqIG5vZGUpIAot
ICAgIDogUmVuZGVyU1ZHQmxvY2sobm9kZSkKLSAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUo
dHJ1ZSkKLXsKLX0KLQotUmVuZGVyRm9yZWlnbk9iamVjdDo6flJlbmRlckZvcmVpZ25PYmplY3Qo
KQotewotfQotCi12b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQsIGludCkKLXsKLSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJ
bmZvKHBhaW50SW5mbyk7Ci0gICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwotICAg
IGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKGxvY2FsVHJhbnNmb3JtKCkpOwotCi0gICAg
aWYgKFNWR1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4odGhpcykpCi0gICAgICAgIGNo
aWxkUGFpbnRJbmZvLmNvbnRleHQtPmNsaXAobV92aWV3cG9ydCk7Ci0KLSAgICBmbG9hdCBvcGFj
aXR5ID0gc3R5bGUoKS0+b3BhY2l0eSgpOwotICAgIGlmIChvcGFjaXR5IDwgMS4wZikKLSAgICAg
ICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5
KTsKLQotICAgIFJlbmRlckJsb2NrOjpwYWludChjaGlsZFBhaW50SW5mbywgMCwgMCk7Ci0KLSAg
ICBpZiAob3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmVu
ZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0KLSAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5yZXN0
b3JlKCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyRm9yZWlnbk9iamVjdDo6Y2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpCi17
Ci0gICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIpOwotfQotCi12b2lkIFJlbmRlckZvcmVpZ25PYmpl
Y3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCi17Ci0gICAgU1ZHUmVu
ZGVyU3VwcG9ydDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIs
IHJlcGFpbnRSZWN0LCBmaXhlZCk7Ci19Ci0KLWNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVy
Rm9yZWlnbk9iamVjdDo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgbV9s
b2NhbFRvUGFyZW50VHJhbnNmb3JtID0gbG9jYWxUcmFuc2Zvcm0oKTsKLSAgICBtX2xvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm0udHJhbnNsYXRlKG1fdmlld3BvcnQueCgpLCBtX3ZpZXdwb3J0LnkoKSk7
Ci0gICAgcmV0dXJuIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKLX0KLQotdm9pZCBSZW5kZXJG
b3JlaWduT2JqZWN0Ojpjb21wdXRlTG9naWNhbFdpZHRoKCkKLXsKLSAgICAvLyBGSVhNRTogSW52
ZXN0aWdhdGUgaW4gc2l6ZSByb3VuZGluZyBpc3N1ZXMKLSAgICBzZXRXaWR0aChzdGF0aWNfY2Fz
dDxpbnQ+KHJvdW5kZihtX3ZpZXdwb3J0LndpZHRoKCkpKSk7Ci19Ci0KLXZvaWQgUmVuZGVyRm9y
ZWlnbk9iamVjdDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKQotewotICAgIC8vIEZJWE1FOiBJbnZl
c3RpZ2F0ZSBpbiBzaXplIHJvdW5kaW5nIGlzc3VlcwotICAgIHNldEhlaWdodChzdGF0aWNfY2Fz
dDxpbnQ+KHJvdW5kZihtX3ZpZXdwb3J0LmhlaWdodCgpKSkpOwotfQotCi12b2lkIFJlbmRlckZv
cmVpZ25PYmplY3Q6OmxheW91dCgpCi17Ci0gICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAg
IEFTU0VSVCghdmlldygpLT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSk7IC8vIFJlbmRlclNWR1Jvb3Qg
ZGlzYWJsZXMgbGF5b3V0U3RhdGUgZm9yIHRoZSBTVkcgcmVuZGVyaW5nIHRyZWUuCi0KLSAgICBM
YXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlv
dXQoKSk7Ci0gICAgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQqIGZvcmVpZ24gPSBzdGF0aWNfY2Fz
dDxTVkdGb3JlaWduT2JqZWN0RWxlbWVudCo+KG5vZGUoKSk7Ci0KLSAgICBib29sIHVwZGF0ZUNh
Y2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSBmYWxzZTsKLSAgICBpZiAobV9uZWVkc1RyYW5zZm9y
bVVwZGF0ZSkgewotICAgICAgICBtX2xvY2FsVHJhbnNmb3JtID0gZm9yZWlnbi0+YW5pbWF0ZWRM
b2NhbFRyYW5zZm9ybSgpOwotICAgICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7
Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwotICAgIH0K
LQotICAgIEZsb2F0UmVjdCBvbGRWaWV3cG9ydCA9IG1fdmlld3BvcnQ7Ci0KLSAgICAvLyBDYWNo
ZSB2aWV3cG9ydCBib3VuZGFyaWVzCi0gICAgRmxvYXRQb2ludCB2aWV3cG9ydExvY2F0aW9uKGZv
cmVpZ24tPngoKS52YWx1ZShmb3JlaWduKSwgZm9yZWlnbi0+eSgpLnZhbHVlKGZvcmVpZ24pKTsK
LSAgICBtX3ZpZXdwb3J0ID0gRmxvYXRSZWN0KHZpZXdwb3J0TG9jYXRpb24sIEZsb2F0U2l6ZShm
b3JlaWduLT53aWR0aCgpLnZhbHVlKGZvcmVpZ24pLCBmb3JlaWduLT5oZWlnaHQoKS52YWx1ZShm
b3JlaWduKSkpOwotICAgIGlmICghdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cykKLSAg
ICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IG9sZFZpZXdwb3J0ICE9IG1f
dmlld3BvcnQ7Ci0KLSAgICAvLyBTZXQgYm94IG9yaWdpbiB0byB0aGUgZm9yZWlnbk9iamVjdCB4
L3kgdHJhbnNsYXRpb24sIHNvIHBvc2l0aW9uZWQgb2JqZWN0cyBpbiBYSFRNTCBjb250ZW50IGdl
dCBjb3JyZWN0Ci0gICAgLy8gcG9zaXRpb25zLiBBIHJlZ3VsYXIgUmVuZGVyQm94TW9kZWxPYmpl
Y3Qgd291bGQgcHVsbCB0aGlzIGluZm9ybWF0aW9uIGZyb20gUmVuZGVyU3R5bGUgLSBpbiBTVkcg
dGhvc2UKLSAgICAvLyBwcm9wZXJ0aWVzIGFyZSBpZ25vcmVkIGZvciBub24gPHN2Zz4gZWxlbWVu
dHMsIHNvIHdlIG1pbWljIHdoYXQgaGFwcGVucyB3aGVuIHNwZWNpZnlpbmcgdGhlbSB0aHJvdWdo
IENTUy4KLQotICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBpbiBsb2NhdGlvbiByb3VuZGluZyBp
c3N1ZXMgLSBvbmx5IGFmZmVjdHMgUmVuZGVyRm9yZWlnbk9iamVjdCAmIFJlbmRlclNWR1RleHQK
LSAgICBzZXRMb2NhdGlvbihyb3VuZGVkSW50UG9pbnQodmlld3BvcnRMb2NhdGlvbikpOwotCi0g
ICAgYm9vbCBsYXlvdXRDaGFuZ2VkID0gbV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91
dCgpOwotICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKLSAgICBBU1NFUlQoIW5lZWRzTGF5b3V0
KCkpOwotCi0gICAgLy8gSWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMu
Ci0gICAgaWYgKHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCi0gICAgICAgIFJlbmRl
clNWR0Jsb2NrOjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKLQotICAgIC8vIEludmFsaWRh
dGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCi0g
ICAgaWYgKGxheW91dENoYW5nZWQpCi0gICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRM
YXlvdXRDaGFuZ2VkKHRoaXMpOwotCi0gICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgp
OwotfQotCi1ib29sIFJlbmRlckZvcmVpZ25PYmplY3Q6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQotewot
ICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1h
cFBvaW50KHBvaW50SW5QYXJlbnQpOwotCi0gICAgLy8gRWFybHkgZXhpdCBpZiBsb2NhbCBwb2lu
dCBpcyBub3QgY29udGFpbmVkIGluIGNsaXBwZWQgdmlld3BvcnQgYXJlYQotICAgIGlmIChTVkdS
ZW5kZXJTdXBwb3J0Ojppc092ZXJmbG93SGlkZGVuKHRoaXMpICYmICFtX3ZpZXdwb3J0LmNvbnRh
aW5zKGxvY2FsUG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbnRQb2ludCBy
b3VuZGVkTG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2ludChsb2NhbFBvaW50KTsKLSAgICByZXR1
cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcm91bmRlZExvY2Fs
UG9pbnQueCgpLCByb3VuZGVkTG9jYWxQb2ludC55KCksIDAsIDAsIGhpdFRlc3RBY3Rpb24pOwot
fQotCi1ib29sIFJlbmRlckZvcmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBpbnQsIGludCwgSGl0VGVzdEFjdGlv
bikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zv
cm1zLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0Ci17Ci0gICAgLy8gV2hl
biBjcmF3bGluZyB1cCB0aGUgaGllcmFjaHkgc3RhcnRpbmcgZnJvbSBmb3JlaWduT2JqZWN0IGNo
aWxkIGNvbnRlbnQsIHVzZVRyYW5zZm9ybXMgbWF5IG5vdCBiZSBzZXQgdG8gdHJ1ZS4KLSAgICBp
ZiAoIXVzZVRyYW5zZm9ybXMpCi0gICAgICAgIHVzZVRyYW5zZm9ybXMgPSB0cnVlOwotICAgIFNW
R1JlbmRlclN1cHBvcnQ6Om1hcExvY2FsVG9Db250YWluZXIodGhpcywgcmVwYWludENvbnRhaW5l
ciwgZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsKLX0KLQotfQotCi0jZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmpl
Y3QuaAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rm9yZWlnbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJGb3JlaWduT2JqZWN0X2gKLSNkZWZpbmUg
UmVuZGVyRm9yZWlnbk9iamVjdF9oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoU1ZHX0ZP
UkVJR05fT0JKRUNUKQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdCbG9jay5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJG
b3JlaWduT2JqZWN0IDogcHVibGljIFJlbmRlclNWR0Jsb2NrIHsKLXB1YmxpYzoKLSAgICBleHBs
aWNpdCBSZW5kZXJGb3JlaWduT2JqZWN0KFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Kik7Ci0gICAg
dmlydHVhbCB+UmVuZGVyRm9yZWlnbk9iamVjdCgpOwotCi0gICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckZvcmVpZ25PYmplY3QiOyB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJl
bnRZKTsKLQotICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWlu
dChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7Ci0gICAgdmlydHVhbCB2
b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGxheW91dCgpOwotCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ry
b2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9Ci0gICAgdmlydHVh
bCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVy
biBtX3ZpZXdwb3J0OyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7Ci0gICAgdmlydHVhbCBib29sIGlzU1ZHRm9yZWln
bk9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBtYXBM
b2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBi
b29sIGZpeGVkICwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3Jt
U3RhdGUpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgp
IHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLQotIHByaXZhdGU6Ci0gICAgdmly
dHVhbCB2b2lkIGNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0
ZUxvZ2ljYWxIZWlnaHQoKTsKLQotICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBs
b2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0K
LSAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwotICAgIEZsb2F0UmVjdCBtX3Zp
ZXdwb3J0OwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOwotICAgIG11dGFi
bGUgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKLX07Ci0KLX0KLQot
I2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdB
bGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR0FsbEluT25lLmNwcAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
Ly8gVGhpcyBhbGwtaW4tb25lIGNwcCBmaWxlIGN1dHMgZG93biBvbiB0ZW1wbGF0ZSBibG9hdCB0
byBhbGxvdyB1cyB0byBidWlsZCBvdXIgV2luZG93cyByZWxlYXNlIGJ1aWxkLgotCi0jaW5jbHVk
ZSAiUmVuZGVyU1ZHQmxvY2suY3BwIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5jcHAi
Ci0jaW5jbHVkZSAiUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCIKLSNpbmNsdWRlICJSZW5kZXJT
VkdIaWRkZW5Db250YWluZXIuY3BwIgotI2luY2x1ZGUgIlJlbmRlclNWR0ltYWdlLmNwcCIKLSNp
bmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2UuY3BwIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAiCi0jaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIgotI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZS5jcHAiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAiCi0j
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAiCi0jaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
TWFza2VyLmNwcCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIgotI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwIgotI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5j
cHAiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIgotI2lu
Y2x1ZGUgIlJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwIgotI2luY2x1ZGUgIlJl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCIKLSNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRv
b2xzLmNwcCIKLSNpbmNsdWRlICJTVkdNYXJrZXJMYXlvdXRJbmZvLmNwcCIKLSNpbmNsdWRlICJT
VkdSZW5kZXJTdXBwb3J0LmNwcCIKLSNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCIK
LSNpbmNsdWRlICJTVkdSZXNvdXJjZXMuY3BwIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hl
LmNwcCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAiCi0jaW5jbHVkZSAi
U1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCIKLQotLy8gRklYTUU6IEFzIHNvb24gYXMgYWxsIFNW
RyByZW5kZXJlcnMgbGl2ZSBpbiByZW5kZXJpbmcvc3ZnLCB0aGlzIGZpbGUgc2hvdWxkIGJlIG1v
dmVkIHRoZXJlIGFzIHdlbGwsIHJlbW92aW5nIHRoZSBuZWVkIGZvciB0aGUgc3ZnLyBpbmNsdWRl
cyBiZWxvdy4KLSNpbmNsdWRlICJzdmcvUmVuZGVyU1ZHSW5saW5lLmNwcCIKLSNpbmNsdWRlICJz
dmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAiCi0jaW5jbHVkZSAic3ZnL1JlbmRlclNWR1RTcGFu
LmNwcCIKLSNpbmNsdWRlICJzdmcvUmVuZGVyU1ZHVGV4dC5jcHAiCi0jaW5jbHVkZSAic3ZnL1Jl
bmRlclNWR1RleHRQYXRoLmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAi
Ci0jaW5jbHVkZSAic3ZnL1NWR0lubGluZVRleHRCb3guY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdS
b290SW5saW5lQm94LmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHVGV4dENodW5rLmNwcCIKLSNpbmNs
dWRlICJzdmcvU1ZHVGV4dENodW5rQnVpbGRlci5jcHAiCi0jaW5jbHVkZSAic3ZnL1NWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzLmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0
ZXNCdWlsZGVyLmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAiCi0j
aW5jbHVkZSAic3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAiCi0jaW5jbHVkZSAi
c3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHVGV4
dE1ldHJpY3MuY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdUZXh0UXVlcnkuY3BwIgpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suY3BwCShyZXZpc2lvbiA3NTM0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJTVkdCbG9jay5oIgotCi0jaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotUmVuZGVyU1ZHQmxvY2s6OlJlbmRlclNWR0Jsb2NrKFNWR0Vs
ZW1lbnQqIG5vZGUpIAotICAgIDogUmVuZGVyQmxvY2sobm9kZSkKLXsKLX0KLQotdm9pZCBSZW5k
ZXJTVkdCbG9jazo6c2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUpIAotewot
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gdXNlU3R5bGUgPSBzdHlsZTsKLQotICAgIC8vIFNWRyB0
ZXh0IGxheW91dCBjb2RlIGV4cGVjdHMgdXMgdG8gYmUgYSBibG9jay1sZXZlbCBzdHlsZSBlbGVt
ZW50LiAgIAotICAgIGlmICh1c2VTdHlsZS0+aXNEaXNwbGF5SW5saW5lVHlwZSgpKSB7Ci0gICAg
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7
Ci0gICAgICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbSh1c2VTdHlsZS5nZXQoKSk7Ci0gICAgICAg
IG5ld1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAgICAgICAgdXNlU3R5bGUgPSBuZXdTdHls
ZS5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKHVzZVN0eWxl
LnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHQmxvY2s6OnVwZGF0ZUJveE1vZGVsSW5m
b0Zyb21TdHlsZSgpCi17Ci0gICAgUmVuZGVyQmxvY2s6OnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21T
dHlsZSgpOwotCi0gICAgLy8gUmVuZGVyU1ZHbG9jaywgdXNlZCBieSBSZW5kZXIoU1ZHVGV4dHxG
b3JlaWduT2JqZWN0KSwgaXMgbm90IGFsbG93ZWQgdG8gY2FsbCBzZXRIYXNPdmVyZmxvd0NsaXAo
dHJ1ZSkuCi0gICAgLy8gUmVuZGVyQmxvY2sgYXNzdW1lcyBhIGxheWVyIHRvIGJlIHByZXNlbnQg
d2hlbiB0aGUgb3ZlcmZsb3cgY2xpcCBmdW5jdGlvbmFsaXR5IGlzIHJlcXVlc3RlZC4gQm90aAot
ICAgIC8vIFJlbmRlcihTVkdUZXh0fEZvcmVpZ25PYmplY3QpIHJldHVybiAnZmFsc2UnIG9uICdy
ZXF1aXJlc0xheWVyJy4gRmluZSBmb3IgUmVuZGVyU1ZHVGV4dC4KLSAgICAvLwotICAgIC8vIElm
IHdlIHdhbnQgdG8gc3VwcG9ydCBvdmVyZmxvdyBydWxlcyBmb3IgPGZvcmVpZ25PYmplY3Q+IHdl
IGNhbiBjaG9vc2UgYmV0d2VlbiB0d28gc29sdXRpb25zOgotICAgIC8vIGEpIG1ha2UgUmVuZGVy
Rm9yZWlnbk9iamVjdCByZXF1aXJlIGxheWVycyBhbmQgU1ZHIGxheWVyIGF3YXJlCi0gICAgLy8g
YikgcmVhY3RvciBvdmVyZmxvdyBsb2dpYyBvdXQgb2YgUmVuZGVyTGF5ZXIgKGFzIHN1Z2dlc3Rl
ZCBieSBkaHlhdHQpLCB3aGljaCBpcyBhIGxhcmdlIHRhc2sKLSAgICAvLwotICAgIC8vIFVudGls
IHRoaXMgaXMgcmVzb2x2ZWQsIGRpc2FibGUgb3ZlcmZsb3cgc3VwcG9ydC4gT3BlcmEvRkYgZG9u
J3Qgc3VwcG9ydCBpdCBhcyB3ZWxsIGF0IHRoZSBtb21lbnQgKEZlYiAyMDEwKS4KLSAgICAvLwot
ICAgIC8vIE5vdGU6IFRoaXMgZG9lcyBOT1QgYWZmZWN0IG92ZXJmbG93IGhhbmRsaW5nIG9uIG91
dGVyL2lubmVyIDxzdmc+IGVsZW1lbnRzIC0gdGhpcyBpcyBoYW5kbGVkCi0gICAgLy8gbWFudWFs
bHkgYnkgUmVuZGVyU1ZHUm9vdCAtIHdoaWNoIG93bnMgdGhlIGRvY3VtZW50cyBlbmNsb3Npbmcg
cm9vdCBsYXllciBhbmQgdGh1cyB3b3JrcyBmaW5lLgotICAgIHNldEhhc092ZXJmbG93Q2xpcChm
YWxzZSk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHQmxvY2s6OmFic29sdXRlUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiwgaW50LCBpbnQpCi17Ci0gICAgLy8gVGhpcyBjb2RlIHBhdGggc2hvdWxkIG5ldmVy
IGJlIHRha2VuIGZvciBTVkcsIGFzIHdlJ3JlIGFzc3VtaW5nIHVzZVRyYW5zZm9ybXM9dHJ1ZSBl
dmVyeXdoZXJlLCBhYnNvbHV0ZVF1YWRzIHNob3VsZCBiZSB1c2VkLgotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotfQotCi12b2lkIFJlbmRlclNWR0Jsb2NrOjpkZXN0cm95KCkKLXsKLSAgICBT
VkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50RGVzdHJveWVkKHRoaXMpOwotICAgIFJlbmRlckJsb2Nr
OjpkZXN0cm95KCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHQmxvY2s6OnN0eWxlV2lsbENoYW5nZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQotewotICAg
IGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZUxheW91dCkKLSAgICAgICAgc2V0TmVlZHNCb3Vu
ZGFyaWVzVXBkYXRlKCk7Ci0gICAgUmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5nZShkaWZmLCBu
ZXdTdHlsZSk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgUmVu
ZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLSAgICBTVkdSZXNvdXJj
ZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKHRoaXMsIGRpZmYsIHN0eWxlKCkpOwotfQotCi12
b2lkIFJlbmRlclNWR0Jsb2NrOjp1cGRhdGVGcm9tRWxlbWVudCgpCi17Ci0gICAgUmVuZGVyQmxv
Y2s6OnVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFVw
ZGF0ZWRGcm9tRWxlbWVudCh0aGlzLCBzdHlsZSgpKTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oCShyZXZpc2lvbiA3NTM0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJTVkdCbG9ja19oCi0jZGVmaW5lIFJlbmRlclNW
R0Jsb2NrX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKLSNp
bmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgU1ZHRWxlbWVudDsKLQotY2xhc3MgUmVuZGVyU1ZHQmxvY2sgOiBwdWJsaWMgUmVuZGVyQmxv
Y2sgewotcHVibGljOgotICAgIGV4cGxpY2l0IFJlbmRlclNWR0Jsb2NrKFNWR0VsZW1lbnQqKTsK
LQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4pOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCb3hNb2RlbEluZm9Gcm9tU3R5bGUoKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0
eCwgaW50IHR5KTsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Ci0gICAgdmlydHVhbCB2
b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBu
ZXdTdHlsZSk7Ci0gICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
RnJvbUVsZW1lbnQoKTsKLX07Ci0KLX0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNpb24gNzUz
NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNW
R0NvbnRhaW5lci5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5o
IgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0Lmgi
Ci0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclNWR0NvbnRhaW5lcjo6UmVuZGVyU1ZH
Q29udGFpbmVyKFNWR1N0eWxlZEVsZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5kZXJTVkdNb2RlbE9i
amVjdChub2RlKQotICAgICwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUodHJ1ZSkKLXsKLX0KLQot
UmVuZGVyU1ZHQ29udGFpbmVyOjp+UmVuZGVyU1ZHQ29udGFpbmVyKCkKLXsKLX0KLQotdm9pZCBS
ZW5kZXJTVkdDb250YWluZXI6OmxheW91dCgpCi17Ci0gICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkp
OwotCi0gICAgLy8gUmVuZGVyU1ZHUm9vdCBkaXNhYmxlcyBsYXlvdXRTdGF0ZSBmb3IgdGhlIFNW
RyByZW5kZXJpbmcgdHJlZS4KLSAgICBBU1NFUlQoIXZpZXcoKS0+bGF5b3V0U3RhdGVFbmFibGVk
KCkpOwotCi0gICAgLy8gQWxsb3cgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgdG8gdXBkYXRl
IGl0cyB2aWV3cG9ydC4KLSAgICBjYWxjVmlld3BvcnQoKTsKLQotICAgIExheW91dFJlcGFpbnRl
ciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpIHx8IHNlbGZX
aWxsUGFpbnQoKSk7Ci0KLSAgICAvLyBBbGxvdyBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFp
bmVyIHRvIHVwZGF0ZSBpdHMgdHJhbnNmb3JtLgotICAgIGJvb2wgdXBkYXRlZFRyYW5zZm9ybSA9
IGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7Ci0KLSAgICBTVkdSZW5kZXJTdXBwb3J0OjpsYXlv
dXRDaGlsZHJlbih0aGlzLCBzZWxmTmVlZHNMYXlvdXQoKSk7Ci0KLSAgICAvLyBJbnZhbGlkYXRl
IGFsbCByZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgotICAg
IGlmIChtX2V2ZXJIYWRMYXlvdXQgJiYgc2VsZk5lZWRzTGF5b3V0KCkpCi0gICAgICAgIFNWR1Jl
c291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKHRoaXMpOwotCi0gICAgLy8gQXQgdGhp
cyBwb2ludCBMYXlvdXRSZXBhaW50ZXIgYWxyZWFkeSBncmFiYmVkIHRoZSBvbGQgYm91bmRzLAot
ICAgIC8vIHJlY2FsY3VsYXRlIHRoZW0gbm93IHNvIHJlcGFpbnRBZnRlckxheW91dCgpIHVzZXMg
dGhlIG5ldyBib3VuZHMuCi0gICAgaWYgKG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlIHx8IHVwZGF0
ZWRUcmFuc2Zvcm0pIHsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwotICAgICAg
ICBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IGZhbHNlOwotICAgIAotICAgICAgICAvLyBJZiBv
dXIgYm91bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4KLSAgICAgICAgUmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwotICAgIH0KLQotICAgIHJl
cGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKLSAgICBzZXROZWVkc0xheW91dChmYWxzZSk7
Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHQ29udGFpbmVyOjpzZWxmV2lsbFBhaW50KCkKLXsKLSNpZiBF
TkFCTEUoRklMVEVSUykKLSAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNl
c0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhpcyk7Ci0gICAgcmV0dXJu
IHJlc291cmNlcyAmJiByZXNvdXJjZXMtPmZpbHRlcigpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFs
c2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBpbnQsIGludCkKLXsKLSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3BlYzogZ3JvdXBz
IHcvbyBjaGlsZHJlbiBzdGlsbCBtYXkgcmVuZGVyIGZpbHRlciBjb250ZW50LgotICAgIGlmICgh
Zmlyc3RDaGlsZCgpICYmICFzZWxmV2lsbFBhaW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7
Ci0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJl
Y3QocmVwYWludFJlY3QsIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSwgcGFpbnRJbmZvKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7
Ci0gICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwotCi0gICAgLy8gTGV0IHRoZSBS
ZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciBzdWJjbGFzcyBjbGlwIGlmIG5lY2Vzc2FyeQotICAg
IGFwcGx5Vmlld3BvcnRDbGlwKGNoaWxkUGFpbnRJbmZvKTsKLQotICAgIGNoaWxkUGFpbnRJbmZv
LmFwcGx5VHJhbnNmb3JtKGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSk7Ci0KLSAgICBib29sIGNv
bnRpbnVlUmVuZGVyaW5nID0gdHJ1ZTsKLSAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0g
UGFpbnRQaGFzZUZvcmVncm91bmQpCi0gICAgICAgIGNvbnRpbnVlUmVuZGVyaW5nID0gU1ZHUmVu
ZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5m
byk7Ci0KLSAgICBpZiAoY29udGludWVSZW5kZXJpbmcpIHsKLSAgICAgICAgY2hpbGRQYWludElu
Zm8udXBkYXRlUGFpbnRpbmdSb290Rm9yQ2hpbGRyZW4odGhpcyk7Ci0gICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpCi0gICAgICAgICAgICBjaGlsZC0+cGFpbnQoY2hpbGRQYWludEluZm8sIDAs
IDApOwotICAgIH0KLQotICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVn
cm91bmQpCi0gICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQo
dGhpcywgY2hpbGRQYWludEluZm8sIHBhaW50SW5mby5jb250ZXh0KTsKLQotICAgIGNoaWxkUGFp
bnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHJlYWxseSBz
aG91bGQgYmUgZHJhd24gZnJvbSBsb2NhbCBjb29yZGluYXRlcywgYnV0IGN1cnJlbnRseSB3ZSBo
YWNrIGl0Ci0gICAgLy8gdG8gYXZvaWQgb3VyIGNsaXAga2lsbGluZyBvdXIgb3V0bGluZSByZWN0
LiAgVGh1cyB3ZSB0cmFuc2xhdGUgb3VyCi0gICAgLy8gb3V0bGluZSByZWN0IGludG8gcGFyZW50
IGNvb3JkcyBiZWZvcmUgZHJhd2luZy4KLSAgICAvLyBGSVhNRTogVGhpcyBtZWFucyBvdXIgZm9j
dXMgcmluZyB3b24ndCBzaGFyZSBvdXIgcm90YXRpb24gbGlrZSBpdCBzaG91bGQuCi0gICAgLy8g
V2Ugc2hvdWxkIGluc3RlYWQgZGlzYWJsZSBvdXIgY2xpcCBkdXJpbmcgUGFpbnRQaGFzZU91dGxp
bmUKLSAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgpLT5vdXRsaW5l
V2lkdGgoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkgewotICAgICAgICBJ
bnRSZWN0IHBhaW50UmVjdEluUGFyZW50ID0gZW5jbG9zaW5nSW50UmVjdChsb2NhbFRvUGFyZW50
VHJhbnNmb3JtKCkubWFwUmVjdChyZXBhaW50UmVjdCkpOwotICAgICAgICBwYWludE91dGxpbmUo
cGFpbnRJbmZvLmNvbnRleHQsIHBhaW50UmVjdEluUGFyZW50LngoKSwgcGFpbnRSZWN0SW5QYXJl
bnQueSgpLCBwYWludFJlY3RJblBhcmVudC53aWR0aCgpLCBwYWludFJlY3RJblBhcmVudC5oZWln
aHQoKSk7Ci0gICAgfQotfQotCi0vLyBhZGRGb2N1c1JpbmdSZWN0cyBpcyBjYWxsZWQgZnJvbSBw
YWludE91dGxpbmUgYW5kIG5lZWRzIHRvIGJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGVzIGFzIHRo
ZSBwYWludE91bGluZSBjYWxsCi12b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YWRkRm9jdXNSaW5n
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50LCBpbnQpCi17Ci0gICAgSW50UmVjdCBw
YWludFJlY3RJblBhcmVudCA9IGVuY2xvc2luZ0ludFJlY3QobG9jYWxUb1BhcmVudFRyYW5zZm9y
bSgpLm1hcFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOwotICAgIGlmICgh
cGFpbnRSZWN0SW5QYXJlbnQuaXNFbXB0eSgpKQotICAgICAgICByZWN0cy5hcHBlbmQocGFpbnRS
ZWN0SW5QYXJlbnQpOwotfQotCi12b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6dXBkYXRlQ2FjaGVk
Qm91bmRhcmllcygpCi17Ci0gICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwot
ICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICBtX3JlcGFpbnRCb3Vu
ZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotCi0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNv
bnRhaW5lckJvdW5kaW5nQm94ZXModGhpcywgbV9vYmplY3RCb3VuZGluZ0JveCwgbV9zdHJva2VC
b3VuZGluZ0JveCwgbV9yZXBhaW50Qm91bmRpbmdCb3gpOwotICAgIFNWR1JlbmRlclN1cHBvcnQ6
OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGlu
Z0JveCk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHQ29udGFpbmVyOjpub2RlQXRGbG9hdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikK
LXsKLSAgICAvLyBHaXZlIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyIGEgY2hhbmNlIHRvIGFw
cGx5IGl0cyB2aWV3cG9ydCBjbGlwCi0gICAgaWYgKCFwb2ludElzSW5zaWRlVmlld3BvcnRDbGlw
KHBvaW50SW5QYXJlbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGbG9hdFBvaW50
IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50
KHBvaW50SW5QYXJlbnQpOwotCi0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xp
cHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAo
Y2hpbGQtPm5vZGVBdEZsb2F0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBvaW50LCBoaXRU
ZXN0QWN0aW9uKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJv
dW5kZWRJbnRQb2ludChsb2NhbFBvaW50KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIFNwZWM6IE9ubHkgZ3JhcGhpY2FsIGVsZW1lbnRzIGNh
biBiZSB0YXJnZXRlZCBieSB0aGUgbW91c2UsIHBlcmlvZC4KLSAgICAvLyAxNi40OiAiSWYgdGhl
cmUgYXJlIG5vIGdyYXBoaWNzIGVsZW1lbnRzIHdob3NlIHJlbGV2YW50IGdyYXBoaWNzIGNvbnRl
bnQgaXMgdW5kZXIgdGhlIHBvaW50ZXIgKGkuZS4sIHRoZXJlIGlzIG5vIHRhcmdldCBlbGVtZW50
KSwgdGhlIGV2ZW50IGlzIG5vdCBkaXNwYXRjaGVkLiIKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCShyZXZpc2lvbiA3NTM0NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgUmVuZGVyU1ZHQ29u
dGFpbmVyX2gKLSNkZWZpbmUgUmVuZGVyU1ZHQ29udGFpbmVyX2gKLQotI2lmIEVOQUJMRShTVkcp
Ci0KLSNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFNWR0VsZW1lbnQ7Ci0KLWNsYXNzIFJlbmRlclNWR0NvbnRhaW5lciA6IHB1
YmxpYyBSZW5kZXJTVkdNb2RlbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVy
U1ZHQ29udGFpbmVyKFNWR1N0eWxlZEVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJTVkdD
b250YWluZXIoKTsKLQotICAgIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4o
KSBjb25zdCB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQotICAgIFJlbmRlck9iamVjdENoaWxkTGlz
dCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQotCi0gICAgdmlydHVhbCB2b2lk
IHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7Ci0gICAgdmlydHVh
bCB2b2lkIHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpIHsgbV9uZWVkc0JvdW5kYXJpZXNVcGRh
dGUgPSB0cnVlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxk
TGlzdCogdmlydHVhbENoaWxkcmVuKCkgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQotICAgIHZpcnR1
YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSBjb25zdCB7
IHJldHVybiBjaGlsZHJlbigpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTVkdDb250YWluZXIo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJO
YW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR0NvbnRhaW5lciI7IH0KLQotICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVj
dCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7
IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5n
Qm94OyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50
LCBIaXRUZXN0QWN0aW9uKTsKLQotICAgIC8vIEFsbG93IFJlbmRlclNWR1RyYW5zZm9ybWFibGVD
b250YWluZXIgdG8gaG9vayBpbiBhdCB0aGUgcmlnaHQgdGltZSBpbiBsYXlvdXQoKQotICAgIHZp
cnR1YWwgYm9vbCBjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LSAgICAvLyBBbGxvdyBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciB0byBob29rIGluIGF0IHRo
ZSByaWdodCB0aW1lcyBpbiBsYXlvdXQoKSwgcGFpbnQoKSBhbmQgbm9kZUF0RmxvYXRQb2ludCgp
Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNWaWV3cG9ydCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBh
cHBseVZpZXdwb3J0Q2xpcChQYWludEluZm8mKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcG9pbnRJ
c0luc2lkZVZpZXdwb3J0Q2xpcChjb25zdCBGbG9hdFBvaW50JiAvKnBvaW50SW5QYXJlbnQqLykg
eyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgYm9vbCBzZWxmV2lsbFBhaW50KCk7Ci0gICAgdm9pZCB1
cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7Ci0KLXByaXZhdGU6Ci0gICAgUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0IG1fY2hpbGRyZW47Ci0gICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7Ci0g
ICAgRmxvYXRSZWN0IG1fc3Ryb2tlQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fcmVwYWlu
dEJvdW5kaW5nQm94OwotICAgIGJvb2wgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgOiAxOwotfTsK
LSAgCi1pbmxpbmUgUmVuZGVyU1ZHQ29udGFpbmVyKiB0b1JlbmRlclNWR0NvbnRhaW5lcihSZW5k
ZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICAvLyBOb3RlOiBpc1NWR0NvbnRhaW5lciBpcyBhbHNv
IHRydWUgZm9yIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLCB3aGljaCBpcyBub3QgZGVyaXZl
ZCBmcm9tIHRoaXMuCi0gICAgQVNTRVJUKCFvYmplY3QgfHwgKG9iamVjdC0+aXNTVkdDb250YWlu
ZXIoKSAmJiBzdHJjbXAob2JqZWN0LT5yZW5kZXJOYW1lKCksICJSZW5kZXJTVkdWaWV3cG9ydENv
bnRhaW5lciIpKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR0NvbnRhaW5lcio+
KG9iamVjdCk7Ci19Ci0KLWlubGluZSBjb25zdCBSZW5kZXJTVkdDb250YWluZXIqIHRvUmVuZGVy
U1ZHQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIC8vIE5vdGU6
IGlzU1ZHQ29udGFpbmVyIGlzIGFsc28gdHJ1ZSBmb3IgUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIsIHdoaWNoIGlzIG5vdCBkZXJpdmVkIGZyb20gdGhpcy4KLSAgICBBU1NFUlQoIW9iamVjdCB8
fCAob2JqZWN0LT5pc1NWR0NvbnRhaW5lcigpICYmIHN0cmNtcChvYmplY3QtPnJlbmRlck5hbWUo
KSwgIlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyIikpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgUmVuZGVyU1ZHQ29udGFpbmVyKj4ob2JqZWN0KTsKLX0KLQotLy8gVGhpcyB3aWxs
IGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b1JlbmRlclNW
R0NvbnRhaW5lcihjb25zdCBSZW5kZXJTVkdDb250YWluZXIqKTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykKLSNlbmRpZiAvLyBSZW5kZXJTVkdDb250
YWluZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50
U3RvcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0dyYWRpZW50U3RvcC5jcHAJKHJldmlzaW9uIDc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUg
IlJlbmRlclNWR0dyYWRpZW50U3RvcC5oIgotCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXIuaCIKLSNpbmNsdWRlICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCi0jaW5jbHVkZSAiU1ZH
U3RvcEVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotdXNpbmcgbmFtZXNw
YWNlIFNWR05hbWVzOwotCi1SZW5kZXJTVkdHcmFkaWVudFN0b3A6OlJlbmRlclNWR0dyYWRpZW50
U3RvcChTVkdTdG9wRWxlbWVudCogZWxlbWVudCkKLSAgICA6IFJlbmRlck9iamVjdChlbGVtZW50
KQotewotfQotCi1SZW5kZXJTVkdHcmFkaWVudFN0b3A6On5SZW5kZXJTVkdHcmFkaWVudFN0b3Ao
KQotewotfQotCi12b2lkIFJlbmRlclNWR0dyYWRpZW50U3RvcDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICBS
ZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLSAgICBpZiAoZGlm
ZiA9PSBTdHlsZURpZmZlcmVuY2VFcXVhbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gPHN0
b3A+IGVsZW1lbnRzIHNob3VsZCBvbmx5IGJlIGFsbG93ZWQgdG8gbWFrZSByZW5kZXJlcnMgdW5k
ZXIgZ3JhZGllbnQgZWxlbWVudHMKLSAgICAvLyBidXQgSSBjYW4gaW1hZ2luZSBhIGZldyBjYXNl
cyB3ZSBtaWdodCBub3QgYmUgY2F0Y2hpbmcsIHNvIGxldCdzIG5vdCBjcmFzaCBpZiBvdXIgcGFy
ZW50IGlzbid0IGEgZ3JhZGllbnQuCi0gICAgU1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudCA9
IGdyYWRpZW50RWxlbWVudCgpOwotICAgIGlmICghZ3JhZGllbnQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBncmFkaWVudC0+cmVuZGVyZXIoKTsKLSAg
ICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocmVuZGVyZXIt
PmlzU1ZHUmVzb3VyY2VDb250YWluZXIoKSk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIqIGNvbnRhaW5lciA9IHJlbmRlcmVyLT50b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCk7
Ci0gICAgY29udGFpbmVyLT5yZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7Ci19Ci0KLXZvaWQg
UmVuZGVyU1ZHR3JhZGllbnRTdG9wOjpsYXlvdXQoKQotewotICAgIHNldE5lZWRzTGF5b3V0KGZh
bHNlKTsKLX0KLQotU1ZHR3JhZGllbnRFbGVtZW50KiBSZW5kZXJTVkdHcmFkaWVudFN0b3A6Omdy
YWRpZW50RWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9
IG5vZGUoKS0+cGFyZW50Tm9kZSgpOwotICAgIGlmIChwYXJlbnROb2RlLT5oYXNUYWdOYW1lKGxp
bmVhckdyYWRpZW50VGFnKSB8fCBwYXJlbnROb2RlLT5oYXNUYWdOYW1lKHJhZGlhbEdyYWRpZW50
VGFnKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0dyYWRpZW50RWxlbWVudCo+KHBh
cmVudE5vZGUpOwotICAgIHJldHVybiAwOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZH
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50U3RvcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdHcmFkaWVu
dFN0b3AuaAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHR3JhZGllbnRTdG9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFJlbmRlclNWR0dyYWRpZW50
U3RvcF9oCi0jZGVmaW5lIFJlbmRlclNWR0dyYWRpZW50U3RvcF9oCi0KLSNpZiBFTkFCTEUoU1ZH
KQotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAg
Ci1jbGFzcyBTVkdHcmFkaWVudEVsZW1lbnQ7Ci1jbGFzcyBTVkdTdG9wRWxlbWVudDsKLQotLy8g
VGhpcyBjbGFzcyBleGlzdHMgbW9zdGx5IHNvIHdlIGNhbiBoZWFyIGFib3V0IGdyYWRpZW50IHN0
b3Agc3R5bGUgY2hhbmdlcwotY2xhc3MgUmVuZGVyU1ZHR3JhZGllbnRTdG9wIDogcHVibGljIFJl
bmRlck9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyU1ZHR3JhZGllbnRTdG9wKFNWR1N0b3BF
bGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHR3JhZGllbnRTdG9wKCk7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNTVkdHcmFkaWVudFN0b3AoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRl
clNWR0dyYWRpZW50U3RvcCI7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLQotICAg
IC8vIFRoaXMgb3ZlcnJpZGVzIGFyZSBuZWVkZWQgdG8gcHJldmVudCBBU1NFUlRzIG9uIDxzdmc+
PHN0b3AgLz48L3N2Zz4KLSAgICAvLyBSZW5kZXJPYmplY3QncyBkZWZhdWx0IGltcGxlbWVudGF0
aW9ucyBBU1NFUlRfTk9UX1JFQUNIRUQoKQotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDQwMAotICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZs
b3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCopIHsgcmV0dXJuIEludFJlY3Qo
KTsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyBy
ZXR1cm4gRmxvYXRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGlu
Z0JveCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9Ci0gICAgdmlydHVhbCBGbG9hdFJl
Y3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBGbG9hdFJl
Y3QoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLQotcHJpdmF0ZToK
LSAgICBTVkdHcmFkaWVudEVsZW1lbnQqIGdyYWRpZW50RWxlbWVudCgpIGNvbnN0OwotfTsKLQot
aW5saW5lIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCogdG9SZW5kZXJTVkdHcmFkaWVudFN0
b3AoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwg
b2JqZWN0LT5pc1NWR0dyYWRpZW50U3RvcCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyU1ZHR3JhZGllbnRTdG9wKj4ob2JqZWN0KTsKLX0KLQotfQotCi0jZW5kaWYgLy8g
RU5BQkxFKFNWRykKLSNlbmRpZiAvLyBSZW5kZXJTVkdHcmFkaWVudFN0b3BfaApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5jcHAJKHJldmlzaW9uIDc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR0hpZGRlbkNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5oIgotCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgotI2luY2x1
ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZW5kZXJT
VkdIaWRkZW5Db250YWluZXI6OlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcihTVkdTdHlsZWRFbGVt
ZW50KiBlbGVtZW50KQotICAgIDogUmVuZGVyU1ZHQ29udGFpbmVyKGVsZW1lbnQpCi17Ci19Ci0K
LXZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpsYXlvdXQoKQotewotICAgIEFTU0VSVChu
ZWVkc0xheW91dCgpKTsKLSAgICBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbih0aGlz
LCBzZWxmTmVlZHNMYXlvdXQoKSk7IAotICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsgICAgCi19
Ci0KLXZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpwYWludChQYWludEluZm8mLCBpbnQs
IGludCkKLXsKLSAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgcGFpbnQuCi19Ci0KLXZvaWQg
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+
JikKLXsKLSAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgdGFrZSB1cCBzcGFjZSBvciBwYWlu
dAotfQotCi1ib29sIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6bm9kZUF0RmxvYXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50Jiwg
SGl0VGVzdEFjdGlvbikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KLQotI2VuZGlmIC8v
IEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCShyZXZpc2lvbiA3NTM0NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpZm5kZWYgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyX2gKLSNkZWZp
bmUgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVk
ZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLWNs
YXNzIFNWR1N0eWxlZEVsZW1lbnQ7Ci0KLS8vIFRoaXMgY2xhc3MgaXMgZm9yIGNvbnRhaW5lcnMg
d2hpY2ggYXJlIG5ldmVyIGRyYXduLCBidXQgZG8gbmVlZCB0byBzdXBwb3J0IHN0eWxlCi0vLyA8
ZGVmcz4sIDxsaW5lYXJHcmFkaWVudD4sIDxyYWRpYWxHcmFkaWVudD4gYXJlIGFsbCBnb29kIGV4
YW1wbGVzCi1jbGFzcyBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZH
Q29udGFpbmVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBSZW5kZXJTVkdIaWRkZW5Db250YWlu
ZXIoU1ZHU3R5bGVkRWxlbWVudCopOwotCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJO
YW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lciI7IH0KLQotcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0
dWFsIGJvb2wgaXNTVkdIaWRkZW5Db250YWluZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFy
ZW50WSk7Ci0gICAgCi0gICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JS
ZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KikgeyByZXR1cm4gSW50UmVjdCgpOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24p
OwotfTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0jZW5kaWYgLy8gUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0ltYWdlLmNwcAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJp
Y2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJTVkdJbWFnZS5oIgotCi0jaW5jbHVkZSAi
QXR0ci5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UXVh
ZC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBvaW50ZXJFdmVu
dHNIaXRSdWxlcy5oIgotI2luY2x1ZGUgIlJlbmRlckltYWdlUmVzb3VyY2UuaCIKLSNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJTVkdJbWFn
ZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdMZW5ndGguaCIKLSNpbmNsdWRlICJTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotI2luY2x1ZGUg
IlNWR1Jlc291cmNlcy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclNWR0ltYWdl
OjpSZW5kZXJTVkdJbWFnZShTVkdJbWFnZUVsZW1lbnQqIGltcGwpCi0gICAgOiBSZW5kZXJTVkdN
b2RlbE9iamVjdChpbXBsKQotICAgICwgbV91cGRhdGVDYWNoZWRSZXBhaW50UmVjdCh0cnVlKQot
ICAgICwgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSh0cnVlKQotICAgICwgbV9pbWFnZVJlc291cmNl
KFJlbmRlckltYWdlUmVzb3VyY2U6OmNyZWF0ZSgpKQotewotICAgIG1faW1hZ2VSZXNvdXJjZS0+
aW5pdGlhbGl6ZSh0aGlzKTsKLX0KLQotUmVuZGVyU1ZHSW1hZ2U6On5SZW5kZXJTVkdJbWFnZSgp
Ci17Ci0gICAgbV9pbWFnZVJlc291cmNlLT5zaHV0ZG93bigpOwotfQotCi12b2lkIFJlbmRlclNW
R0ltYWdlOjpsYXlvdXQoKQotewotICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLQotICAgIExh
eW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91
dCgpICYmIHNlbGZOZWVkc0xheW91dCgpKTsKLSAgICBTVkdJbWFnZUVsZW1lbnQqIGltYWdlID0g
c3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKLQotICAgIGJvb2wgdHJhbnNm
b3JtT3JCb3VuZGFyaWVzVXBkYXRlID0gbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSB8fCBtX3VwZGF0
ZUNhY2hlZFJlcGFpbnRSZWN0OwotICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7Ci0g
ICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSBpbWFnZS0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgp
OwotICAgICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKG1fdXBkYXRlQ2FjaGVkUmVwYWludFJlY3QpIHsKLSAgICAgICAgbV9yZXBhaW50Qm91bmRp
bmdCb3ggPSBtX29iamVjdEJvdW5kaW5nQm94OwotICAgICAgICBTVkdSZW5kZXJTdXBwb3J0Ojpp
bnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdC
b3gpOwotICAgICAgICBtX3VwZGF0ZUNhY2hlZFJlcGFpbnRSZWN0ID0gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBs
YXlvdXQgY2hhbmdlZC4KLSAgICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91
dCgpKQotICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZCh0aGlz
KTsKLQotICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgot
ICAgIGlmICh0cmFuc2Zvcm1PckJvdW5kYXJpZXNVcGRhdGUpCi0gICAgICAgIFJlbmRlclNWR01v
ZGVsT2JqZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKLQotICAgIHJlcGFpbnRlci5y
ZXBhaW50QWZ0ZXJMYXlvdXQoKTsKLSAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Ci19Ci0KLXZv
aWQgUmVuZGVyU1ZHSW1hZ2U6OnVwZGF0ZUZyb21FbGVtZW50KCkKLXsKLSAgICBTVkdJbWFnZUVs
ZW1lbnQqIGltYWdlID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKLQot
ICAgIEZsb2F0UmVjdCBvbGRCb3VuZGFyaWVzID0gbV9vYmplY3RCb3VuZGluZ0JveDsKLSAgICBt
X29iamVjdEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KGltYWdlLT54KCkudmFsdWUoaW1hZ2UpLCBp
bWFnZS0+eSgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPndpZHRoKCkudmFsdWUoaW1hZ2UpLCBpbWFn
ZS0+aGVpZ2h0KCkudmFsdWUoaW1hZ2UpKTsKLSAgICBpZiAobV9vYmplY3RCb3VuZGluZ0JveCAh
PSBvbGRCb3VuZGFyaWVzKSB7Ci0gICAgICAgIG1fdXBkYXRlQ2FjaGVkUmVwYWludFJlY3QgPSB0
cnVlOwotICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKLSAgICB9Ci0gICAgUmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21FbGVtZW50KCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHSW1h
Z2U6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKLXsKLSAgICBpZiAocGFp
bnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5
KCkgPT0gSElEREVOIHx8ICFtX2ltYWdlUmVzb3VyY2UtPmhhc0ltYWdlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCk7Ci0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNl
Y3RzUmVwYWludFJlY3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBhaW50SW5mbykp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhwYWludElu
Zm8pOwotICAgIGJvb2wgZHJhd3NPdXRsaW5lID0gc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgJiYg
KGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IGNoaWxkUGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSk7Ci0gICAgaWYgKGRyYXdzT3V0bGlu
ZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewotICAg
ICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIGNoaWxkUGFpbnRJ
bmZvLmFwcGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFuc2Zvcm0pOwotCi0gICAgICAgIGlmIChjaGls
ZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewotICAgICAgICAgICAg
UGFpbnRJbmZvIHNhdmVkSW5mbyhjaGlsZFBhaW50SW5mbyk7Ci0KLSAgICAgICAgICAgIGlmIChT
VkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFp
bnRJbmZvKSkgewotICAgICAgICAgICAgICAgIEltYWdlKiBpbWFnZSA9IG1faW1hZ2VSZXNvdXJj
ZS0+aW1hZ2UoKTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBtX29iamVj
dEJvdW5kaW5nQm94OwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAsIGlt
YWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCkpOwotCi0gICAgICAgICAgICAgICAgU1ZHSW1h
Z2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQqPihu
b2RlKCkpOwotICAgICAgICAgICAgICAgIGlmIChpbWFnZUVsZW1lbnQtPnByZXNlcnZlQXNwZWN0
UmF0aW8oKS5hbGlnbigpICE9IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX05PTkUpCi0gICAgICAgICAgICAgICAgICAgIGltYWdlRWxlbWVudC0+cHJlc2Vy
dmVBc3BlY3RSYXRpbygpLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOwotCi0gICAg
ICAgICAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywg
Y2hpbGRQYWludEluZm8sIHNhdmVkSW5mby5jb250ZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChkcmF3c091dGxpbmUpCi0gICAgICAgICAgICBwYWludE91dGxpbmUoY2hpbGRQYWludElu
Zm8uY29udGV4dCwgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ0JveC54KCkpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGJvdW5kaW5nQm94LnkoKSksCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
Pihib3VuZGluZ0JveC53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ0JveC5oZWln
aHQoKSkpOwotICAgICAgICAKLSAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+cmVzdG9y
ZSgpOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJTVkdJbWFnZTo6bm9kZUF0RmxvYXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24p
Ci17Ci0gICAgLy8gV2Ugb25seSBkcmF3IGluIHRoZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdlIG9u
bHkgaGl0LXRlc3QgdGhlbi4KLSAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdy
b3VuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9pbnRlckV2ZW50c0hpdFJ1bGVz
IGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX0lNQUdFX0hJVFRFU1RJTkcsIHJl
cXVlc3QsIHN0eWxlKCktPnBvaW50ZXJFdmVudHMoKSk7Ci0gICAgYm9vbCBpc1Zpc2libGUgPSAo
c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpOwotICAgIGlmIChpc1Zpc2libGUgfHwg
IWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7Ci0gICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2lu
dCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBh
cmVudCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2lu
dEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIGlmIChoaXRSdWxlcy5jYW5IaXRGaWxsKSB7Ci0gICAgICAgICAgICBp
ZiAobV9vYmplY3RCb3VuZGluZ0JveC5jb250YWlucyhsb2NhbFBvaW50KSkgewotICAgICAgICAg
ICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCByb3VuZGVkSW50UG9pbnQobG9jYWxQ
b2ludCkpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclNWR0lt
YWdlOjppbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KikKLXsKLSAg
ICAvLyBUaGUgaW1hZ2UgcmVzb3VyY2UgZGVmYXVsdHMgdG8gbnVsbEltYWdlIHVudGlsIHRoZSBy
ZXNvdXJjZSBhcnJpdmVzLgotICAgIC8vIFRoaXMgZW1wdHkgaW1hZ2UgbWF5IGJlIGNhY2hlZCBi
eSBTVkcgcmVzb3VyY2VzIHdoaWNoIG11c3QgYmUgaW52YWxpZGF0ZWQuCi0gICAgaWYgKFNWR1Jl
c291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0Zv
clJlbmRlck9iamVjdCh0aGlzKSkKLSAgICAgICAgcmVzb3VyY2VzLT5yZW1vdmVDbGllbnRGcm9t
Q2FjaGUodGhpcyk7Ci0KLSAgICAvLyBFdmVudHVhbGx5IG5vdGlmeSBwYXJlbnQgcmVzb3VyY2Vz
LCB0aGF0IHdlJ3ZlIGNoYW5nZWQuCi0gICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlv
dXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbih0aGlzLCBmYWxzZSk7Ci0KLSAgICByZXBh
aW50KCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMsIGludCwgaW50KQotewotICAgIC8vIHRoaXMgaXMgY2FsbGVkIGZy
b20gcGFpbnQoKSBhZnRlciB0aGUgbG9jYWxUcmFuc2Zvcm0gaGFzIGFscmVhZHkgYmVlbiBhcHBs
aWVkCi0gICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgaWYgKCFjb250ZW50UmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJlY3RzLmFwcGVuZChjb250ZW50UmVjdCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhhbmRlciBLZWxsZXR0IDxseXBh
bm92QGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFJl
bmRlclNWR0ltYWdlX2gKLSNkZWZpbmUgUmVuZGVyU1ZHSW1hZ2VfaAotCi0jaWYgRU5BQkxFKFNW
RykKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgotI2luY2x1ZGUgIlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVySW1hZ2VSZXNvdXJjZTsKLWNsYXNzIFNWR0ltYWdl
RWxlbWVudDsKLQotY2xhc3MgUmVuZGVyU1ZHSW1hZ2UgOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxP
YmplY3QgewotcHVibGljOgotICAgIFJlbmRlclNWR0ltYWdlKFNWR0ltYWdlRWxlbWVudCopOwot
ICAgIHZpcnR1YWwgflJlbmRlclNWR0ltYWdlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNUcmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7Ci0KLSAgICBSZW5kZXJJbWFnZVJl
c291cmNlKiBpbWFnZVJlc291cmNlKCkgeyByZXR1cm4gbV9pbWFnZVJlc291cmNlLmdldCgpOyB9
Ci0gICAgY29uc3QgUmVuZGVySW1hZ2VSZXNvdXJjZSogaW1hZ2VSZXNvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW1hZ2VSZXNvdXJjZS5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdJbWFnZSI7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
LQotICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQotCi0gICAgdmlydHVhbCBG
bG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJvdW5k
aW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25z
dCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qg
cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRC
b3VuZGluZ0JveDsgfQotCi0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNo
YW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IDApOwotCi0gICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQg
cGFyZW50WCwgaW50IHBhcmVudFkpOwotCi0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7Ci0KLSAgICB2aXJ0dWFsIEFmZmlu
ZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zv
cm07IH0KLQotICAgIGJvb2wgbV91cGRhdGVDYWNoZWRSZXBhaW50UmVjdCA6IDE7Ci0gICAgYm9v
bCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2Nh
bFRyYW5zZm9ybTsKLSAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGluZ0JveDsKLSAgICBGbG9h
dFJlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7Ci0gICAgT3duUHRyPFJlbmRlckltYWdlUmVzb3Vy
Y2U+IG1faW1hZ2VSZXNvdXJjZTsKLX07Ci0KLWlubGluZSBSZW5kZXJTVkdJbWFnZSogdG9SZW5k
ZXJTVkdJbWFnZShSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBU1NFUlQoIW9iamVjdCB8
fCBvYmplY3QtPmlzU1ZHSW1hZ2UoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNW
R0ltYWdlKj4ob2JqZWN0KTsKLX0KLQotaW5saW5lIGNvbnN0IFJlbmRlclNWR0ltYWdlKiB0b1Jl
bmRlclNWR0ltYWdlKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIEFTU0VSVCgh
b2JqZWN0IHx8IG9iamVjdC0+aXNTVkdJbWFnZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgUmVuZGVyU1ZHSW1hZ2UqPihvYmplY3QpOwotfQotCi0vLyBUaGlzIHdpbGwgY2F0Y2gg
YW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCi12b2lkIHRvUmVuZGVyU1ZHSW1hZ2Uo
Y29uc3QgUmVuZGVyU1ZHSW1hZ2UqKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKFNWRykKLSNlbmRpZiAvLyBSZW5kZXJTVkdJbWFnZV9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHJl
dmlzaW9uIDc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR01vZGVs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2Jq
ZWN0LmgiCi0KLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgotI2luY2x1ZGUgIlNWR1N0
eWxlZEVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZW5kZXJTVkdNb2RlbE9i
amVjdDo6UmVuZGVyU1ZHTW9kZWxPYmplY3QoU1ZHU3R5bGVkRWxlbWVudCogbm9kZSkKLSAgICA6
IFJlbmRlck9iamVjdChub2RlKQotewotfQotCi1JbnRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0
OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lcikKLXsKLSAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6Y2xpcHBlZE92
ZXJmbG93UmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWludENvbnRhaW5lcik7Ci19Ci0KLXZvaWQg
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4
ZWQpCi17Ci0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHRoaXMs
IHJlcGFpbnRDb250YWluZXIsIHJlcGFpbnRSZWN0LCBmaXhlZCk7Ci19Ci0KLXZvaWQgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6Om1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5z
Zm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKLXsKLSAgICBTVkdSZW5kZXJTdXBwb3J0
OjptYXBMb2NhbFRvQ29udGFpbmVyKHRoaXMsIHJlcGFpbnRDb250YWluZXIsIGZpeGVkLCB1c2VU
cmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0ZSk7Ci19Ci0KLS8vIENvcGllZCBmcm9tIFJlbmRlckJv
eCwgdGhpcyBtZXRob2QgbGlrZWx5IHJlcXVpcmVzIGZ1cnRoZXIgcmVmYWN0b3JpbmcgdG8gd29y
ayBlYXNpbHkgZm9yIGJvdGggU1ZHIGFuZCBDU1MgQm94IE1vZGVsIGNvbnRlbnQuCi0vLyBGSVhN
RTogVGhpcyBtYXkgYWxzbyBuZWVkIHRvIG1vdmUgaW50byBTVkdSZW5kZXJTdXBwb3J0IGFzIHRo
ZSBSZW5kZXJCb3ggdmVyc2lvbiBkZXBlbmRzCi0vLyBvbiBib3JkZXJCb3VuZGluZ0JveCgpIHdo
aWNoIFNWRyBSZW5kZXJCb3ggc3ViY2xhc2VzIChsaWtlIFNWR1JlbmRlckJsb2NrKSBkbyBub3Qg
aW1wbGVtZW50LgotSW50UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5kc0Zv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFBvaW50
KikgY29uc3QKLXsKLSAgICBJbnRSZWN0IGJveCA9IGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgYWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFk
b3coYm94KTsKLQotICAgIEZsb2F0UXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBsb2NhbFRv
Q29udGFpbmVyUXVhZChGbG9hdFJlY3QoYm94KSwgcmVwYWludENvbnRhaW5lcik7Ci0gICAgcmV0
dXJuIGNvbnRhaW5lclJlbGF0aXZlUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotfQotCi12
b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYs
IGludCwgaW50KQotewotICAgIC8vIFRoaXMgY29kZSBwYXRoIHNob3VsZCBuZXZlciBiZSB0YWtl
biBmb3IgU1ZHLCBhcyB3ZSdyZSBhc3N1bWluZyB1c2VUcmFuc2Zvcm1zPXRydWUgZXZlcnl3aGVy
ZSwgYWJzb2x1dGVRdWFkcyBzaG91bGQgYmUgdXNlZC4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQotdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8
RmxvYXRRdWFkPiYgcXVhZHMpCi17Ci0gICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1
YWQoc3Ryb2tlQm91bmRpbmdCb3goKSkpOwotfQotCi12b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0
OjpkZXN0cm95KCkKLXsKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50RGVzdHJveWVkKHRo
aXMpOwotICAgIFJlbmRlck9iamVjdDo6ZGVzdHJveSgpOwotfQotCi12b2lkIFJlbmRlclNWR01v
ZGVsT2JqZWN0OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJl
bmRlclN0eWxlKiBuZXdTdHlsZSkKLXsKLSAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VM
YXlvdXQpCi0gICAgICAgIHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwotICAgIFJlbmRlck9i
amVjdDo6c3R5bGVXaWxsQ2hhbmdlKGRpZmYsIG5ld1N0eWxlKTsKLX0KLQotdm9pZCBSZW5kZXJT
VkdNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hh
bmdlKGRpZmYsIG9sZFN0eWxlKTsKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVD
aGFuZ2VkKHRoaXMsIGRpZmYsIHN0eWxlKCkpOwotfQotCi12b2lkIFJlbmRlclNWR01vZGVsT2Jq
ZWN0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCi17Ci0gICAgUmVuZGVyT2JqZWN0Ojp1cGRhdGVGcm9t
RWxlbWVudCgpOwotICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRVcGRhdGVkRnJvbUVsZW1l
bnQodGhpcywgc3R5bGUoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBp
bnQsIGludCwgSGl0VGVzdEFjdGlvbikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHTW9kZWxPYmplY3QuaAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
IAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgUmVuZGVyU1ZHTW9kZWxPYmplY3RfaAotI2RlZmluZSBSZW5kZXJTVkdN
b2RlbE9iamVjdF9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLS8vIE1vc3QgcmVuZGVyZXJzIGluIHRoZSBTVkcgcmVuZGVyaW5nIHRyZWUgd2lsbCBpbmhl
cml0IGZyb20gdGhpcyBjbGFzcwotLy8gYnV0IG5vdCBhbGwuIChlLmcuIFJlbmRlclNWR0ZvcmVp
Z25PYmplY3QsIFJlbmRlclNWR0Jsb2NrKSB0aHVzIG1ldGhvZHMKLS8vIHJlcXVpcmVkIGJ5IFNW
RyByZW5kZXJzIG5lZWQgdG8gYmUgZGVjbGFyZWQgb24gUmVuZGVyT2JqZWN0LCBidXQgc2hhcmVk
Ci0vLyBsb2dpYyBjYW4gZ28gaW4gdGhpcyBjbGFzcyBvciBpbiBTVkdSZW5kZXJTdXBwb3J0Lgot
Ci1jbGFzcyBTVkdTdHlsZWRFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdNb2RlbE9iamVjdCA6
IHB1YmxpYyBSZW5kZXJPYmplY3QgewotcHVibGljOgotICAgIGV4cGxpY2l0IFJlbmRlclNWR01v
ZGVsT2JqZWN0KFNWR1N0eWxlZEVsZW1lbnQqKTsKLQotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c0xheWVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgSW50UmVjdCBj
bGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lcik7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQg
PSBmYWxzZSk7Ci0gICAgdmlydHVhbCBJbnRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KFJl
bmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRQb2ludCopIGNvbnN0Owot
Ci0gICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4
LCBpbnQgdHkpOwotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1
YWQ+Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwotCi0gICAgdmlydHVhbCB2b2lk
IG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUmKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29u
c3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotCi1wcml2YXRlOgotICAgIC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBuZXZlciBiZSBjYWxsZWQsIFNWRyB1c2VzIGEgZGlmZmVyZW50IG5vZGVB
dFBvaW50IG1ldGhvZAotICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgaW50IHhJbkNvbnRhaW5lciwgaW50IHlJbkNvbnRhaW5lciwgaW50
IGR4UGFyZW50VG9Db250YWluZXIsIGludCBkeVBhcmVudFRvQ29udGFpbmVyLCBIaXRUZXN0QWN0
aW9uKTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0jZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmNwcAkocmV2aXNp
b24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2UuaCIKLQotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2Vz
LmgiCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RhdGljIGlubGluZSBSZW5kZXJTVkdSZXNvdXJjZSogcmVxdWVzdFBhaW50aW5nUmVzb3Vy
Y2UoUmVuZGVyU1ZHUmVzb3VyY2VNb2RlIG1vZGUsIFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUsIENvbG9yJiBmYWxsYmFja0NvbG9yKQotewotICAgIEFTU0VS
VChvYmplY3QpOwotICAgIEFTU0VSVChzdHlsZSk7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIG5vIHN0
eWxlIGF0IGFsbCwgaWdub3JlIGl0LgotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHls
ZSA9IHN0eWxlLT5zdmdTdHlsZSgpOwotICAgIGlmICghc3ZnU3R5bGUpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBubyBmaWxsL3N0cm9rZSwgcmV0dXJuIDAuCi0gICAg
aWYgKG1vZGUgPT0gQXBwbHlUb0ZpbGxNb2RlKSB7Ci0gICAgICAgIGlmICghc3ZnU3R5bGUtPmhh
c0ZpbGwoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
ICghc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
Ci0gICAgU1ZHUGFpbnQqIHBhaW50ID0gbW9kZSA9PSBBcHBseVRvRmlsbE1vZGUgPyBzdmdTdHls
ZS0+ZmlsbFBhaW50KCkgOiBzdmdTdHlsZS0+c3Ryb2tlUGFpbnQoKTsKLSAgICBBU1NFUlQocGFp
bnQpOwotCi0gICAgU1ZHUGFpbnQ6OlNWR1BhaW50VHlwZSBwYWludFR5cGUgPSBwYWludC0+cGFp
bnRUeXBlKCk7Ci0gICAgaWYgKHBhaW50VHlwZSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9O
T05FKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENvbG9yIGNvbG9yOwotICAgIGlmIChwYWlu
dFR5cGUgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfUkdCQ09MT1IKLSAgICAgICAgfHwgcGFp
bnRUeXBlID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1JHQkNPTE9SX0lDQ0NPTE9SCi0gICAg
ICAgIHx8IHBhaW50VHlwZSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfUkdCQ09MT1IK
LSAgICAgICAgfHwgcGFpbnRUeXBlID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1VSSV9SR0JD
T0xPUl9JQ0NDT0xPUikKLSAgICAgICAgY29sb3IgPSBwYWludC0+Y29sb3IoKTsKLSAgICBlbHNl
IGlmIChwYWludFR5cGUgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SIHx8
IHBhaW50VHlwZSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfQ1VSUkVOVENPTE9SKQot
ICAgICAgICBjb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlD
b2xvcik7Ci0KLSAgICBpZiAoc3R5bGUtPmluc2lkZUxpbmsoKSA9PSBJbnNpZGVWaXNpdGVkTGlu
aykgewotICAgICAgICBSZW5kZXJTdHlsZSogdmlzaXRlZFN0eWxlID0gc3R5bGUtPmdldENhY2hl
ZFBzZXVkb1N0eWxlKFZJU0lURURfTElOSyk7Ci0gICAgICAgIEFTU0VSVCh2aXNpdGVkU3R5bGUp
OwotCi0gICAgICAgIGlmIChTVkdQYWludCogdmlzaXRlZFBhaW50ID0gbW9kZSA9PSBBcHBseVRv
RmlsbE1vZGUgPyB2aXNpdGVkU3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxQYWludCgpIDogdmlzaXRl
ZFN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VQYWludCgpKSB7Ci0gICAgICAgICAgICAvLyBGb3Ig
U1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IsICdjb2xvcicgYWxyZWFkeSBjb250YWlucyB0aGUg
J3Zpc2l0ZWRDb2xvcicuCi0gICAgICAgICAgICBpZiAodmlzaXRlZFBhaW50LT5wYWludFR5cGUo
KSA8IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1VSSV9OT05FICYmIHZpc2l0ZWRQYWludC0+cGFp
bnRUeXBlKCkgIT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SKSB7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgQ29sb3ImIHZpc2l0ZWRDb2xvciA9IHZpc2l0ZWRQYWludC0+Y29s
b3IoKTsKLSAgICAgICAgICAgICAgICBpZiAodmlzaXRlZENvbG9yLmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgY29sb3IgPSBDb2xvcih2aXNpdGVkQ29sb3IucmVkKCksIHZpc2l0ZWRD
b2xvci5ncmVlbigpLCB2aXNpdGVkQ29sb3IuYmx1ZSgpLCBjb2xvci5hbHBoYSgpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHRoZSBwcmltYXJ5IHJlc291
cmNlIGlzIGp1c3QgYSBjb2xvciwgcmV0dXJuIGltbWVkaWF0ZWx5LgotICAgIFJlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvciogY29sb3JSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFy
ZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKLSAgICBpZiAocGFpbnRUeXBlIDwgU1ZHUGFpbnQ6
OlNWR19QQUlOVFRZUEVfVVJJX05PTkUpIHsKLSAgICAgICAgLy8gSWYgYW4gaW52YWxpZCBmaWxs
IGNvbG9yIGlzIHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gZmlsbC9zdHJva2U9Im5vbmUiLgotICAg
ICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAg
ICAgIGNvbG9yUmVzb3VyY2UtPnNldENvbG9yKGNvbG9yKTsKLSAgICAgICAgcmV0dXJuIGNvbG9y
UmVzb3VyY2U7Ci0gICAgfQotCi0gICAgLy8gSWYgbm8gcmVzb3VyY2VzIGFyZSBhc3NvY2lhdGVk
IHdpdGggdGhlIGdpdmVuIHJlbmRlcmVyLCByZXR1cm4gdGhlIGNvbG9yIHJlc291cmNlLgotICAg
IFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291
cmNlc0ZvclJlbmRlck9iamVjdChvYmplY3QpOwotICAgIGlmICghcmVzb3VyY2VzKSB7Ci0gICAg
ICAgIC8vIElmIGEgcGFpbnQgc2VydmVyIGlzIHNwZWNpZmllZCwgYW5kIG5vIG9yIGFuIGludmFs
aWQgZmFsbGJhY2sgY29sb3IgaXMgZ2l2ZW4sIGRlZmF1bHQgdG8gZmlsbC9zdHJva2U9ImJsYWNr
Ii4KLSAgICAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBjb2xvciA9IENv
bG9yOjpibGFjazsKLQotICAgICAgICBjb2xvclJlc291cmNlLT5zZXRDb2xvcihjb2xvcik7Ci0g
ICAgICAgIHJldHVybiBjb2xvclJlc291cmNlOwotICAgIH0KLQotICAgIC8vIElmIHRoZSByZXF1
ZXN0ZWQgcmVzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSwgcmV0dXJuIHRoZSBjb2xvciByZXNvdXJj
ZS4KLSAgICBSZW5kZXJTVkdSZXNvdXJjZSogdXJpUmVzb3VyY2UgPSBtb2RlID09IEFwcGx5VG9G
aWxsTW9kZSA/IHJlc291cmNlcy0+ZmlsbCgpIDogcmVzb3VyY2VzLT5zdHJva2UoKTsKLSAgICBp
ZiAoIXVyaVJlc291cmNlKSB7Ci0gICAgICAgIC8vIElmIGEgcGFpbnQgc2VydmVyIGlzIHNwZWNp
ZmllZCwgYW5kIG5vIG9yIGFuIGludmFsaWQgZmFsbGJhY2sgY29sb3IgaXMgZ2l2ZW4sIGRlZmF1
bHQgdG8gZmlsbC9zdHJva2U9ImJsYWNrIi4KLSAgICAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICBjb2xvciA9IENvbG9yOjpibGFjazsKLQotICAgICAgICBjb2xvclJlc291
cmNlLT5zZXRDb2xvcihjb2xvcik7Ci0gICAgICAgIHJldHVybiBjb2xvclJlc291cmNlOwotICAg
IH0KLQotICAgIC8vIFRoZSBwYWludCBzZXJ2ZXIgcmVzb3VyY2UgZXhpc3RzLCB0aG91Z2ggaXQg
bWF5IGJlIGludmFsaWQgKHBhdHRlcm4gd2l0aCB3aWR0aC9oZWlnaHQ9MCkuIFBhc3MgdGhlIGZh
bGxiYWNrIGNvbG9yIHRvIG91ciBjYWxsZXIKLSAgICAvLyBzbyBpdCBjYW4gdXNlIHRoZSBzb2xp
ZCBjb2xvciBwYWludGluZyByZXNvdXJjZSwgaWYgYXBwbHlSZXNvdXJjZSgpIG9uIHRoZSBVUkkg
cmVzb3VyY2UgZmFpbGVkLgotICAgIGZhbGxiYWNrQ29sb3IgPSBjb2xvcjsKLSAgICByZXR1cm4g
dXJpUmVzb3VyY2U7Ci19Ci0KLVJlbmRlclNWR1Jlc291cmNlKiBSZW5kZXJTVkdSZXNvdXJjZTo6
ZmlsbFBhaW50aW5nUmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSwgQ29sb3ImIGZhbGxiYWNrQ29sb3IpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3RQ
YWludGluZ1Jlc291cmNlKEFwcGx5VG9GaWxsTW9kZSwgb2JqZWN0LCBzdHlsZSwgZmFsbGJhY2tD
b2xvcik7Ci19Ci0KLVJlbmRlclNWR1Jlc291cmNlKiBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tl
UGFpbnRpbmdSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlLCBDb2xvciYgZmFsbGJhY2tDb2xvcikKLXsKLSAgICByZXR1cm4gcmVxdWVzdFBhaW50
aW5nUmVzb3VyY2UoQXBwbHlUb1N0cm9rZU1vZGUsIG9iamVjdCwgc3R5bGUsIGZhbGxiYWNrQ29s
b3IpOwotfQotCi1SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIFJlbmRlclNWR1Jlc291cmNl
OjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKQotewotICAgIHN0YXRpYyBSZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IqIHNfc2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlID0gMDsKLSAg
ICBpZiAoIXNfc2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKQotICAgICAgICBzX3NoYXJlZFNv
bGlkUGFpbnRpbmdSZXNvdXJjZSA9IG5ldyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I7Ci0g
ICAgcmV0dXJuIHNfc2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlOwotfQotCi12b2lkIFJlbmRl
clNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24o
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGJvb2wgbmVlZHNMYXlvdXQpCi17Ci0gICAgQVNTRVJUKG9i
amVjdCk7Ci0gICAgaWYgKG5lZWRzTGF5b3V0KQotICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5
b3V0KHRydWUpOwotCi0gICAgLy8gSW52YWxpZGF0ZSByZXNvdXJjZXMgaW4gYW5jZXN0b3IgY2hh
aW4sIGlmIG5lZWRlZC4KLSAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBvYmplY3QtPnBhcmVu
dCgpOwotICAgIHdoaWxlIChjdXJyZW50KSB7Ci0gICAgICAgIGlmIChjdXJyZW50LT5pc1NWR1Jl
c291cmNlQ29udGFpbmVyKCkpIHsKLSAgICAgICAgICAgIGN1cnJlbnQtPnRvUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIoKS0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50
KCk7Ci0gICAgfQotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmgJKHJldmlzaW9uIDc1MzQ1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
ODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFJlbmRlclNWR1Jlc291
cmNlX2gKLSNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNp
bmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0
ZW5zaW9ucy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gUmVuZGVyU1ZHUmVzb3Vy
Y2VUeXBlIHsKLSAgICBNYXNrZXJSZXNvdXJjZVR5cGUsCi0gICAgTWFya2VyUmVzb3VyY2VUeXBl
LAotICAgIFBhdHRlcm5SZXNvdXJjZVR5cGUsCi0gICAgTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5
cGUsCi0gICAgUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGUsCi0gICAgU29saWRDb2xvclJlc291
cmNlVHlwZSwKLSAgICBGaWx0ZXJSZXNvdXJjZVR5cGUsCi0gICAgQ2xpcHBlclJlc291cmNlVHlw
ZQotfTsKLQotZW51bSBSZW5kZXJTVkdSZXNvdXJjZU1vZGUgewotICAgIEFwcGx5VG9EZWZhdWx0
TW9kZSA9IDEgPDwgMCwgLy8gdXNlZCBmb3IgYWxsIHJlc291cmNlcyBleGNlcHQgZ3JhZGllbnQv
cGF0dGVybgotICAgIEFwcGx5VG9GaWxsTW9kZSAgICA9IDEgPDwgMSwKLSAgICBBcHBseVRvU3Ry
b2tlTW9kZSAgPSAxIDw8IDIsCi0gICAgQXBwbHlUb1RleHRNb2RlICAgID0gMSA8PCAzIC8vIHVz
ZWQgaW4gY29tYmluYXRpb24gd2l0aCBBcHBseVRve0ZpbGx8U3Ryb2tlfU1vZGUKLX07Ci0KLWNs
YXNzIENvbG9yOwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xh
c3MgUGF0aDsKLWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclN0eWxlOwotY2xhc3Mg
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOwotCi1jbGFzcyBSZW5kZXJTVkdSZXNvdXJjZSB7
Ci1wdWJsaWM6Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2UoKSB7IH0KLSAgICB2aXJ0dWFsIH5SZW5k
ZXJTVkdSZXNvdXJjZSgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbENsaWVudHNG
cm9tQ2FjaGUoYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9y
SW52YWxpZGF0aW9uID0gdHJ1ZSkgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWdu
ZWQgc2hvcnQgcmVzb3VyY2VNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwg
Y29uc3QgUGF0aCopIHsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdC
b3goUmVuZGVyT2JqZWN0KikgPSAwOwotCi0gICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5
cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgPSAwOwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgUmVuZGVy
ZXI+Ci0gICAgUmVuZGVyZXIqIGNhc3QoKQotICAgIHsKLSAgICAgICAgaWYgKFJlbmRlcmVyOjpz
X3Jlc291cmNlVHlwZSA9PSByZXNvdXJjZVR5cGUoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxSZW5kZXJlcio+KHRoaXMpOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIC8vIEhlbHBlciB1dGlsaXRpZXMgdXNlZCBpbiB0aGUgcmVuZGVyIHRyZWUgdG8gYWNjZXNz
IHJlc291cmNlcyB1c2VkIGZvciBwYWludGluZyBzaGFwZXMvdGV4dCAoZ3JhZGllbnRzICYgcGF0
dGVybnMgJiBzb2xpZCBjb2xvcnMgb25seSkKLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2Uq
IGZpbGxQYWludGluZ1Jlc291cmNlKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiwg
Q29sb3ImIGZhbGxiYWNrQ29sb3IpOwotICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZSogc3Ry
b2tlUGFpbnRpbmdSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSosIENv
bG9yJiBmYWxsYmFja0NvbG9yKTsKLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yKiBzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKLQotICAgIHN0YXRpYyB2b2lkIG1h
cmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihSZW5kZXJPYmplY3QqLCBi
b29sIG5lZWRzTGF5b3V0ID0gdHJ1ZSk7Ci19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyLmNwcAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQu
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHQ2xpcFBhdGhFbGVtZW50LmgiCi0j
aW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIK
LSNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNp
bmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0j
aW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdV
bml0VHlwZXMuaCIKLSNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCi0jaW5jbHVkZSA8d3RmL1Vu
dXNlZFBhcmFtLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVuZGVyU1ZHUmVzb3VyY2VU
eXBlIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6c19yZXNvdXJjZVR5cGUgPSBDbGlwcGVyUmVz
b3VyY2VUeXBlOwotCi1SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OlJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlcihTVkdDbGlwUGF0aEVsZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lcihub2RlKQotICAgICwgbV9pbnZhbGlkYXRpb25CbG9ja2VkKGZhbHNlKQotewot
fQotCi1SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6On5SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIo
KQotewotICAgIGlmIChtX2NsaXBwZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBkZWxldGVBbGxWYWx1ZXMobV9jbGlwcGVyKTsKLSAgICBtX2NsaXBwZXIuY2xlYXIoKTsKLX0K
LQotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnJlbW92ZUFsbENsaWVudHNGcm9tQ2Fj
aGUoYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uKQotewotICAgIGlmIChtX2ludmFsaWRhdGlvbkJs
b2NrZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpcEJvdW5kYXJpZXMgPSBGbG9hdFJl
Y3QoKTsKLSAgICBpZiAoIW1fY2xpcHBlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVsZXRlQWxs
VmFsdWVzKG1fY2xpcHBlcik7Ci0gICAgICAgIG1fY2xpcHBlci5jbGVhcigpOwotICAgIH0KLQot
ICAgIG1hcmtBbGxDbGllbnRzRm9ySW52YWxpZGF0aW9uKG1hcmtGb3JJbnZhbGlkYXRpb24gPyBM
YXlvdXRBbmRCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7
Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpyZW1vdmVDbGllbnRGcm9tQ2Fj
aGUoUmVuZGVyT2JqZWN0KiBjbGllbnQsIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbikKLXsKLSAg
ICBBU1NFUlQoY2xpZW50KTsKLSAgICBpZiAobV9pbnZhbGlkYXRpb25CbG9ja2VkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9jbGlwcGVyLmNvbnRhaW5zKGNsaWVudCkpCi0gICAgICAg
IGRlbGV0ZSBtX2NsaXBwZXIudGFrZShjbGllbnQpOwotCi0gICAgbWFya0NsaWVudEZvckludmFs
aWRhdGlvbihjbGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52YWxpZGF0
aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHls
ZSosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9k
ZSkKLXsKLSAgICBBU1NFUlQob2JqZWN0KTsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0jaWZuZGVm
IE5ERUJVRwotICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgPT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlc291cmNlTW9kZSk7Ci0jZW5kaWYKLQotICAgIHJl
dHVybiBhcHBseUNsaXBwaW5nVG9Db250ZXh0KG9iamVjdCwgb2JqZWN0LT5vYmplY3RCb3VuZGlu
Z0JveCgpLCBvYmplY3QtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCksIGNvbnRleHQp
OwotfQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6cGF0aE9ubHlDbGlwcGluZyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdC
b3gpCi17Ci0gICAgLy8gSWYgdGhlIGN1cnJlbnQgY2xpcC1wYXRoIGdldHMgY2xpcHBlZCBpdHNl
bGYsIHdlIGhhdmUgdG8gZmFsbGJhY2sgdG8gbWFza2luZy4KLSAgICBpZiAoIXN0eWxlKCktPnN2
Z1N0eWxlKCktPmNsaXBwZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIFdpbmRSdWxlIGNsaXBSdWxlID0gUlVMRV9OT05aRVJPOwotICAgIFBhdGggY2xp
cFBhdGggPSBQYXRoKCk7Ci0KLSAgICAvLyBJZiBjbGlwLXBhdGggb25seSBjb250YWlucyBvbmUg
dmlzaWJsZSBzaGFwZSBvciBwYXRoLCB3ZSBjYW4gdXNlIHBhdGgtYmFzZWQgY2xpcHBpbmcuIElu
dmlzaWJsZQotICAgIC8vIHNoYXBlcyBkb24ndCBhZmZlY3QgdGhlIGNsaXBwaW5nIGFuZCBjYW4g
YmUgaWdub3JlZC4gSWYgY2xpcC1wYXRoIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUKLSAgICAvLyB2
aXNpYmxlIHNoYXBlLCB0aGUgYWRkaXRpdmUgY2xpcHBpbmcgbWF5IG5vdCB3b3JrLCBjYXVzZWQg
YnkgdGhlIGNsaXBSdWxlLiBFdmVuT2RkCi0gICAgLy8gYXMgd2VsbCBhcyBOb25aZXJvIGNhbiBj
YXVzZSBzZWxmLWNsaXBwaW5nIG9mIHRoZSBlbGVtZW50cy4KLSAgICAvLyBTZWUgYWxzbyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcvcGFpbnRpbmcuaHRtbCNGaWxsUnVsZVByb3BlcnR5Ci0gICAg
Zm9yIChOb2RlKiBjaGlsZE5vZGUgPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGROb2RlOyBj
aGlsZE5vZGUgPSBjaGlsZE5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5k
ZXJlcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBPbmx5IHNoYXBlcyBvciBw
YXRocyBhcmUgc3VwcG9ydGVkIGZvciBkaXJlY3QgY2xpcHBpbmcuIFdlIG5lZWQgdG8gZmFsbGJh
Y2sgdG8gbWFza2luZyBmb3IgdGV4dHMuCi0gICAgICAgIGlmIChyZW5kZXJlci0+aXNTVkdUZXh0
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghY2hpbGROb2RlLT5p
c1NWR0VsZW1lbnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlz
U3R5bGVkVHJhbnNmb3JtYWJsZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBzdHlsZWQgPSBzdGF0aWNfY2FzdDxTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KGNoaWxkTm9kZSk7Ci0gICAgICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwotICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxl
LT5kaXNwbGF5KCkgPT0gTk9ORSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCi0g
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdT
dHlsZSA9IHN0eWxlLT5zdmdTdHlsZSgpOwotICAgICAgICAvLyBDdXJyZW50IHNoYXBlIGluIGNs
aXAtcGF0aCBnZXRzIGNsaXBwZWQgdG9vLiBGYWxsYmFjayB0byBtYXNraW5nLgotICAgICAgICBp
ZiAoIXN2Z1N0eWxlLT5jbGlwcGVyUmVzb3VyY2UoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIG1hc2tpbmcsIGlmIHRoZXJlIGlz
IG1vcmUgdGhhbiBvbmUgY2xpcHBpbmcgcGF0aC4KLSAgICAgICAgaWYgKGNsaXBQYXRoLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgc3R5bGVkLT50b0NsaXBQYXRoKGNsaXBQYXRoKTsKLSAgICAg
ICAgICAgIGNsaXBSdWxlID0gc3ZnU3R5bGUtPmNsaXBSdWxlKCk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBPbmx5IG9uZSB2aXNpYmxl
IHNoYXBlL3BhdGggd2FzIGZvdW5kLiBEaXJlY3RseSBjb250aW51ZSBjbGlwcGluZyBhbmQgdHJh
bnNmb3JtIHRoZSBjb250ZW50IHRvIHVzZXJzcGFjZSBpZiBuZWNlc3NhcnkuCi0gICAgaWYgKHN0
YXRpY19jYXN0PFNWR0NsaXBQYXRoRWxlbWVudCo+KG5vZGUoKSktPmNsaXBQYXRoVW5pdHMoKSA9
PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKLSAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0
ZShvYmplY3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7Ci0gICAgICAg
IHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2Jq
ZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwotICAgICAgICBjbGlwUGF0aC50cmFuc2Zvcm0odHJh
bnNmb3JtKTsKLSAgICB9Ci0gICAgLy8gVGhlIFNWRyBzcGVjaWZpY2F0aW9uIHdhbnRzIHVzIHRv
IGNsaXAgZXZlcnl0aGluZywgaWYgY2xpcC1wYXRoIGRvZXNuJ3QgaGF2ZSBhIGNoaWxkLgotICAg
IGlmIChjbGlwUGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIGNsaXBQYXRoLmFkZFJlY3QoRmxvYXRS
ZWN0KCkpOwotICAgIGNvbnRleHQtPmNsaXBQYXRoKGNsaXBQYXRoLCBjbGlwUnVsZSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNs
aXBwaW5nVG9Db250ZXh0KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBGbG9hdFJlY3QmIG9i
amVjdEJvdW5kaW5nQm94LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiByZXBhaW50UmVjdCwgR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0KQotewotICAgIGlmICghbV9jbGlwcGVyLmNvbnRhaW5zKG9iamVjdCkpCi0g
ICAgICAgIG1fY2xpcHBlci5zZXQob2JqZWN0LCBuZXcgQ2xpcHBlckRhdGEpOwotCi0gICAgYm9v
bCBzaG91bGRDcmVhdGVDbGlwRGF0YSA9IGZhbHNlOwotICAgIENsaXBwZXJEYXRhKiBjbGlwcGVy
RGF0YSA9IG1fY2xpcHBlci5nZXQob2JqZWN0KTsKLSAgICBpZiAoIWNsaXBwZXJEYXRhLT5jbGlw
TWFza0ltYWdlKSB7Ci0gICAgICAgIGlmIChwYXRoT25seUNsaXBwaW5nKGNvbnRleHQsIG9iamVj
dEJvdW5kaW5nQm94KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBzaG91bGRD
cmVhdGVDbGlwRGF0YSA9IHRydWU7Ci0gICAgfQotCi0gICAgQWZmaW5lVHJhbnNmb3JtIGFic29s
dXRlVHJhbnNmb3JtOwotICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5zZm9y
bWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKG9iamVjdCwgYWJzb2x1dGVUcmFu
c2Zvcm0pOwotCi0gICAgRmxvYXRSZWN0IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVHJh
bnNmb3JtLm1hcFJlY3QocmVwYWludFJlY3QpOwotICAgIEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1
dGVUYXJnZXRSZWN0ID0gU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0
UmVjdEZvclJlbmRlcmVyKG9iamVjdCwgYWJzb2x1dGVUYXJnZXRSZWN0KTsKLQotICAgIGlmIChz
aG91bGRDcmVhdGVDbGlwRGF0YSAmJiAhY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgaWYgKCFTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZmZl
cihhYnNvbHV0ZVRhcmdldFJlY3QsIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIGNsaXBwZXJE
YXRhLT5jbGlwTWFza0ltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHQqIG1hc2tDb250ZXh0ID0gY2xp
cHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UtPmNvbnRleHQoKTsKLSAgICAgICAgQVNTRVJUKG1hc2tD
b250ZXh0KTsKLQotICAgICAgICAvLyBUaGUgc2F2ZS9yZXN0b3JlIHBhaXIgaXMgbmVlZGVkIGZv
ciBjbGlwVG9JbWFnZUJ1ZmZlciAtIGl0IGRvZXNuJ3Qgd29yayB3aXRob3V0IGl0IG9uIG5vbi1D
ZyBwbGF0Zm9ybXMuCi0gICAgICAgIG1hc2tDb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIG1hc2tD
b250ZXh0LT50cmFuc2xhdGUoLWNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QueCgpLCAtY2xhbXBl
ZEFic29sdXRlVGFyZ2V0UmVjdC55KCkpOwotICAgICAgICBtYXNrQ29udGV4dC0+Y29uY2F0Q1RN
KGFic29sdXRlVHJhbnNmb3JtKTsKLQotICAgICAgICAvLyBjbGlwUGF0aCBjYW4gYWxzbyBiZSBj
bGlwcGVkIGJ5IGFub3RoZXIgY2xpcFBhdGguCi0gICAgICAgIGlmIChTVkdSZXNvdXJjZXMqIHJl
c291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmpl
Y3QodGhpcykpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNs
aXBwZXIgPSByZXNvdXJjZXMtPmNsaXBwZXIoKSkgewotICAgICAgICAgICAgICAgIGlmICghY2xp
cHBlci0+YXBwbHlDbGlwcGluZ1RvQ29udGV4dCh0aGlzLCBvYmplY3RCb3VuZGluZ0JveCwgcmVw
YWludFJlY3QsIG1hc2tDb250ZXh0KSkgewotICAgICAgICAgICAgICAgICAgICBtYXNrQ29udGV4
dC0+cmVzdG9yZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZHJhd0NvbnRl
bnRJbnRvTWFza0ltYWdlKGNsaXBwZXJEYXRhLCBvYmplY3RCb3VuZGluZ0JveCk7Ci0gICAgICAg
IG1hc2tDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgfQotCi0gICAgaWYgKCFjbGlwcGVyRGF0YS0+
Y2xpcE1hc2tJbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU1ZHSW1hZ2VCdWZm
ZXJUb29sczo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29udGV4dCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNs
YW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmRyYXdD
b250ZW50SW50b01hc2tJbWFnZShDbGlwcGVyRGF0YSogY2xpcHBlckRhdGEsIGNvbnN0IEZsb2F0
UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gpCi17Ci0gICAgQVNTRVJUKGNsaXBwZXJEYXRhKTsKLSAg
ICBBU1NFUlQoY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UpOwotCi0gICAgR3JhcGhpY3NDb250
ZXh0KiBtYXNrQ29udGV4dCA9IGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlLT5jb250ZXh0KCk7
Ci0gICAgQVNTRVJUKG1hc2tDb250ZXh0KTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBtYXNrQ29u
dGVudFRyYW5zZm9ybWF0aW9uOwotICAgIFNWR0NsaXBQYXRoRWxlbWVudCogY2xpcFBhdGggPSBz
dGF0aWNfY2FzdDxTVkdDbGlwUGF0aEVsZW1lbnQqPihub2RlKCkpOwotICAgIGlmIChjbGlwUGF0
aC0+Y2xpcFBhdGhVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RC
T1VORElOR0JPWCkgewotICAgICAgICBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0
ZShvYmplY3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7Ci0gICAgICAg
IG1hc2tDb250ZW50VHJhbnNmb3JtYXRpb24uc2NhbGVOb25Vbmlmb3JtKG9iamVjdEJvdW5kaW5n
Qm94LndpZHRoKCksIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpKTsKLSAgICAgICAgbWFza0Nv
bnRleHQtPmNvbmNhdENUTShtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uKTsKLSAgICB9Ci0KLSAg
ICAvLyBEcmF3IGFsbCBjbGlwUGF0aCBjaGlsZHJlbiBpbnRvIGEgZ2xvYmFsIG1hc2suCi0gICAg
Zm9yIChOb2RlKiBjaGlsZE5vZGUgPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGROb2RlOyBj
aGlsZE5vZGUgPSBjaGlsZE5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFjaGls
ZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGRO
b2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgICAgIGlm
ICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNpYmlsaXR5
KCkgIT0gVklTSUJMRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFdpbmRSdWxl
IG5ld0NsaXBSdWxlID0gc3R5bGUtPnN2Z1N0eWxlKCktPmNsaXBSdWxlKCk7Ci0gICAgICAgIGJv
b2wgaXNVc2VFbGVtZW50ID0gcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIo
KTsKLSAgICAgICAgaWYgKGlzVXNlRWxlbWVudCkgewotICAgICAgICAgICAgU1ZHVXNlRWxlbWVu
dCogdXNlRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1VzZUVsZW1lbnQqPihjaGlsZE5vZGUpOwot
ICAgICAgICAgICAgcmVuZGVyZXIgPSB1c2VFbGVtZW50LT5yZW5kZXJlckNsaXBDaGlsZCgpOwot
ICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGlmICghdXNlRWxlbWVudC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpjbGlwX3J1
bGVBdHRyKSkKLSAgICAgICAgICAgICAgICBuZXdDbGlwUnVsZSA9IHJlbmRlcmVyLT5zdHlsZSgp
LT5zdmdTdHlsZSgpLT5jbGlwUnVsZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT25seSBz
aGFwZXMsIHBhdGhzIGFuZCB0ZXh0cyBhcmUgYWxsb3dlZCBmb3IgY2xpcHBpbmcuCi0gICAgICAg
IGlmICghcmVuZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBTYXZlIHRoZSBvbGQgUmVuZGVyU3R5
bGUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGZvciByZXN0b3JpbmcgYWZ0ZXIgZHJhd2luZwotICAg
ICAgICAvLyBpdCB0byB0aGUgTWFza0ltYWdlLiBUaGUgbmV3IGludGVybWVkaWF0ZSBSZW5kZXJT
dHlsZSBuZWVkcyB0byBpbmhlcml0IGZyb20KLSAgICAgICAgLy8gdGhlIG9sZCBvbmUuCi0gICAg
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gb2xkUmVuZGVyU3R5bGUgPSByZW5kZXJlci0+c3R5bGUo
KTsKLSAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdSZW5kZXJTdHlsZSA9IFJlbmRlclN0
eWxlOjpjbG9uZShvbGRSZW5kZXJTdHlsZS5nZXQoKSk7Ci0gICAgICAgIFNWR1JlbmRlclN0eWxl
KiBzdmdTdHlsZSA9IG5ld1JlbmRlclN0eWxlLmdldCgpLT5hY2Nlc3NTVkdTdHlsZSgpOwotICAg
ICAgICBzdmdTdHlsZS0+c2V0RmlsbFBhaW50KFNWR1BhaW50OjpkZWZhdWx0RmlsbCgpKTsKLSAg
ICAgICAgc3ZnU3R5bGUtPnNldFN0cm9rZVBhaW50KFNWR1BhaW50OjpkZWZhdWx0U3Ryb2tlKCkp
OwotICAgICAgICBzdmdTdHlsZS0+c2V0RmlsbFJ1bGUobmV3Q2xpcFJ1bGUpOwotICAgICAgICBu
ZXdSZW5kZXJTdHlsZS5nZXQoKS0+c2V0T3BhY2l0eSgxLjBmKTsKLSAgICAgICAgc3ZnU3R5bGUt
PnNldEZpbGxPcGFjaXR5KDEuMGYpOwotICAgICAgICBzdmdTdHlsZS0+c2V0U3Ryb2tlT3BhY2l0
eSgxLjBmKTsKLSAgICAgICAgc3ZnU3R5bGUtPnNldEZpbHRlclJlc291cmNlKFN0cmluZygpKTsK
LSAgICAgICAgc3ZnU3R5bGUtPnNldE1hc2tlclJlc291cmNlKFN0cmluZygpKTsKLQotICAgICAg
ICAvLyBUaGUgc2V0U3R5bGUoKSBjYWxsIHJlc3VsdHMgaW4gYSBzdHlsZURpZENoYW5nZSgpIGNh
bGwsIHdoaWNoIGluIHR1cm4gaW52YWxpZGF0aW9ucyB0aGUgcmVzb3VyY2VzLgotICAgICAgICAv
LyBBcyB3ZSdyZSBtdXRhdGluZyB0aGUgcmVzb3VyY2Ugb24gcHVycG9zZSwgYmxvY2sgdXBkYXRl
cyB1bnRpbCB3ZSd2ZSByZXNldHRlZCB0aGUgc3R5bGUgYWdhaW4uCi0gICAgICAgIG1faW52YWxp
ZGF0aW9uQmxvY2tlZCA9IHRydWU7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXRTdHlsZShuZXdSZW5k
ZXJTdHlsZS5yZWxlYXNlKCkpOwotCi0gICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgPHVzZT4g
ZWxlbWVudCwgd2Ugb2J0YWluZWQgaXRzIHJlbmRlcmVyZSBhYm92ZSwgdG8gcmV0cmlldmUgaXRz
IGNsaXBSdWxlLgotICAgICAgICAvLyBXZSBoYXZlIHRvIHBhc3MgdGhlIDx1c2U+IHJlbmRlcmVy
IGl0c2VsZiB0byByZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcigpIHRvIGFwcGx5IGl0J3MgeC95
L3RyYW5zZm9ybS9ldGMuIHZhbHVlcyB3aGVuIHJlbmRlcmluZy4KLSAgICAgICAgLy8gU28gaWYg
aXNVc2VFbGVtZW50IGlzIHRydWUsIHJlZmV0Y2ggdGhlIGNoaWxkTm9kZS0+cmVuZGVyZXIoKSwg
YXMgcmVuZGVyZXIgZ290IG92ZXJyaWRlbiBhYm92ZS4KLSAgICAgICAgU1ZHSW1hZ2VCdWZmZXJU
b29sczo6cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1h
Z2UuZ2V0KCksIGlzVXNlRWxlbWVudCA/IGNoaWxkTm9kZS0+cmVuZGVyZXIoKSA6IHJlbmRlcmVy
LCBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uKTsKLQotICAgICAgICByZW5kZXJlci0+c2V0U3R5
bGUob2xkUmVuZGVyU3R5bGUucmVsZWFzZSgpKTsKLSAgICAgICAgbV9pbnZhbGlkYXRpb25CbG9j
a2VkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyOjpjYWxjdWxhdGVDbGlwQ29udGVudFJlcGFpbnRSZWN0KCkKLXsK
LSAgICAvLyBUaGlzIGlzIGEgcm91Z2ggaGV1cmlzdGljIHRvIGFwcHJhaXNlIHRoZSBjbGlwIHNp
emUgYW5kIGRvZXNuJ3QgY29uc2lkZXIgY2xpcCBvbiBjbGlwLgotICAgIGZvciAoTm9kZSogY2hp
bGROb2RlID0gbm9kZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkTm9kZTsgY2hpbGROb2RlID0gY2hp
bGROb2RlLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBjaGlsZE5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0Vs
ZW1lbnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVk
KCkgfHwgIXJlbmRlcmVyKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVu
ZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVy
LT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgICAg
IGlmICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNpYmls
aXR5KCkgIT0gVklTSUJMRSkKLSAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9jbGlw
Qm91bmRhcmllcy51bml0ZShyZW5kZXJlci0+bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLm1hcFJl
Y3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKLSAgICB9Ci19
Ci0KLWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpoaXRUZXN0Q2xpcENvbnRlbnQoY29u
c3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRQb2ludCYgbm9kZUF0
UG9pbnQpCi17Ci0gICAgRmxvYXRQb2ludCBwb2ludCA9IG5vZGVBdFBvaW50OwotICAgIGlmICgh
U1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYSh0aGlzLCBwb2ludCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzdGF0aWNfY2FzdDxTVkdDbGlwUGF0aEVsZW1l
bnQqPihub2RlKCkpLT5jbGlwUGF0aFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9U
WVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zv
cm07Ci0gICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgpLCBv
YmplY3RCb3VuZGluZ0JveC55KCkpOwotICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3Jt
KG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpKTsK
LSAgICAgICAgcG9pbnQgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50KTsKLSAg
ICB9Ci0KLSAgICBmb3IgKE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUoKS0+Zmlyc3RDaGlsZCgpOyBj
aGlsZE5vZGU7IGNoaWxkTm9kZSA9IGNoaWxkTm9kZS0+bmV4dFNpYmxpbmcoKSkgewotICAgICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2RlLT5yZW5kZXJlcigpOwotICAgICAg
ICBpZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0VsZW1l
bnQqPihjaGlsZE5vZGUpLT5pc1N0eWxlZCgpIHx8ICFyZW5kZXJlcikKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgoKSAmJiAhcmVuZGVyZXIt
PmlzU1ZHVGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEludFBvaW50IGhpdFBvaW50OwotICAg
ICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChoaXRQb2ludCk7Ci0gICAgICAgIGlmIChyZW5kZXJl
ci0+bm9kZUF0RmxvYXRQb2ludChIaXRUZXN0UmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6U1ZHQ2xp
cENvbnRlbnQpLCByZXN1bHQsIHBvaW50LCBIaXRUZXN0Rm9yZWdyb3VuZCkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUZsb2F0UmVj
dCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgLy8gUmVzb3VyY2Ugd2FzIG5vdCBsYXlvdXRlZCB5ZXQuIEdp
dmUgYmFjayB0aGUgYm91bmRpbmdCb3ggb2YgdGhlIG9iamVjdC4KLSAgICBpZiAoc2VsZk5lZWRz
TGF5b3V0KCkpCi0gICAgICAgIHJldHVybiBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7Ci0g
ICAgCi0gICAgaWYgKG1fY2xpcEJvdW5kYXJpZXMuaXNFbXB0eSgpKQotICAgICAgICBjYWxjdWxh
dGVDbGlwQ29udGVudFJlcGFpbnRSZWN0KCk7Ci0KLSAgICBpZiAoc3RhdGljX2Nhc3Q8U1ZHQ2xp
cFBhdGhFbGVtZW50Kj4obm9kZSgpKS0+Y2xpcFBhdGhVbml0cygpID09IFNWR1VuaXRUeXBlczo6
U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAgICAgICBGbG9hdFJlY3Qgb2Jq
ZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7Ci0gICAgICAgIEFm
ZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob2Jq
ZWN0Qm91bmRpbmdCb3gueCgpLCBvYmplY3RCb3VuZGluZ0JveC55KCkpOwotICAgICAgICB0cmFu
c2Zvcm0uc2NhbGVOb25Vbmlmb3JtKG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJv
dW5kaW5nQm94LmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS5tYXBSZWN0KG1f
Y2xpcEJvdW5kYXJpZXMpOwotICAgIH0KLQotICAgIHJldHVybiBtX2NsaXBCb3VuZGFyaWVzOwot
fQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaAkocmV2aXNpb24gNzUz
NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcl9oCi0jZGVmaW5lIFJlbmRlclNWR1Jl
c291cmNlQ2xpcHBlcl9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR0NsaXBQYXRoRWxlbWVudC5o
IgotI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0
IENsaXBwZXJEYXRhIDogRmFzdEFsbG9jQmFzZSB7Ci0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBj
bGlwTWFza0ltYWdlOwotfTsKLQotY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyIDogcHVi
bGljIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIoU1ZHQ2xpcFBhdGhFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyKCk7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5h
bWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyIjsgfQotCi0gICAg
dmlydHVhbCB2b2lkIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9vbCBtYXJrRm9ySW52YWxp
ZGF0aW9uID0gdHJ1ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShS
ZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3Jh
cGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVh
bCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKTsKLQotICAgIHZp
cnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IENsaXBwZXJSZXNvdXJjZVR5cGU7IH0KLSAgICAKLSAgICBib29sIGhpdFRlc3RDbGlwQ29udGVu
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0KLSAgICBTVkdVbml0VHlw
ZXM6OlNWR1VuaXRUeXBlIGNsaXBQYXRoVW5pdHMoKSBjb25zdCB7IHJldHVybiB0b1VuaXRUeXBl
KHN0YXRpY19jYXN0PFNWR0NsaXBQYXRoRWxlbWVudCo+KG5vZGUoKSktPmNsaXBQYXRoVW5pdHMo
KSk7IH0KLQotICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgc19yZXNvdXJjZVR5cGU7
Ci1wcml2YXRlOgotICAgIC8vIGNsaXBQYXRoIGNhbiBiZSBjbGlwcGVkIHRvbywgYnV0IGRvbid0
IGhhdmUgYSBib3VuZGluZ0JveCBvciByZXBhaW50UmVjdC4gU28gd2UgY2FuJ3QgY2FsbAotICAg
IC8vIGFwcGx5UmVzb3VyY2UgZGlyZWN0bHkgYW5kIHVzZSB0aGUgcmVjdHMgZnJvbSB0aGUgb2Jq
ZWN0LCBzaW5jZSB0aGV5IGFyZSBlbXB0eSBmb3IgUmVuZGVyU1ZHUmVzb3VyY2VzCi0gICAgYm9v
bCBhcHBseUNsaXBwaW5nVG9Db250ZXh0KFJlbmRlck9iamVjdCosIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dCopOwotICAgIGJvb2wgcGF0aE9ubHlD
bGlwcGluZyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBib29sIGRy
YXdDb250ZW50SW50b01hc2tJbWFnZShDbGlwcGVyRGF0YSosIGNvbnN0IEZsb2F0UmVjdCYgb2Jq
ZWN0Qm91bmRpbmdCb3gpOwotICAgIHZvaWQgY2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVj
dCgpOwotCi0gICAgYm9vbCBtX2ludmFsaWRhdGlvbkJsb2NrZWQ7Ci0gICAgRmxvYXRSZWN0IG1f
Y2xpcEJvdW5kYXJpZXM7Ci0gICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBDbGlwcGVyRGF0YSo+
IG1fY2xpcHBlcjsKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNw
cAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQot
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCi0KLSNpbmNsdWRlICJSZW5k
ZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGlu
ZSBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIHN2Z0V4dGVuc2lvbnNGcm9tTm9kZShOb2RlKiBub2Rl
KQotewotICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+ZG9jdW1lbnQoKSk7Ci0g
ICAgcmV0dXJuIG5vZGUtPmRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKTsKLX0KLQot
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKFNW
R1N0eWxlZEVsZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIobm9k
ZSkKLSAgICAsIG1faWQobm9kZS0+aGFzSUQoKSA/IG5vZGUtPmdldElkQXR0cmlidXRlKCkgOiBu
dWxsQXRvbSkKLSAgICAsIG1fcmVnaXN0ZXJlZChmYWxzZSkKLXsKLX0KLQotUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXI6On5SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcigpCi17Ci0gICAgaWYg
KG1fcmVnaXN0ZXJlZCkKLSAgICAgICAgc3ZnRXh0ZW5zaW9uc0Zyb21Ob2RlKG5vZGUoKSktPnJl
bW92ZVJlc291cmNlKG1faWQpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
OjpsYXlvdXQoKQotewotICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBpZiBvdXIgbGF5
b3V0IGNoYW5nZWQuCi0gICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQo
KSkKLSAgICAgICAgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOwotCi0gICAgUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyOjpsYXlvdXQoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lcjo6ZGVzdHJveSgpCi17Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlc291cmNlRGVz
dHJveWVkKHRoaXMpOwotICAgIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6ZGVzdHJveSgpOwot
fQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIFJl
bmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwot
Ci0gICAgaWYgKCFtX3JlZ2lzdGVyZWQpIHsKLSAgICAgICAgbV9yZWdpc3RlcmVkID0gdHJ1ZTsK
LSAgICAgICAgcmVnaXN0ZXJSZXNvdXJjZSgpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lcjo6aWRDaGFuZ2VkKCkKLXsKLSAgICAvLyBJbnZhbGlkYXRlIGFsbCBv
dXIgY3VycmVudCBjbGllbnRzLgotICAgIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoKTsKLQot
ICAgIC8vIFJlbW92ZSBvbGQgaWQsIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBwcmVzZW50IGlu
IGNhY2hlLgotICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IHN2Z0V4dGVu
c2lvbnNGcm9tTm9kZShub2RlKCkpOwotICAgIGV4dGVuc2lvbnMtPnJlbW92ZVJlc291cmNlKG1f
aWQpOwotICAgIG1faWQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKS0+Z2V0SWRBdHRy
aWJ1dGUoKTsKLQotICAgIHJlZ2lzdGVyUmVzb3VyY2UoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lcjo6bWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24oSW52YWxpZGF0
aW9uTW9kZSBtb2RlKQotewotICAgIGlmIChtX2NsaWVudHMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBib29sIG5lZWRzTGF5b3V0ID0gbW9kZSA9PSBMYXlvdXRBbmRCb3VuZGFy
aWVzSW52YWxpZGF0aW9uOwotICAgIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IG1vZGUgIT0g
UGFyZW50T25seUludmFsaWRhdGlvbjsKLQotICAgIEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj46Oml0
ZXJhdG9yIGVuZCA9IG1fY2xpZW50cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyT2Jq
ZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBSZW5kZXJPYmplY3QqIGNsaWVudCA9ICppdDsKLSAgICAgICAgaWYgKGNsaWVu
dC0+aXNTVkdSZXNvdXJjZUNvbnRhaW5lcigpKSB7Ci0gICAgICAgICAgICBjbGllbnQtPnRvUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoKS0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShtYXJr
Rm9ySW52YWxpZGF0aW9uKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1hcmtGb3JJbnZhbGlkYXRpb24pCi0gICAgICAgICAgICBtYXJrQ2xpZW50Rm9y
SW52YWxpZGF0aW9uKGNsaWVudCwgbW9kZSk7Ci0KLSAgICAgICAgaWYgKG5lZWRzTGF5b3V0KQot
ICAgICAgICAgICAgY2xpZW50LT5zZXROZWVkc0xheW91dCh0cnVlKTsKLQotICAgICAgICAvLyBJ
bnZhbGlkYXRlIHJlc291cmNlcyBpbiBhbmNlc3RvciBjaGFpbiwgaWYgbmVlZGVkLgotICAgICAg
ICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBjbGllbnQtPnBhcmVudCgpOwotICAgICAgICB3aGls
ZSAoY3VycmVudCkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmlzU1ZHUmVzb3VyY2VDb250
YWluZXIoKSkgewotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnRvUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXIoKS0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShtYXJrRm9ySW52YWxpZGF0aW9u
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Y3VycmVudCA9IGN1cnJlbnQtPnBhcmVudCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjptYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKFJl
bmRlck9iamVjdCogY2xpZW50LCBJbnZhbGlkYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgQVNTRVJU
KGNsaWVudCk7Ci0gICAgQVNTRVJUKCFtX2NsaWVudHMuaXNFbXB0eSgpKTsKLQotICAgIHN3aXRj
aCAobW9kZSkgewotICAgIGNhc2UgTGF5b3V0QW5kQm91bmRhcmllc0ludmFsaWRhdGlvbjoKLSAg
ICBjYXNlIEJvdW5kYXJpZXNJbnZhbGlkYXRpb246Ci0gICAgICAgIGNsaWVudC0+c2V0TmVlZHNC
b3VuZGFyaWVzVXBkYXRlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVwYWludEludmFs
aWRhdGlvbjoKLSAgICAgICAgaWYgKGNsaWVudC0+dmlldygpKQotICAgICAgICAgICAgY2xpZW50
LT5yZXBhaW50KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGFyZW50T25seUludmFsaWRh
dGlvbjoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyOjphZGRDbGllbnQoUmVuZGVyT2JqZWN0KiBjbGllbnQpCi17Ci0gICAgQVNTRVJU
KGNsaWVudCk7Ci0gICAgbV9jbGllbnRzLmFkZChjbGllbnQpOwotfQotCi12b2lkIFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyOjpyZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0KiBjbGllbnQpCi17
Ci0gICAgQVNTRVJUKGNsaWVudCk7Ci0gICAgbV9jbGllbnRzLnJlbW92ZShjbGllbnQpOwotfQot
Ci12b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291cmNlKCkKLXsK
LSAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lvbnMgPSBzdmdFeHRlbnNpb25zRnJv
bU5vZGUobm9kZSgpKTsKLSAgICBpZiAoIWV4dGVuc2lvbnMtPmlzUGVuZGluZ1Jlc291cmNlKG1f
aWQpKSB7Ci0gICAgICAgIGV4dGVuc2lvbnMtPmFkZFJlc291cmNlKG1faWQsIHRoaXMpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgT3duUHRyPFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
U1ZHUGVuZGluZ0VsZW1lbnRzPiBjbGllbnRzKGV4dGVuc2lvbnMtPnJlbW92ZVBlbmRpbmdSZXNv
dXJjZShtX2lkKSk7Ci0KLSAgICAvLyBDYWNoZSB1cyB3aXRoIHRoZSBuZXcgaWQuCi0gICAgZXh0
ZW5zaW9ucy0+YWRkUmVzb3VyY2UobV9pZCwgdGhpcyk7Ci0KLSAgICAvLyBVcGRhdGUgY2FjaGVk
IHJlc291cmNlcyBvZiBwZW5kaW5nIGNsaWVudHMuCi0gICAgY29uc3QgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjpTVkdQZW5kaW5nRWxlbWVudHM6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMt
PmVuZCgpOwotICAgIGZvciAoU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpTVkdQZW5kaW5nRWxlbWVu
dHM6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2xpZW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSAoKml0KS0+cmVuZGVyZXIoKTsK
LSAgICAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBT
VkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50VXBkYXRlZEZyb21FbGVtZW50KHJlbmRlcmVyLCByZW5k
ZXJlci0+c3R5bGUoKSk7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0xheW91dCh0cnVlKTsK
LSAgICB9Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlLgotQWZmaW5l
VHJhbnNmb3JtIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxp
bmdTdHJva2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcmVz
b3VyY2VUcmFuc2Zvcm0pCi17Ci0gICAgaWYgKCFvYmplY3QtPmlzU1ZHUGF0aCgpKQotICAgICAg
ICByZXR1cm4gcmVzb3VyY2VUcmFuc2Zvcm07Ci0KLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50Kj4ob2JqZWN0LT5ub2RlKCkpOwotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBy
ZXNvdXJjZVRyYW5zZm9ybTsKLSAgICB0cmFuc2Zvcm0ubXVsdGlwbHkoZWxlbWVudC0+Z2V0U2Ny
ZWVuQ1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSkpOwotICAgIHJldHVybiB0
cmFuc2Zvcm07Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaAkocmV2aXNpb24gNzUz
NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aWZuZGVmIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyX2gKLSNkZWZpbmUgUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXJfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIDogcHVi
bGljIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVibGljIFJlbmRlclNWR1Jlc291cmNlIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwotICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdSZXNvdXJjZUNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KLSAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiB0b1JlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyKCkgeyByZXR1cm4gdGhpczsgfQotCi0gICAgc3RhdGljIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UoUmVuZGVyT2JqZWN0KiwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiByZXNvdXJjZVRyYW5zZm9ybSk7Ci0KLSAgICB2b2lkIGlkQ2hh
bmdlZCgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZW51bSBJbnZhbGlkYXRpb25Nb2RlIHsKLSAgICAg
ICAgTGF5b3V0QW5kQm91bmRhcmllc0ludmFsaWRhdGlvbiwKLSAgICAgICAgQm91bmRhcmllc0lu
dmFsaWRhdGlvbiwKLSAgICAgICAgUmVwYWludEludmFsaWRhdGlvbiwKLSAgICAgICAgUGFyZW50
T25seUludmFsaWRhdGlvbgotICAgIH07Ci0KLSAgICAvLyBVc2VkIGZyb20gdGhlIGludmFsaWRh
dGVDbGllbnQvaW52YWxpZGF0ZUNsaWVudHMgbWV0aG9kcyBmcm9tIGNsYXNzZXMsIGluaGVyaXRp
bmcgZnJvbSB1cy4KLSAgICB2b2lkIG1hcmtBbGxDbGllbnRzRm9ySW52YWxpZGF0aW9uKEludmFs
aWRhdGlvbk1vZGUpOwotICAgIHZvaWQgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihSZW5kZXJP
YmplY3QqLCBJbnZhbGlkYXRpb25Nb2RlKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3Mg
U1ZHUmVzb3VyY2VzQ2FjaGU7Ci0gICAgdm9pZCBhZGRDbGllbnQoUmVuZGVyT2JqZWN0Kik7Ci0g
ICAgdm9pZCByZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0Kik7Ci0KLXByaXZhdGU6Ci0gICAgdm9p
ZCByZWdpc3RlclJlc291cmNlKCk7Ci0KLSAgICBBdG9taWNTdHJpbmcgbV9pZDsKLSAgICBib29s
IG1fcmVnaXN0ZXJlZDsKLSAgICBIYXNoU2V0PFJlbmRlck9iamVjdCo+IG1fY2xpZW50czsKLX07
Ci0KLWlubGluZSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogZ2V0UmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXJCeUlkKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBp
ZCkKLXsKLSAgICBpZiAoaWQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlm
IChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVuZGVyUmVzb3VyY2UgPSBkb2N1bWVudC0+
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXNvdXJjZUJ5SWQoaWQpKQotICAgICAgICByZXR1cm4g
cmVuZGVyUmVzb3VyY2U7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
UmVuZGVyZXI+Ci1SZW5kZXJlciogZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCkKLXsKLSAgICBpZiAoUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIqIGNvbnRhaW5lciA9IGdldFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
QnlJZChkb2N1bWVudCwgaWQpKQotICAgICAgICByZXR1cm4gY29udGFpbmVyLT5jYXN0PFJlbmRl
cmVyPigpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMyOCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVy
LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9v
bHMuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKLQotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJh
bS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotc3RhdGljIGNvbnN0IGZsb2F0IGtNYXhG
aWx0ZXJTaXplID0gNTAwMC4wZjsKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1SZW5kZXJTVkdSZXNvdXJjZVR5cGUgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OnNfcmVzb3VyY2VUeXBlID0gRmlsdGVyUmVzb3VyY2VUeXBlOwotCi1SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIoU1ZHRmlsdGVyRWxlbWVudCogbm9k
ZSkKLSAgICA6IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKG5vZGUpCi17Ci19Ci0KLVJlbmRl
clNWR1Jlc291cmNlRmlsdGVyOjp+UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIoKQotewotICAgIGlm
IChtX2ZpbHRlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlbGV0ZUFsbFZh
bHVlcyhtX2ZpbHRlcik7Ci0gICAgbV9maWx0ZXIuY2xlYXIoKTsKLX0KLQotdm9pZCBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJ
bnZhbGlkYXRpb24pCi17Ci0gICAgaWYgKCFtX2ZpbHRlci5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ZGVsZXRlQWxsVmFsdWVzKG1fZmlsdGVyKTsKLSAgICAgICAgbV9maWx0ZXIuY2xlYXIoKTsKLSAg
ICB9Ci0KLSAgICBtYXJrQWxsQ2xpZW50c0ZvckludmFsaWRhdGlvbihtYXJrRm9ySW52YWxpZGF0
aW9uID8gTGF5b3V0QW5kQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlk
YXRpb24pOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVDbGllbnRG
cm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiBjbGllbnQsIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbikK
LXsKLSAgICBBU1NFUlQoY2xpZW50KTsKLQotICAgIGlmIChtX2ZpbHRlci5jb250YWlucyhjbGll
bnQpKQotICAgICAgICBkZWxldGUgbV9maWx0ZXIudGFrZShjbGllbnQpOwotCi0gICAgbWFya0Ns
aWVudEZvckludmFsaWRhdGlvbihjbGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFy
aWVzSW52YWxpZGF0aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7Ci19Ci0KLVBhc3NSZWZQ
dHI8U1ZHRmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0
aXZlcyhGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBTVkdGaWx0ZXJFbGVtZW50KiBmaWx0ZXJFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgYm9vbCBw
cmltaXRpdmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVtZW50LT5wcmltaXRpdmVVbml0cygp
ID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKLQotICAg
IC8vIEFkZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCi0gICAgUmVmUHRyPFNWR0ZpbHRlckJ1aWxk
ZXI+IGJ1aWxkZXIgPSBTVkdGaWx0ZXJCdWlsZGVyOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBmaWx0ZXJFbGVtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBu
b2RlLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghbm9kZS0+aXNTVkdFbGVtZW50KCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpOwotICAgICAgICBpZiAoIWVsZW1lbnQtPmlz
RmlsdGVyRWZmZWN0KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIGVmZmVjdEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqPihlbGVtZW50KTsKLSAgICAg
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gZWZmZWN0RWxlbWVudC0+YnVpbGQoYnVp
bGRlci5nZXQoKSwgZmlsdGVyKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAgICAgICAgICAg
IGJ1aWxkZXItPmNsZWFyRWZmZWN0cygpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IH0KLSAgICAgICAgYnVpbGRlci0+YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKGVmZmVj
dCk7Ci0gICAgICAgIGVmZmVjdEVsZW1lbnQtPnNldFN0YW5kYXJkQXR0cmlidXRlcyhwcmltaXRp
dmVCb3VuZGluZ0JveE1vZGUsIGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGJ1aWxkZXItPmFkZChl
ZmZlY3RFbGVtZW50LT5yZXN1bHQoKSwgZWZmZWN0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxk
ZXIucmVsZWFzZSgpOwotfQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpmaXRzSW5N
YXhpbXVtSW1hZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRTaXplJiBzY2FsZSkK
LXsKLSAgICBib29sIG1hdGNoZXNGaWx0ZXJTaXplID0gdHJ1ZTsKLSAgICBpZiAoc2l6ZS53aWR0
aCgpID4ga01heEZpbHRlclNpemUpIHsKLSAgICAgICAgc2NhbGUuc2V0V2lkdGgoc2NhbGUud2lk
dGgoKSAqIGtNYXhGaWx0ZXJTaXplIC8gc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgbWF0Y2hlc0Zp
bHRlclNpemUgPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHNpemUuaGVpZ2h0KCkgPiBrTWF4Rmls
dGVyU2l6ZSkgewotICAgICAgICBzY2FsZS5zZXRIZWlnaHQoc2NhbGUuaGVpZ2h0KCkgKiBrTWF4
RmlsdGVyU2l6ZSAvIHNpemUuaGVpZ2h0KCkpOwotICAgICAgICBtYXRjaGVzRmlsdGVyU2l6ZSA9
IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBtYXRjaGVzRmlsdGVyU2l6ZTsKLX0KLQotYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9i
amVjdCwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBz
aG9ydCByZXNvdXJjZU1vZGUpCi17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgQVNTRVJUKGNv
bnRleHQpOwotI2lmbmRlZiBOREVCVUcKLSAgICBBU1NFUlQocmVzb3VyY2VNb2RlID09IEFwcGx5
VG9EZWZhdWx0TW9kZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZXNvdXJjZU1vZGUpOwot
I2VuZGlmCi0KLSAgICAvLyBSZXR1cm5pbmcgZmFsc2UgaGVyZSwgdG8gYXZvaWQgZHJhd2luZ3Mg
b250byB0aGUgY29udGV4dC4gV2UganVzdCB3YW50IHRvCi0gICAgLy8gZHJhdyB0aGUgc3RvcmVk
IGZpbHRlciBvdXRwdXQsIG5vdCB0aGUgdW5maWx0ZXJlZCBvYmplY3QgYXMgd2VsbC4KLSAgICBp
ZiAobV9maWx0ZXIuY29udGFpbnMob2JqZWN0KSkgewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0
ZXJEYXRhID0gbV9maWx0ZXIuZ2V0KG9iamVjdCk7Ci0gICAgICAgIGlmIChmaWx0ZXJEYXRhLT5i
dWlsZGVkKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGRlbGV0ZSBtX2Zp
bHRlci50YWtlKG9iamVjdCk7IC8vIE9vcHMsIGhhdmUgdG8gcmVidWlsZCwgZ28gdGhyb3VnaCBu
b3JtYWwgY29kZSBwYXRoCi0gICAgfQotCi0gICAgT3duUHRyPEZpbHRlckRhdGE+IGZpbHRlckRh
dGEobmV3IEZpbHRlckRhdGEpOwotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IG9i
amVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKLQotICAgIFNWR0ZpbHRlckVsZW1lbnQqIGZpbHRl
ckVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBm
aWx0ZXJEYXRhLT5ib3VuZGFyaWVzID0gZmlsdGVyRWxlbWVudC0+ZmlsdGVyQm91bmRpbmdCb3go
dGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIGlmIChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRGV0ZXJtaW5lIGFic29sdXRl
IHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBmb3IgZmlsdGVyLiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0g
YWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2FsY3VsYXRlVHJh
bnNmb3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0ob2JqZWN0LCBhYnNvbHV0
ZVRyYW5zZm9ybSk7Ci0gICAgaWYgKCFhYnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRWxpbWluYXRlIHNoZWFyIG9mIHRoZSBh
YnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIHRvIGJlIGFibGUgdG8gcHJvZHVjZSB1bnNo
ZWFyZWQgdGlsZSBpbWFnZXMgZm9yIGZlVGlsZS4KLSAgICBmaWx0ZXJEYXRhLT5zaGVhckZyZWVB
YnNvbHV0ZVRyYW5zZm9ybSA9IEFmZmluZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybS54U2Nh
bGUoKSwgMCwgMCwgYWJzb2x1dGVUcmFuc2Zvcm0ueVNjYWxlKCksIGFic29sdXRlVHJhbnNmb3Jt
LmUoKSwgYWJzb2x1dGVUcmFuc2Zvcm0uZigpKTsKLQotICAgIC8vIERldGVybWluZSBhYnNvbHV0
ZSBib3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIgYW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4KLSAgICBG
bG9hdFJlY3QgYWJzb2x1dGVGaWx0ZXJCb3VuZGFyaWVzID0gZmlsdGVyRGF0YS0+c2hlYXJGcmVl
QWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzKTsKLSAgICBG
bG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IG9iamVjdC0+c3Ryb2tlQm91bmRpbmdCb3goKTsKLSAg
ICBkcmF3aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzKTsKLSAgICBG
bG9hdFJlY3QgYWJzb2x1dGVEcmF3aW5nUmVnaW9uID0gZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJz
b2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChkcmF3aW5nUmVnaW9uKTsKLQotICAgIC8vIENyZWF0ZSB0
aGUgU1ZHRmlsdGVyIG9iamVjdC4KLSAgICBib29sIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9
IGZpbHRlckVsZW1lbnQtPnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5J
VF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwotICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0Zp
bHRlcjo6Y3JlYXRlKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLCBhYnNv
bHV0ZURyYXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJEYXRhLT5ib3VuZGFy
aWVzLCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpOwotCi0gICAgLy8gQ3JlYXRlIGFsbCByZWxl
dmFudCBmaWx0ZXIgcHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gYnVpbGRQ
cmltaXRpdmVzKGZpbHRlckRhdGEtPmZpbHRlci5nZXQoKSk7Ci0gICAgaWYgKCFmaWx0ZXJEYXRh
LT5idWlsZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDYWxjdWxhdGUgdGhl
IHNjYWxlIGZhY3RvciBmb3IgdGhlIHVzZSBvZiBmaWx0ZXJSZXMuCi0gICAgLy8gQWxzbyBzZWUg
aHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNGaWx0ZXJFZmZlY3RzUmVnaW9u
Ci0gICAgRmxvYXRTaXplIHNjYWxlKDEsIDEpOwotICAgIGlmIChmaWx0ZXJFbGVtZW50LT5oYXNB
dHRyaWJ1dGUoU1ZHTmFtZXM6OmZpbHRlclJlc0F0dHIpKSB7Ci0gICAgICAgIHNjYWxlLnNldFdp
ZHRoKGZpbHRlckVsZW1lbnQtPmZpbHRlclJlc1goKSAvIGFic29sdXRlRmlsdGVyQm91bmRhcmll
cy53aWR0aCgpKTsKLSAgICAgICAgc2NhbGUuc2V0SGVpZ2h0KGZpbHRlckVsZW1lbnQtPmZpbHRl
clJlc1koKSAvIGFic29sdXRlRmlsdGVyQm91bmRhcmllcy5oZWlnaHQoKSk7Ci0gICAgfQotCi0g
ICAgaWYgKHNjYWxlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
RGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlh
dGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4K
LSAgICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247Ci0g
ICAgdGVtcFNvdXJjZVJlY3Quc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwot
ICAgIGZpdHNJbk1heGltdW1JbWFnZVNpemUodGVtcFNvdXJjZVJlY3Quc2l6ZSgpLCBzY2FsZSk7
Ci0KLSAgICAvLyBTZXQgdGhlIHNjYWxlIGxldmVsIGluIFNWR0ZpbHRlci4KLSAgICBmaWx0ZXJE
YXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotCi0gICAgRmlsdGVyRWZm
ZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwotICAg
IGlmICghbGFzdEVmZmVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bihsYXN0RWZmZWN0LCBmaWx0ZXJEYXRhLT5maWx0ZXIuZ2V0KCkpOwotICAgIEZsb2F0UmVjdCBz
dWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qg
b25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsCi0gICAgLy8gcmVjYWxj
dWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIGlmICgh
Zml0c0luTWF4aW11bUltYWdlU2l6ZShzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAg
ICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLSAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbihsYXN0RWZmZWN0LCBmaWx0ZXJEYXRhLT5maWx0ZXIuZ2V0KCkpOwotICAg
IH0KLQotICAgIC8vIElmIHRoZSBkcmF3aW5nUmVnaW9uIGlzIGVtcHR5LCB3ZSBoYXZlIHNvbWV0
aGluZyBsaWtlIDxnIGZpbHRlcj0iLi4iLz4uCi0gICAgLy8gRXZlbiBpZiB0aGUgdGFyZ2V0IG9i
amVjdEJvdW5kaW5nQm94KCkgaXMgZW1wdHksIHdlIHN0aWxsIGhhdmUgdG8gZHJhdyB0aGUgbGFz
dCBlZmZlY3QgcmVzdWx0IGltYWdlIGluIHBvc3RBcHBseVJlc291cmNlLgotICAgIGlmIChkcmF3
aW5nUmVnaW9uLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQoIW1fZmlsdGVyLmNvbnRhaW5z
KG9iamVjdCkpOwotICAgICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0Owot
ICAgICAgICBtX2ZpbHRlci5zZXQob2JqZWN0LCBmaWx0ZXJEYXRhLmxlYWtQdHIoKSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBhYnNvbHV0ZURyYXdpbmdSZWdpb24uc2Nh
bGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwotCi0gICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBzb3VyY2VHcmFwaGljOwotICAgIGlmICghU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRl
SW1hZ2VCdWZmZXIoYWJzb2x1dGVEcmF3aW5nUmVnaW9uLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24s
IHNvdXJjZUdyYXBoaWMsIENvbG9yU3BhY2VMaW5lYXJSR0IpKSB7Ci0gICAgICAgIEFTU0VSVCgh
bV9maWx0ZXIuY29udGFpbnMob2JqZWN0KSk7Ci0gICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29u
dGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIG1fZmlsdGVyLnNldChvYmplY3QsIGZpbHRlckRhdGEu
bGVha1B0cigpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBHcmFw
aGljc0NvbnRleHQqIHNvdXJjZUdyYXBoaWNDb250ZXh0ID0gc291cmNlR3JhcGhpYy0+Y29udGV4
dCgpOwotICAgIEFTU0VSVChzb3VyY2VHcmFwaGljQ29udGV4dCk7Ci0gIAotICAgIHNvdXJjZUdy
YXBoaWNDb250ZXh0LT50cmFuc2xhdGUoLWFic29sdXRlRHJhd2luZ1JlZ2lvbi54KCksIC1hYnNv
bHV0ZURyYXdpbmdSZWdpb24ueSgpKTsKLSAgICBpZiAoc2NhbGUud2lkdGgoKSAhPSAxIHx8IHNj
YWxlLmhlaWdodCgpICE9IDEpCi0gICAgICAgIHNvdXJjZUdyYXBoaWNDb250ZXh0LT5zY2FsZShz
Y2FsZSk7Ci0KLSAgICBzb3VyY2VHcmFwaGljQ29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEt
PnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKLSAgICBzb3VyY2VHcmFwaGljQ29udGV4dC0+
Y2xlYXJSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlRHJhd2luZ1JlZ2lvbi5z
aXplKCkpKTsKLSAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyID0gc291cmNlR3Jh
cGhpYy5yZWxlYXNlKCk7Ci0gICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4dDsK
LQotICAgIGNvbnRleHQgPSBzb3VyY2VHcmFwaGljQ29udGV4dDsKLQotICAgIEFTU0VSVCghbV9m
aWx0ZXIuY29udGFpbnMob2JqZWN0KSk7Ci0gICAgbV9maWx0ZXIuc2V0KG9iamVjdCwgZmlsdGVy
RGF0YS5sZWFrUHRyKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBH
cmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNv
bnN0IFBhdGgqKQotewotICAgIEFTU0VSVChvYmplY3QpOwotICAgIEFTU0VSVChjb250ZXh0KTsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgQVNTRVJUKHJlc291cmNlTW9kZSA9PSBBcHBseVRvRGVmYXVs
dE1vZGUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVzb3VyY2VNb2RlKTsKLSNlbmRpZgot
Ci0gICAgaWYgKCFtX2ZpbHRlci5jb250YWlucyhvYmplY3QpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0gbV9maWx0ZXIuZ2V0KG9iamVjdCk7Ci0gICAg
aWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVkKSB7Ci0gICAgICAgIGlmICghZmlsdGVyRGF0YS0+c2F2
ZWRDb250ZXh0KSB7Ci0gICAgICAgICAgICByZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0KTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnRleHQgPSBmaWx0
ZXJEYXRhLT5zYXZlZENvbnRleHQ7Ci0gICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9
IDA7Ci0jaWYgIVBMQVRGT1JNKENHKQotICAgICAgICBpZiAoZmlsdGVyRGF0YS0+c291cmNlR3Jh
cGhpY0J1ZmZlcikKLSAgICAgICAgICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXIt
PnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZURldmljZVJHQiwgQ29sb3JTcGFjZUxpbmVh
clJHQik7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBm
aWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0gICAgCi0gICAgaWYgKGxhc3RFZmZl
Y3QgJiYgIWZpbHRlckRhdGEtPmJvdW5kYXJpZXMuaXNFbXB0eSgpICYmICFsYXN0RWZmZWN0LT5m
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gVGhpcyBp
cyB0aGUgcmVhbCBmaWx0ZXJpbmcgb2YgdGhlIG9iamVjdC4gSXQganVzdCBuZWVkcyB0byBiZSBj
YWxsZWQgb24gdGhlCi0gICAgICAgIC8vIGluaXRpYWwgZmlsdGVyaW5nIHByb2Nlc3MuIFdlIGp1
c3QgdGFrZSB0aGUgc3RvcmVkIGZpbHRlciByZXN1bHQgb24gYQotICAgICAgICAvLyBzZWNvbmQg
ZHJhd2luZy4KLSAgICAgICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVkKSB7Ci0gICAgICAgICAg
ICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldFNvdXJjZUltYWdlKGZpbHRlckRhdGEtPnNvdXJjZUdy
YXBoaWNCdWZmZXIucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7
Ci0jaWYgIVBMQVRGT1JNKENHKQotICAgICAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gbGFzdEVmZmVjdC0+YXNJbWFnZUJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKHJlc3VsdElt
YWdlKQotICAgICAgICAgICAgICAgIHJlc3VsdEltYWdlLT50cmFuc2Zvcm1Db2xvclNwYWNlKENv
bG9yU3BhY2VMaW5lYXJSR0IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotI2VuZGlmCi0gICAgICAg
ICAgICBmaWx0ZXJEYXRhLT5idWlsZGVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RFZmZlY3QtPmFzSW1hZ2VCdWZmZXIoKTsKLSAg
ICAgICAgaWYgKHJlc3VsdEltYWdlKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0o
ZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpKTsKLQotICAg
ICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRhLT5maWx0ZXIt
PmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS0+ZmlsdGVyLT5maWx0
ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmNsaXAobGFz
dEVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFn
ZUJ1ZmZlcihyZXN1bHRJbWFnZSwgb2JqZWN0LT5zdHlsZSgpLT5jb2xvclNwYWNlKCksIGxhc3RF
ZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUo
ZmlsdGVyRGF0YS0+ZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkpOwotCi0gICAgICAgICAgICBj
b250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0p
OwotICAgICAgICB9Ci0gICAgfQotICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXIu
Y2xlYXIoKTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZXNvdXJj
ZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIGlmIChTVkdGaWx0ZXJF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyRWxlbWVudCo+KG5vZGUoKSkp
Ci0gICAgICAgIHJldHVybiBlbGVtZW50LT5maWx0ZXJCb3VuZGluZ0JveChvYmplY3QtPm9iamVj
dEJvdW5kaW5nQm94KCkpOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotfQotCi19Ci0jZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5oCShyZXZpc2lvbiA3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyX2gKLSNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJfaAotCi0jaWYgRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
ci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIu
aCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5cGVz
LmgiCi0KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Ry
dWN0IEZpbHRlckRhdGEgewotICAgIEZpbHRlckRhdGEoKQotICAgICAgICA6IHNhdmVkQ29udGV4
dCgwKQotICAgICAgICAsIGJ1aWxkZWQoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0
cjxTVkdGaWx0ZXI+IGZpbHRlcjsKLSAgICBSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRl
cjsKLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWNCdWZmZXI7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0KiBzYXZlZENvbnRleHQ7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHNoZWFyRnJl
ZUFic29sdXRlVHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBib3VuZGFyaWVzOwotICAgIEZsb2F0
U2l6ZSBzY2FsZTsKLSAgICBib29sIGJ1aWxkZWQ7Ci19OwotCi1jbGFzcyBHcmFwaGljc0NvbnRl
eHQ7Ci0KLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyIDogcHVibGljIFJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcihT
VkdGaWx0ZXJFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIo
KTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJu
ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciI7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVB
bGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwotICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBt
YXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNp
Z25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVz
b3VyY2VNb2RlLCBjb25zdCBQYXRoKik7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJj
ZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopOwotCi0gICAgUGFzc1JlZlB0cjxTVkdGaWx0ZXJC
dWlsZGVyPiBidWlsZFByaW1pdGl2ZXMoRmlsdGVyKik7Ci0KLSAgICBTVkdVbml0VHlwZXM6OlNW
R1VuaXRUeXBlIGZpbHRlclVuaXRzKCkgY29uc3QgeyByZXR1cm4gdG9Vbml0VHlwZShzdGF0aWNf
Y2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKS0+ZmlsdGVyVW5pdHMoKSk7IH0KLSAgICBT
VkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKCkgY29uc3QgeyByZXR1cm4g
dG9Vbml0VHlwZShzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKS0+cHJpbWl0
aXZlVW5pdHMoKSk7IH0KLQotICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291
cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9Ci0gICAgc3RhdGljIFJl
bmRlclNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKLQotcHJpdmF0ZToKLSAgICBib29s
IGZpdHNJbk1heGltdW1JbWFnZVNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJik7Ci0K
LSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEZpbHRlckRhdGEqPiBtX2ZpbHRlcjsKLX07Ci0K
LX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcAkocmV2
aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oIgotCi0jaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlckVmZmVjdCog
ZWZmZWN0LCBTVkdGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBGbG9hdFJlY3QgdW5pdGVSZWN0Owot
ICAgIEZsb2F0UmVjdCBzdWJyZWdpb25Cb3VuZGluZ0JveCA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRh
cmllcygpOwotICAgIEZsb2F0UmVjdCBzdWJyZWdpb24gPSBzdWJyZWdpb25Cb3VuZGluZ0JveDsK
LQotICAgIGlmIChlZmZlY3QtPmZpbHRlckVmZmVjdFR5cGUoKSAhPSBGaWx0ZXJFZmZlY3RUeXBl
VGlsZSkgewotICAgICAgICAvLyBGRVR1cmJ1bGVuY2UsIEZFSW1hZ2UgYW5kIEZFRmxvb2QgZG9u
J3QgaGF2ZSBpbnB1dCBlZmZlY3RzLCB0YWtlIHRoZSBmaWx0ZXIgcmVnaW9uIGFzIHVuaXRlIHJl
Y3QuCi0gICAgICAgIGlmICh1bnNpZ25lZCBudW1iZXJPZklucHV0RWZmZWN0cyA9IGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtYmVyT2ZJbnB1dEVmZmVjdHM7ICsraSkKLSAgICAgICAgICAgICAgICB1bml0ZVJl
Y3QudW5pdGUoZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGVmZmVjdC0+aW5wdXRF
ZmZlY3QoaSksIGZpbHRlcikpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHVuaXRlUmVj
dCA9IGZpbHRlci0+ZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZWZmZWN0LT5pbnB1dEVmZmVj
dCgwKSwgZmlsdGVyKTsKLSAgICAgICAgdW5pdGVSZWN0ID0gZmlsdGVyLT5maWx0ZXJSZWdpb25J
blVzZXJTcGFjZSgpOwotICAgIH0KLQotICAgIGlmIChmaWx0ZXItPmVmZmVjdEJvdW5kaW5nQm94
TW9kZSgpKSB7Ci0gICAgICAgIHN1YnJlZ2lvbiA9IHVuaXRlUmVjdDsKLSAgICAgICAgLy8gQXZv
aWQgdGhlIGNhbGxpbmcgb2YgYSB2aXJ0dWFsIG1ldGhvZCBzZXZlcmFsIHRpbWVzLgotICAgICAg
ICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXItPnRhcmdldEJvdW5kaW5nQm94
KCk7Ci0KLSAgICAgICAgaWYgKGVmZmVjdC0+aGFzWCgpKQotICAgICAgICAgICAgc3VicmVnaW9u
LnNldFgodGFyZ2V0Qm91bmRpbmdCb3gueCgpICsgc3VicmVnaW9uQm91bmRpbmdCb3gueCgpICog
dGFyZ2V0Qm91bmRpbmdCb3gud2lkdGgoKSk7Ci0KLSAgICAgICAgaWYgKGVmZmVjdC0+aGFzWSgp
KQotICAgICAgICAgICAgc3VicmVnaW9uLnNldFkodGFyZ2V0Qm91bmRpbmdCb3gueSgpICsgc3Vi
cmVnaW9uQm91bmRpbmdCb3gueSgpICogdGFyZ2V0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwotCi0g
ICAgICAgIGlmIChlZmZlY3QtPmhhc1dpZHRoKCkpCi0gICAgICAgICAgICBzdWJyZWdpb24uc2V0
V2lkdGgoc3VicmVnaW9uQm91bmRpbmdCb3gud2lkdGgoKSAqIHRhcmdldEJvdW5kaW5nQm94Lndp
ZHRoKCkpOwotCi0gICAgICAgIGlmIChlZmZlY3QtPmhhc0hlaWdodCgpKQotICAgICAgICAgICAg
c3VicmVnaW9uLnNldEhlaWdodChzdWJyZWdpb25Cb3VuZGluZ0JveC5oZWlnaHQoKSAqIHRhcmdl
dEJvdW5kaW5nQm94LmhlaWdodCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWVmZmVj
dC0+aGFzWCgpKQotICAgICAgICAgICAgc3VicmVnaW9uLnNldFgodW5pdGVSZWN0LngoKSk7Ci0K
LSAgICAgICAgaWYgKCFlZmZlY3QtPmhhc1koKSkKLSAgICAgICAgICAgIHN1YnJlZ2lvbi5zZXRZ
KHVuaXRlUmVjdC55KCkpOwotCi0gICAgICAgIGlmICghZWZmZWN0LT5oYXNXaWR0aCgpKQotICAg
ICAgICAgICAgc3VicmVnaW9uLnNldFdpZHRoKHVuaXRlUmVjdC53aWR0aCgpKTsKLQotICAgICAg
ICBpZiAoIWVmZmVjdC0+aGFzSGVpZ2h0KCkpCi0gICAgICAgICAgICBzdWJyZWdpb24uc2V0SGVp
Z2h0KHVuaXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgZWZmZWN0LT5zZXRGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oc3VicmVnaW9uKTsKLQotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVN1
YnJlZ2lvbiA9IGZpbHRlci0+bWFwTG9jYWxSZWN0VG9BYnNvbHV0ZVJlY3Qoc3VicmVnaW9uKTsK
LSAgICBGbG9hdFNpemUgZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlv
bigpOwotICAgIGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24ud2lkdGgo
KSwgZmlsdGVyUmVzb2x1dGlvbi5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGRUltYWdlIG5lZWRzIHRo
ZSB1bmNsaXBwZWQgc3VicmVnaW9uIGluIGFic29sdXRlIGNvb3JkaW5hdGVzIHRvIGRldGVybWlu
ZSB0aGUgY29ycmVjdAotICAgIC8vIGRlc3RpbmF0aW9uIHJlY3QgaW4gY29tYmluYXRpb24gd2l0
aCBwcmVzZXJ2ZUFzcGVjdFJhdGlvLgotICAgIGlmIChlZmZlY3QtPmZpbHRlckVmZmVjdFR5cGUo
KSA9PSBGaWx0ZXJFZmZlY3RUeXBlSW1hZ2UpCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8RkVJ
bWFnZSo+KGVmZmVjdCktPnNldEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9uKTsK
LQotICAgIC8vIENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVyIHJlZ2lvbi4K
LSAgICBGbG9hdFJlY3QgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24gPSBmaWx0ZXItPmZpbHRl
clJlZ2lvbigpOwotICAgIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlclJl
c29sdXRpb24ud2lkdGgoKSwgZmlsdGVyUmVzb2x1dGlvbi5oZWlnaHQoKSk7Ci0gICAgYWJzb2x1
dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uKTsKLQotICAg
IGVmZmVjdC0+c2V0TWF4RWZmZWN0UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlU3VicmVn
aW9uKSk7Ci0gICAgcmV0dXJuIHN1YnJlZ2lvbjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXJQcmltaXRpdmUuaAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlX2gKLSNkZWZpbmUgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmVfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJ
TFRFUlMpCi0KLSNpbmNsdWRlICJSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCIKLSNpbmNsdWRl
ICJTVkdGaWx0ZXIuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZSA6IHB1YmxpYyBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIgewotcHVi
bGljOgotCi0gICAgZXhwbGljaXQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKiBmaWx0ZXJQcmltaXRpdmVFbGVtZW50
KQotICAgICAgICA6IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcihmaWx0ZXJQcmltaXRpdmVFbGVt
ZW50KQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBUaGV5IGRlcGVuZCBvbiB0aGUgUmVuZGVyT2Jq
ZWN0IGFyZ3VtZW50IG9mIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlLgot
ICAgIHN0YXRpYyBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZp
bHRlckVmZmVjdCosIFNWR0ZpbHRlciopOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZSI7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYg
Ly8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmVfaApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAko
cmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjgxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAwOCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgiCi0KLSNpbmNsdWRlICJHcmFkaWVudEF0
dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5k
ZXJTVkdUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJUb29scy5oIgotI2luY2x1ZGUg
IlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjpSZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50KFNWR0dyYWRpZW50RWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyKG5vZGUpCi0gICAgLCBtX3Nob3VsZENvbGxlY3RHcmFkaWVudEF0
dHJpYnV0ZXModHJ1ZSkKLSNpZiBQTEFURk9STShDRykKLSAgICAsIG1fc2F2ZWRDb250ZXh0KDAp
Ci0jZW5kaWYKLXsKLX0KLQotUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6flJlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQoKQotewotICAgIGlmIChtX2dyYWRpZW50LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZGVsZXRlQWxsVmFsdWVzKG1fZ3JhZGllbnQpOwotICAgIG1fZ3Jh
ZGllbnQuY2xlYXIoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjpyZW1v
dmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbikKLXsKLSAgICBp
ZiAoIW1fZ3JhZGllbnQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2dy
YWRpZW50KTsKLSAgICAgICAgbV9ncmFkaWVudC5jbGVhcigpOwotICAgIH0KLQotICAgIG1fc2hv
dWxkQ29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyA9IHRydWU7Ci0gICAgbWFya0FsbENsaWVudHNG
b3JJbnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IFJlcGFpbnRJbnZhbGlkYXRpb24g
OiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdy
YWRpZW50OjpyZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiBjbGllbnQsIGJvb2wg
bWFya0ZvckludmFsaWRhdGlvbikKLXsKLSAgICBBU1NFUlQoY2xpZW50KTsKLQotICAgIGlmICht
X2dyYWRpZW50LmNvbnRhaW5zKGNsaWVudCkpCi0gICAgICAgIGRlbGV0ZSBtX2dyYWRpZW50LnRh
a2UoY2xpZW50KTsKLQotICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJr
Rm9ySW52YWxpZGF0aW9uID8gUmVwYWludEludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlk
YXRpb24pOwotfQotCi0jaWYgUExBVEZPUk0oQ0cpCi1zdGF0aWMgaW5saW5lIGJvb2wgY3JlYXRl
TWFza0FuZFN3YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KEdyYXBoaWNzQ29udGV4dComIGNvbnRl
eHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dComIHNhdmVkQ29udGV4dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3duUHRyPEltYWdlQnVm
ZmVyPiYgaW1hZ2VCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIFJlbmRl
ck9iamVjdCogdGV4dFJvb3RCbG9jayA9IFJlbmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1Rl
eHRBbmNlc3RvcihvYmplY3QpOwotICAgIEFTU0VSVCh0ZXh0Um9vdEJsb2NrKTsKLQotICAgIEFm
ZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBTVkdJbWFnZUJ1ZmZlclRvb2xz
OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbSh0
ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0KLSAgICBGbG9hdFJlY3QgYWJzb2x1
dGVUYXJnZXRSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdCh0ZXh0Um9vdEJsb2NrLT5y
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBGbG9hdFJlY3QgY2xhbXBlZEFi
c29sdXRlVGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRh
cmdldFJlY3RGb3JSZW5kZXJlcih0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRhcmdldFJlY3QpOwot
ICAgIGlmIChjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2U7Ci0gICAgaWYg
KCFTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihhYnNvbHV0ZVRhcmdldFJl
Y3QsIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIG1hc2tJbWFnZSwgQ29sb3JTcGFjZURldmlj
ZVJHQikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCogbWFz
a0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOwotICAgIEFTU0VSVChtYXNrSW1h
Z2VDb250ZXh0KTsKLQotICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtY2xhbXBlZEFi
c29sdXRlVGFyZ2V0UmVjdC54KCksIC1jbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LnkoKSk7Ci0g
ICAgbWFza0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKGFic29sdXRlVHJhbnNmb3JtKTsKLQotICAg
IEFTU0VSVChtYXNrSW1hZ2UpOwotICAgIHNhdmVkQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgY29u
dGV4dCA9IG1hc2tJbWFnZUNvbnRleHQ7Ci0gICAgaW1hZ2VCdWZmZXIgPSBtYXNrSW1hZ2UucmVs
ZWFzZSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIEFmZmluZVRyYW5z
Zm9ybSBjbGlwVG9UZXh0TWFzayhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+JiBp
bWFnZUJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBib3VuZGluZ0JveE1vZGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGdyYWRpZW50VHJhbnNmb3JtKQotewotICAgIFJlbmRlck9iamVjdCogdGV4dFJvb3RCbG9jayA9
IFJlbmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3RvcihvYmplY3QpOwotICAg
IEFTU0VSVCh0ZXh0Um9vdEJsb2NrKTsKLQotICAgIHRhcmdldFJlY3QgPSB0ZXh0Um9vdEJsb2Nr
LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwotCi0gICAgQWZmaW5lVHJhbnNmb3Jt
IGFic29sdXRlVHJhbnNmb3JtOwotICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1bGF0ZVRy
YW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKHRleHRSb290QmxvY2ss
IGFic29sdXRlVHJhbnNmb3JtKTsKLQotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRhcmdldFJlY3Qg
PSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRhcmdldFJlY3QpOwotICAgIEZsb2F0UmVjdCBj
bGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0ID0gU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xhbXBlZEFi
c29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKHRleHRSb290QmxvY2ssIGFic29sdXRlVGFyZ2V0
UmVjdCk7Ci0KLSAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGlwVG9JbWFnZUJ1ZmZlcihjb250
ZXh0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCwgaW1hZ2VC
dWZmZXIpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKLSAgICBpZiAoYm91bmRpbmdC
b3hNb2RlKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBtYXNrQm91bmRpbmdCb3ggPSB0ZXh0Um9vdEJs
b2NrLT5vYmplY3RCb3VuZGluZ0JveCgpOwotICAgICAgICBtYXRyaXgudHJhbnNsYXRlKG1hc2tC
b3VuZGluZ0JveC54KCksIG1hc2tCb3VuZGluZ0JveC55KCkpOwotICAgICAgICBtYXRyaXguc2Nh
bGVOb25Vbmlmb3JtKG1hc2tCb3VuZGluZ0JveC53aWR0aCgpLCBtYXNrQm91bmRpbmdCb3guaGVp
Z2h0KCkpOwotICAgIH0KLSAgICBtYXRyaXgubXVsdExlZnQoZ3JhZGllbnRUcmFuc2Zvcm0pOwot
ICAgIHJldHVybiBtYXRyaXg7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdy
YWRpZW50OjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSog
c3R5bGUsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNl
TW9kZSkKLXsKLSAgICBBU1NFUlQob2JqZWN0KTsKLSAgICBBU1NFUlQoc3R5bGUpOwotICAgIEFT
U0VSVChjb250ZXh0KTsKLSAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0
TW9kZSk7Ci0KLSAgICAvLyBCZSBzdXJlIHRvIHN5bmNocm9uaXplIGFsbCBTVkcgcHJvcGVydGll
cyBvbiB0aGUgZ3JhZGllbnRFbGVtZW50IF9iZWZvcmVfIHByb2Nlc3NpbmcgYW55IGZ1cnRoZXIu
Ci0gICAgLy8gT3RoZXJ3aGlzZSB0aGUgY2FsbCB0byBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVz
KCkgaW4gY3JlYXRlVGlsZUltYWdlKCksIG1heSBjYXVzZSB0aGUgU1ZHIERPTSBwcm9wZXJ0eQot
ICAgIC8vIHN5bmNocm9uaXphdGlvbiB0byBraWNrIGluLCB3aGljaCBjYXVzZXMgcmVtb3ZlQWxs
Q2xpZW50c0Zyb21DYWNoZSgpIHRvIGJlIGNhbGxlZCwgd2hpY2ggaW4gdHVybiBkZWxldGVzIG91
cgotICAgIC8vIEdyYWRpZW50RGF0YSBvYmplY3QhIExlYXZpbmcgb3V0IHRoZSBsaW5lIGJlbG93
IHdpbGwgY2F1c2Ugc3ZnL2R5bmFtaWMtdXBkYXRlcy9TVkcqR3JhZGllbnRFbGVtZW50LXN2Z2Rv
bSogdG8gY3Jhc2guCi0gICAgU1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdHcmFkaWVudEVsZW1lbnQqPihub2RlKCkpOwotICAgIGlmICghZ3JhZGll
bnRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9zaG91bGRDb2xs
ZWN0R3JhZGllbnRBdHRyaWJ1dGVzKSB7Ci0gICAgICAgIGdyYWRpZW50RWxlbWVudC0+dXBkYXRl
QW5pbWF0ZWRTVkdBdHRyaWJ1dGUoYW55UU5hbWUoKSk7Ci0gICAgICAgIGNvbGxlY3RHcmFkaWVu
dEF0dHJpYnV0ZXMoZ3JhZGllbnRFbGVtZW50KTsKLSAgICAgICAgbV9zaG91bGRDb2xsZWN0R3Jh
ZGllbnRBdHRyaWJ1dGVzID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gU3BlYzogV2hlbiB0aGUg
Z2VvbWV0cnkgb2YgdGhlIGFwcGxpY2FibGUgZWxlbWVudCBoYXMgbm8gd2lkdGggb3IgaGVpZ2h0
IGFuZCBvYmplY3RCb3VuZGluZ0JveCBpcyBzcGVjaWZpZWQsCi0gICAgLy8gdGhlbiB0aGUgZ2l2
ZW4gZWZmZWN0IChlLmcuIGEgZ3JhZGllbnQgb3IgYSBmaWx0ZXIpIHdpbGwgYmUgaWdub3JlZC4K
LSAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5n
Qm94KCk7Ci0gICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpICYmIG9iamVjdEJvdW5kaW5nQm94Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX2dyYWRpZW50LmNv
bnRhaW5zKG9iamVjdCkpCi0gICAgICAgIG1fZ3JhZGllbnQuc2V0KG9iamVjdCwgbmV3IEdyYWRp
ZW50RGF0YSk7Ci0KLSAgICBHcmFkaWVudERhdGEqIGdyYWRpZW50RGF0YSA9IG1fZ3JhZGllbnQu
Z2V0KG9iamVjdCk7Ci0gICAgYm9vbCBpc1BhaW50aW5nVGV4dCA9IHJlc291cmNlTW9kZSAmIEFw
cGx5VG9UZXh0TW9kZTsKLQotICAgIC8vIENyZWF0ZSBncmFkaWVudCBvYmplY3QKLSAgICBpZiAo
IWdyYWRpZW50RGF0YS0+Z3JhZGllbnQpIHsKLSAgICAgICAgYnVpbGRHcmFkaWVudChncmFkaWVu
dERhdGEsIGdyYWRpZW50RWxlbWVudCk7Ci0KLSAgICAgICAgLy8gQ0cgcGxhdGZvcm1zIHdpbGwg
aGFuZGxlIHRoZSBncmFkaWVudCBzcGFjZSB0cmFuc2Zvcm0gZm9yIHRleHQgYWZ0ZXIgYXBwbHlp
bmcgdGhlCi0gICAgICAgIC8vIHJlc291cmNlLCBzbyBkb24ndCBhcHBseSBpdCBoZXJlLiBGb3Ig
bm9uLUNHIHBsYXRmb3Jtcywgd2Ugd2FudCB0aGUgdGV4dCBib3VuZGluZwotICAgICAgICAvLyBi
b3ggYXBwbGllZCB0byB0aGUgZ3JhZGllbnQgc3BhY2UgdHJhbnNmb3JtIG5vdywgc28gdGhlIGdy
YWRpZW50IHNoYWRlciBjYW4gdXNlIGl0LgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICBpZiAo
Ym91bmRpbmdCb3hNb2RlKCkgJiYgIW9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSAmJiAhaXNQ
YWludGluZ1RleHQpIHsKLSNlbHNlCi0gICAgICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSAmJiAh
b2JqZWN0Qm91bmRpbmdCb3guaXNFbXB0eSgpKSB7Ci0jZW5kaWYKLSAgICAgICAgICAgIGdyYWRp
ZW50RGF0YS0+dXNlcnNwYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54
KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7Ci0gICAgICAgICAgICBncmFkaWVudERhdGEtPnVz
ZXJzcGFjZVRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgo
KSwgb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIGdyYWRpZW50VHJhbnNmb3JtOwotICAgICAgICBjYWxjdWxhdGVHcmFkaWVu
dFRyYW5zZm9ybShncmFkaWVudFRyYW5zZm9ybSk7Ci0KLSAgICAgICAgZ3JhZGllbnREYXRhLT51
c2Vyc3BhY2VUcmFuc2Zvcm0ubXVsdExlZnQoZ3JhZGllbnRUcmFuc2Zvcm0pOwotICAgICAgICBn
cmFkaWVudERhdGEtPmdyYWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGdyYWRpZW50
RGF0YS0+dXNlcnNwYWNlVHJhbnNmb3JtKTsKLSAgICB9Ci0KLSAgICBpZiAoIWdyYWRpZW50RGF0
YS0+Z3JhZGllbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIERyYXcgZ3JhZGll
bnQKLSAgICBjb250ZXh0LT5zYXZlKCk7Ci0KLSAgICBpZiAoaXNQYWludGluZ1RleHQpIHsKLSNp
ZiBQTEFURk9STShDRykKLSAgICAgICAgaWYgKCFjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRGb3JU
ZXh0R3JhZGllbnQoY29udGV4dCwgbV9zYXZlZENvbnRleHQsIG1faW1hZ2VCdWZmZXIsIG9iamVj
dCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgY29udGV4dC0+c2V0VGV4dERy
YXdpbmdNb2RlKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSA/IFRleHRNb2RlRmlsbCA6
IFRleHRNb2RlU3Ryb2tlKTsKLSAgICB9Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3Zn
U3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICBBU1NFUlQoc3ZnU3R5bGUpOwotCi0gICAg
aWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkgewotICAgICAgICBjb250ZXh0LT5z
ZXRBbHBoYShzdmdTdHlsZS0+ZmlsbE9wYWNpdHkoKSk7Ci0gICAgICAgIGNvbnRleHQtPnNldEZp
bGxHcmFkaWVudChncmFkaWVudERhdGEtPmdyYWRpZW50KTsKLSAgICAgICAgY29udGV4dC0+c2V0
RmlsbFJ1bGUoc3ZnU3R5bGUtPmZpbGxSdWxlKCkpOwotICAgIH0gZWxzZSBpZiAocmVzb3VyY2VN
b2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpIHsKLSAgICAgICAgaWYgKHN2Z1N0eWxlLT52ZWN0b3JF
ZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0UpCi0gICAgICAgICAgICBncmFkaWVudERh
dGEtPmdyYWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKHRyYW5zZm9ybU9uTm9uU2Nh
bGluZ1N0cm9rZShvYmplY3QsIGdyYWRpZW50RGF0YS0+dXNlcnNwYWNlVHJhbnNmb3JtKSk7Ci0g
ICAgICAgIGNvbnRleHQtPnNldEFscGhhKHN2Z1N0eWxlLT5zdHJva2VPcGFjaXR5KCkpOwotICAg
ICAgICBjb250ZXh0LT5zZXRTdHJva2VHcmFkaWVudChncmFkaWVudERhdGEtPmdyYWRpZW50KTsK
LSAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250
ZXh0LCBzdHlsZSwgb2JqZWN0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVz
b3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQotewotICAgIEFTU0VSVChjb250ZXh0KTsKLSAg
ICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7Ci0KLSAgICBpZiAo
cmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSB7Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAg
ICAgIC8vIENHIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGdyYWRpZW50IG9uIHRleHQK
LSAgICAgICAgaWYgKG1fc2F2ZWRDb250ZXh0ICYmIG1fZ3JhZGllbnQuY29udGFpbnMob2JqZWN0
KSkgewotICAgICAgICAgICAgR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEgPSBtX2dyYWRpZW50
LmdldChvYmplY3QpOwotCi0gICAgICAgICAgICAvLyBSZXN0b3JlIG9uLXNjcmVlbiBkcmF3aW5n
IGNvbnRleHQKLSAgICAgICAgICAgIGNvbnRleHQgPSBtX3NhdmVkQ29udGV4dDsKLSAgICAgICAg
ICAgIG1fc2F2ZWRDb250ZXh0ID0gMDsKLQotICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdy
YWRpZW50VHJhbnNmb3JtOwotICAgICAgICAgICAgY2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zvcm0o
Z3JhZGllbnRUcmFuc2Zvcm0pOwotCi0gICAgICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdDsK
LSAgICAgICAgICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQtPnNldEdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0oY2xpcFRvVGV4dE1hc2soY29udGV4dCwgbV9pbWFnZUJ1ZmZlciwgdGFyZ2V0UmVjdCwg
b2JqZWN0LCBib3VuZGluZ0JveE1vZGUoKSwgZ3JhZGllbnRUcmFuc2Zvcm0pKTsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChncmFkaWVudERhdGEtPmdyYWRpZW50KTsKLQot
ICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QodGFyZ2V0UmVjdCk7Ci0gICAgICAgICAgICBt
X2ltYWdlQnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIFVOVVNFRF9Q
QVJBTShvYmplY3QpOwotI2VuZGlmCi0gICAgfSBlbHNlIGlmIChwYXRoKSB7Ci0gICAgICAgIGlm
IChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5m
aWxsUGF0aCgqcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9T
dHJva2VNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7Ci0gICAg
fQotCi0gICAgY29udGV4dC0+cmVzdG9yZSgpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQ6OmFkZFN0b3BzKEdyYWRpZW50RGF0YSogZ3JhZGllbnREYXRhLCBjb25zdCBWZWN0
b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4mIHN0b3BzKSBjb25zdAotewotICAgIEFTU0VSVChncmFk
aWVudERhdGEtPmdyYWRpZW50KTsKLQotICAgIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JT
dG9wPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RvcHMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8
R3JhZGllbnQ6OkNvbG9yU3RvcD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RvcHMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5hZGRDb2xv
clN0b3AoKml0KTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAkocmV2aXNpb24gNzUz
NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50X2gKLSNkZWZpbmUgUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudF9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYWRpZW50LmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lci5oIgotI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgotCi0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgR3JhZGllbnREYXRh
IHsKLSAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50OwotICAgIEFmZmluZVRyYW5zZm9ybSB1
c2Vyc3BhY2VUcmFuc2Zvcm07Ci19OwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0KLWNsYXNz
IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQgOiBwdWJsaWMgUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIgewotcHVibGljOgotICAgIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQoU1ZHR3JhZGll
bnRFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudCgpOwot
Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9vbCBtYXJrRm9y
SW52YWxpZGF0aW9uID0gdHJ1ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21D
YWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKLQot
ICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxl
KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAg
dmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29u
dGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKLSAgICB2
aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0
dXJuIEZsb2F0UmVjdCgpOyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGFkZFN0b3BzKEdyYWRp
ZW50RGF0YSosIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiYpIGNvbnN0OwotCi0g
ICAgdmlydHVhbCBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtJikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKFNWR0dyYWRpZW50RWxl
bWVudCopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFkaWVudChHcmFkaWVudERhdGEq
LCBTVkdHcmFkaWVudEVsZW1lbnQqKSBjb25zdCA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBt
X3Nob3VsZENvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMgOiAxOwotICAgIEhhc2hNYXA8UmVuZGVy
T2JqZWN0KiwgR3JhZGllbnREYXRhKj4gbV9ncmFkaWVudDsKLQotI2lmIFBMQVRGT1JNKENHKQot
ICAgIEdyYXBoaWNzQ29udGV4dCogbV9zYXZlZENvbnRleHQ7Ci0gICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBtX2ltYWdlQnVmZmVyOwotI2VuZGlmCi19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFk
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwCShyZXZpc2lvbiA3NTM0NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlTGluZWFyR3JhZGllbnQuaCIKLQotI2luY2x1ZGUgIkxpbmVhckdyYWRpZW50QXR0cmli
dXRlcy5oIgotI2luY2x1ZGUgIlNWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLVJlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZUxp
bmVhckdyYWRpZW50OjpzX3Jlc291cmNlVHlwZSA9IExpbmVhckdyYWRpZW50UmVzb3VyY2VUeXBl
OwotCi1SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50OjpSZW5kZXJTVkdSZXNvdXJjZUxp
bmVhckdyYWRpZW50KFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQobm9kZSkKLXsKLX0KLQotUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudDo6flJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQoKQotewotfQotCi12
b2lkIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OmNvbGxlY3RHcmFkaWVudEF0dHJp
YnV0ZXMoU1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQpCi17Ci0gICAgbV9hdHRy
aWJ1dGVzID0gTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzKCk7Ci0gICAgc3RhdGljX2Nhc3Q8U1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KS0+Y29sbGVjdEdyYWRpZW50
QXR0cmlidXRlcyhtX2F0dHJpYnV0ZXMpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlTGlu
ZWFyR3JhZGllbnQ6OmJ1aWxkR3JhZGllbnQoR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEsIFNW
R0dyYWRpZW50RWxlbWVudCogZ3JhZGllbnRFbGVtZW50KSBjb25zdAotewotICAgIFNWR0xpbmVh
ckdyYWRpZW50RWxlbWVudCogbGluZWFyR3JhZGllbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KTsKLQotICAgIC8vIERldGVy
bWluZSBncmFkaWVudCBzdGFydC9lbmQgcG9pbnRzCi0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50
OwotICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQ7Ci0gICAgbGluZWFyR3JhZGllbnRFbGVtZW50LT5j
YWxjdWxhdGVTdGFydEVuZFBvaW50cyhtX2F0dHJpYnV0ZXMsIHN0YXJ0UG9pbnQsIGVuZFBvaW50
KTsKLQotICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKHN0YXJ0
UG9pbnQsIGVuZFBvaW50KTsKLSAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5zZXRTcHJlYWRN
ZXRob2QobV9hdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpKTsKLQotICAgIC8vIEFkZCBzdG9wcwot
ICAgIGFkZFN0b3BzKGdyYWRpZW50RGF0YSwgbV9hdHRyaWJ1dGVzLnN0b3BzKCkpOwotfQotCi19
Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlTGluZWFyR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oCShyZXZpc2lvbiA3NTM0NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50X2gKLSNkZWZpbmUgUmVu
ZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudF9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1
ZGUgIkxpbmVhckdyYWRpZW50QXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTVkdMaW5lYXJH
cmFkaWVudEVsZW1lbnQ7Ci0KLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQg
OiBwdWJsaWMgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudCB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVy
U1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudChTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQqKTsKLSAg
ICB2aXJ0dWFsIH5SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50KCk7Ci0KLSAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHUmVz
b3VyY2VMaW5lYXJHcmFkaWVudCI7IH0KLQotICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VU
eXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9Ci0gICAg
c3RhdGljIFJlbmRlclNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKLQotICAgIHZpcnR1
YWwgYm9vbCBib3VuZGluZ0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuYm91
bmRpbmdCb3hNb2RlKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlR3JhZGllbnRUcmFu
c2Zvcm0oQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIHsgdHJhbnNmb3JtID0gbV9hdHRyaWJ1
dGVzLmdyYWRpZW50VHJhbnNmb3JtKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdEdyYWRp
ZW50QXR0cmlidXRlcyhTVkdHcmFkaWVudEVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYnVp
bGRHcmFkaWVudChHcmFkaWVudERhdGEqLCBTVkdHcmFkaWVudEVsZW1lbnQqKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwotfTsK
LQotfQotCi0jZW5kaWYKLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCShyZXZpc2lvbiA3NTM0NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgiCi0K
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250YWlu
ZXIuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHTWFya2VyRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRF
bGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZW5kZXJTVkdSZXNvdXJjZVR5cGUgUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXI6OnNfcmVzb3VyY2VUeXBlID0gTWFya2VyUmVzb3VyY2VUeXBlOwotCi1SZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlcjo6UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIoU1ZHTWFya2VyRWxl
bWVudCogbm9kZSkKLSAgICA6IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKG5vZGUpCi17Ci19
Ci0KLVJlbmRlclNWR1Jlc291cmNlTWFya2VyOjp+UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIoKQot
ewotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjpsYXlvdXQoKQotewotICAgIC8v
IEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCi0gICAgaWYg
KG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkKLSAgICAgICAgcmVtb3ZlQWxs
Q2xpZW50c0Zyb21DYWNoZSgpOwotCi0gICAgLy8gUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyIG92
ZXJ3cml0ZXMgbGF5b3V0KCkuIFdlIG5lZWQgdGhlCi0gICAgLy8gbGF5b3V0aW5nIG9mIFJlbmRl
clNWR0NvbnRhaW5lciBmb3IgY2FsY3VsYXRpbmcgIGxvY2FsCi0gICAgLy8gdHJhbnNmb3JtYXRp
b25zIGFuZCByZXBhaW50LgotICAgIFJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0KCk7Ci19Ci0K
LXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUo
Ym9vbCBtYXJrRm9ySW52YWxpZGF0aW9uKQotewotICAgIG1hcmtBbGxDbGllbnRzRm9ySW52YWxp
ZGF0aW9uKG1hcmtGb3JJbnZhbGlkYXRpb24gPyBMYXlvdXRBbmRCb3VuZGFyaWVzSW52YWxpZGF0
aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXI6OnJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqIGNsaWVudCwgYm9v
bCBtYXJrRm9ySW52YWxpZGF0aW9uKQotewotICAgIEFTU0VSVChjbGllbnQpOwotICAgIG1hcmtD
bGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRh
cmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwotfQotCi12b2lkIFJl
bmRlclNWR1Jlc291cmNlTWFya2VyOjphcHBseVZpZXdwb3J0Q2xpcChQYWludEluZm8mIHBhaW50
SW5mbykKLXsKLSAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlz
KSkKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAobV92aWV3cG9ydCk7Ci19Ci0KLUZs
b2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bWFya2VyQm91bmRhcmllcyhjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIG1hcmtlclRyYW5zZm9ybWF0aW9uKSBjb25zdAotewotICAgIEZsb2F0
UmVjdCBjb29yZGluYXRlcyA9IFJlbmRlclNWR0NvbnRhaW5lcjo6cmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKTsKLQotICAgIC8vIE1hcCByZXBhaW50IHJlY3QgaW50byBwYXJlbnQgY29v
cmRpbmF0ZSBzcGFjZSwgaW4gd2hpY2ggdGhlIG1hcmtlciBib3VuZGFyaWVzIGhhdmUgdG8gYmUg
ZXZhbHVhdGVkCi0gICAgY29vcmRpbmF0ZXMgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkubWFw
UmVjdChjb29yZGluYXRlcyk7Ci0KLSAgICByZXR1cm4gbWFya2VyVHJhbnNmb3JtYXRpb24ubWFw
UmVjdChjb29yZGluYXRlcyk7Ci19Ci0KLWNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXI6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIEFm
ZmluZVRyYW5zZm9ybSB2aWV3cG9ydFRyYW5zbGF0aW9uKHZpZXdwb3J0VHJhbnNmb3JtKCkpOwot
ICAgIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybSA9IHZpZXdwb3J0VHJhbnNsYXRpb24udHJhbnNs
YXRlUmlnaHQobV92aWV3cG9ydC54KCksIG1fdmlld3BvcnQueSgpKTsKLSAgICByZXR1cm4gbV9s
b2NhbFRvUGFyZW50VHJhbnNmb3JtOwotICAgIC8vIElmIHRoaXMgY2xhc3Mgd2VyZSBldmVyIGdp
dmVuIGEgbG9jYWxUcmFuc2Zvcm0oKSwgdGhlbiB0aGUgYWJvdmUgd291bGQgcmVhZDoKLSAgICAv
LyByZXR1cm4gdmlld3BvcnRUcmFuc2Zvcm0oKSAqIGxvY2FsVHJhbnNmb3JtKCkgKiB2aWV3cG9y
dFRyYW5zbGF0aW9uOwotfQotCi1GbG9hdFBvaW50IFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjpy
ZWZlcmVuY2VQb2ludCgpIGNvbnN0Ci17Ci0gICAgU1ZHTWFya2VyRWxlbWVudCogbWFya2VyID0g
c3RhdGljX2Nhc3Q8U1ZHTWFya2VyRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgQVNTRVJUKG1hcmtl
cik7Ci0KLSAgICByZXR1cm4gRmxvYXRQb2ludChtYXJrZXItPnJlZlgoKS52YWx1ZShtYXJrZXIp
LCBtYXJrZXItPnJlZlkoKS52YWx1ZShtYXJrZXIpKTsKLX0KLQotZmxvYXQgUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXI6OmFuZ2xlKCkgY29uc3QKLXsKLSAgICBTVkdNYXJrZXJFbGVtZW50KiBtYXJr
ZXIgPSBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBBU1NFUlQo
bWFya2VyKTsKLQotICAgIGZsb2F0IGFuZ2xlID0gLTE7Ci0gICAgaWYgKG1hcmtlci0+b3JpZW50
VHlwZSgpID09IFNWR01hcmtlckVsZW1lbnQ6OlNWR19NQVJLRVJfT1JJRU5UX0FOR0xFKQotICAg
ICAgICBhbmdsZSA9IG1hcmtlci0+b3JpZW50QW5nbGUoKS52YWx1ZSgpOwotCi0gICAgcmV0dXJu
IGFuZ2xlOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6Om1h
cmtlclRyYW5zZm9ybWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgYXV0b0Fu
Z2xlLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKLXsKLSAgICBTVkdNYXJrZXJFbGVtZW50KiBt
YXJrZXIgPSBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBBU1NF
UlQobWFya2VyKTsKLQotICAgIGZsb2F0IG1hcmtlckFuZ2xlID0gYW5nbGUoKTsKLSAgICBib29s
IHVzZVN0cm9rZVdpZHRoID0gKG1hcmtlci0+bWFya2VyVW5pdHMoKSA9PSBTVkdNYXJrZXJFbGVt
ZW50OjpTVkdfTUFSS0VSVU5JVFNfU1RST0tFV0lEVEgpOwotCi0gICAgQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybTsKLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG9yaWdpbi54KCksIG9yaWdpbi55
KCkpOwotICAgIHRyYW5zZm9ybS5yb3RhdGUobWFya2VyQW5nbGUgPT0gLTEgPyBhdXRvQW5nbGUg
OiBtYXJrZXJBbmdsZSk7Ci0gICAgdHJhbnNmb3JtID0gbWFya2VyQ29udGVudFRyYW5zZm9ybWF0
aW9uKHRyYW5zZm9ybSwgcmVmZXJlbmNlUG9pbnQoKSwgdXNlU3Ryb2tlV2lkdGggPyBzdHJva2VX
aWR0aCA6IC0xKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtOwotfQotCi12b2lkIFJlbmRlclNWR1Jl
c291cmNlTWFya2VyOjpkcmF3KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBQYWludEluZm8gaW5mbyhwYWludEluZm8pOwotICAg
IGluZm8uY29udGV4dC0+c2F2ZSgpOwotICAgIGluZm8uYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3Jt
KTsKLSAgICBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KGluZm8sIDAsIDApOwotICAgIGluZm8u
Y29udGV4dC0+cmVzdG9yZSgpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXI6Om1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9h
dCBzdHJva2VXaWR0aCkgY29uc3QKLXsKLSAgICAvLyBUaGUgJ29yaWdpbicgY29vcmRpbmF0ZSBt
YXBzIHRvIFNWR3MgcmVmWC9yZWZZLCBnaXZlbiBpbiBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0
aGUgdmlld3BvcnQgZXN0YWJsaXNoZWQgYnkgdGhlIG1hcmtlcgotICAgIEZsb2F0UG9pbnQgbWFw
cGVkT3JpZ2luID0gdmlld3BvcnRUcmFuc2Zvcm0oKS5tYXBQb2ludChvcmlnaW4pOwotCi0gICAg
QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybWF0aW9uID0gY29udGVudFRyYW5zZm9ybWF0aW9uOwot
ICAgIGlmIChzdHJva2VXaWR0aCAhPSAtMSkKLSAgICAgICAgdHJhbnNmb3JtYXRpb24uc2NhbGVO
b25Vbmlmb3JtKHN0cm9rZVdpZHRoLCBzdHJva2VXaWR0aCk7Ci0KLSAgICB0cmFuc2Zvcm1hdGlv
bi50cmFuc2xhdGUoLW1hcHBlZE9yaWdpbi54KCksIC1tYXBwZWRPcmlnaW4ueSgpKTsKLSAgICBy
ZXR1cm4gdHJhbnNmb3JtYXRpb247Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNv
dXJjZU1hcmtlcjo6dmlld3BvcnRUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIFNWR01hcmtlckVs
ZW1lbnQqIG1hcmtlciA9IHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQqPihub2RlKCkpOwot
ICAgIEFTU0VSVChtYXJrZXIpOwotCi0gICAgcmV0dXJuIG1hcmtlci0+dmlld0JveFRvVmlld1Ry
YW5zZm9ybShtX3ZpZXdwb3J0LndpZHRoKCksIG1fdmlld3BvcnQuaGVpZ2h0KCkpOwotfQotCi12
b2lkIFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjpjYWxjVmlld3BvcnQoKQotewotICAgIGlmICgh
c2VsZk5lZWRzTGF5b3V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNWR01hcmtlckVsZW1l
bnQqIG1hcmtlciA9IHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQqPihub2RlKCkpOwotICAg
IEFTU0VSVChtYXJrZXIpOwotCi0gICAgZmxvYXQgdyA9IG1hcmtlci0+bWFya2VyV2lkdGgoKS52
YWx1ZShtYXJrZXIpOwotICAgIGZsb2F0IGggPSBtYXJrZXItPm1hcmtlckhlaWdodCgpLnZhbHVl
KG1hcmtlcik7Ci0gICAgbV92aWV3cG9ydCA9IEZsb2F0UmVjdCgwLCAwLCB3LCBoKTsKLX0KLQot
fQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oCShyZXZpc2lvbiA3NTM0NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRl
ZiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcl9oCi0jZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIu
aCIKLSNpbmNsdWRlICJTVkdNYXJrZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVkRWxl
bWVudC5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci0KLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyIDogcHVibGljIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsKLXB1YmxpYzoKLSAgICBS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlcihTVkdNYXJrZXJFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIoKTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVu
ZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciI7IH0KLQot
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0Zvcklu
dmFsaWRhdGlvbiA9IHRydWUpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2Fj
aGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7Ci0KLSAg
ICB2b2lkIGRyYXcoUGFpbnRJbmZvJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0KLSAgICAv
LyBDYWxjdWxhdGVzIG1hcmtlciBib3VuZGFyaWVzLCBtYXBwZWQgdG8gdGhlIHRhcmdldCBlbGVt
ZW50J3MgY29vcmRpbmF0ZSBzcGFjZQotICAgIEZsb2F0UmVjdCBtYXJrZXJCb3VuZGFyaWVzKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgbWFya2VyVHJhbnNmb3JtYXRpb24pIGNvbnN0OwotCi0gICAg
dmlydHVhbCB2b2lkIGFwcGx5Vmlld3BvcnRDbGlwKFBhaW50SW5mbyYpOwotICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ZpZXdwb3J0KCk7Ci0KLSAgICB2
aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNv
bnN0OwotICAgIEFmZmluZVRyYW5zZm9ybSBtYXJrZXJUcmFuc2Zvcm1hdGlvbihjb25zdCBGbG9h
dFBvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHls
ZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCkgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCop
IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9Ci0KLSAgICBGbG9hdFBvaW50IHJlZmVyZW5jZVBvaW50
KCkgY29uc3Q7Ci0gICAgZmxvYXQgYW5nbGUoKSBjb25zdDsKLSAgICBTVkdNYXJrZXJFbGVtZW50
OjpTVkdNYXJrZXJVbml0c1R5cGUgbWFya2VyVW5pdHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxTVkdNYXJrZXJFbGVtZW50OjpTVkdNYXJrZXJVbml0c1R5cGU+KHN0YXRpY19jYXN0PFNW
R01hcmtlckVsZW1lbnQqPihub2RlKCkpLT5tYXJrZXJVbml0cygpKTsgfQotCi0gICAgdmlydHVh
bCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19y
ZXNvdXJjZVR5cGU7IH0KLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3Vy
Y2VUeXBlOwotCi1wcml2YXRlOgotICAgIC8vIEdlbmVyYXRlcyBhIHRyYW5zZm9ybWF0aW9uIG1h
dHJpeCB1c2FibGUgdG8gcmVuZGVyIG1hcmtlciBjb250ZW50LiBIYW5kbGVzIHNjYWxpbmcgdGhl
IG1hcmtlciBjb250ZW50Ci0gICAgLy8gYWNvcmRpbmcgdG8gU1ZHcyBtYXJrZXJVbml0cz0ic3Ry
b2tlV2lkdGgiIGNvbmNlcHQsIHdoZW4gYSBzdHJva2VXaWR0aCB2YWx1ZSAhPSAtMSBpcyBwYXNz
ZWQgaW4uCi0gICAgQWZmaW5lVHJhbnNmb3JtIG1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgRmxvYXRQ
b2ludCYgb3JpZ2luLCBmbG9hdCBzdHJva2VXaWR0aCA9IC0xKSBjb25zdDsKLQotICAgIEFmZmlu
ZVRyYW5zZm9ybSB2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0OwotCi0gICAgbXV0YWJsZSBBZmZp
bmVUcmFuc2Zvcm0gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBtX3Zp
ZXdwb3J0OwotfTsKLQotfQotI2VuZGlmCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCShyZXZpc2lv
biA3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1h
c2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJJbWFnZS5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5o
IgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5o
IgotI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKLSNpbmNsdWRlICJTVkdNYXNrRWxl
bWVudC5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdVbml0
VHlwZXMuaCIKLQotI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvVW51
c2VkUGFyYW0uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjpzX3Jl
c291cmNlVHlwZSA9IE1hc2tlclJlc291cmNlVHlwZTsKLQotUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXI6OlJlbmRlclNWR1Jlc291cmNlTWFza2VyKFNWR01hc2tFbGVtZW50KiBub2RlKQotICAgIDog
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKLXsKLX0KLQotUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXI6On5SZW5kZXJTVkdSZXNvdXJjZU1hc2tlcigpCi17Ci0gICAgaWYgKG1fbWFza2Vy
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVsZXRlQWxsVmFsdWVzKG1fbWFz
a2VyKTsKLSAgICBtX21hc2tlci5jbGVhcigpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNl
TWFza2VyOjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlv
bikKLXsKLSAgICBtX21hc2tDb250ZW50Qm91bmRhcmllcyA9IEZsb2F0UmVjdCgpOwotICAgIGlm
ICghbV9tYXNrZXIuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX21hc2tl
cik7Ci0gICAgICAgIG1fbWFza2VyLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgbWFya0FsbENsaWVu
dHNGb3JJbnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IExheW91dEFuZEJvdW5kYXJp
ZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKLX0KLQotdm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCog
Y2xpZW50LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCi17Ci0gICAgQVNTRVJUKGNsaWVudCk7
Ci0KLSAgICBpZiAobV9tYXNrZXIuY29udGFpbnMoY2xpZW50KSkKLSAgICAgICAgZGVsZXRlIG1f
bWFza2VyLnRha2UoY2xpZW50KTsKLQotICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xp
ZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVu
dE9ubHlJbnZhbGlkYXRpb24pOwotfQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjph
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSosIEdyYXBoaWNz
Q29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkKLXsKLSAgICBB
U1NFUlQob2JqZWN0KTsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0jaWZuZGVmIE5ERUJVRwotICAg
IEFTU0VSVChyZXNvdXJjZU1vZGUgPT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKHJlc291cmNlTW9kZSk7Ci0jZW5kaWYKLQotICAgIGlmICghbV9tYXNrZXIu
Y29udGFpbnMob2JqZWN0KSkKLSAgICAgICAgbV9tYXNrZXIuc2V0KG9iamVjdCwgbmV3IE1hc2tl
ckRhdGEpOwotCi0gICAgTWFza2VyRGF0YSogbWFza2VyRGF0YSA9IG1fbWFza2VyLmdldChvYmpl
Y3QpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwotICAgIFNWR0lt
YWdlQnVmZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29y
ZGluYXRlU3lzdGVtKG9iamVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0pOwotCi0gICAgRmxvYXRSZWN0
IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3Qob2JqZWN0LT5y
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBGbG9hdFJlY3QgY2xhbXBlZEFi
c29sdXRlVGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRh
cmdldFJlY3RGb3JSZW5kZXJlcihvYmplY3QsIGFic29sdXRlVGFyZ2V0UmVjdCk7Ci0KLSAgICBp
ZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSAmJiAhY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgU1ZHTWFza0VsZW1lbnQqIG1hc2tFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpOwotICAgICAgICBpZiAoIW1hc2tFbGVtZW50
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghU1ZHSW1hZ2VCdWZm
ZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVUYXJnZXRSZWN0LCBjbGFtcGVkQWJz
b2x1dGVUYXJnZXRSZWN0LCBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UsIENvbG9yU3BhY2VMaW5lYXJS
R0IpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEdyYXBoaWNzQ29udGV4
dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Y29udGV4dCgpOwot
ICAgICAgICBBU1NFUlQobWFza0ltYWdlQ29udGV4dCk7Ci0KLSAgICAgICAgLy8gVGhlIHNhdmUv
cmVzdG9yZSBwYWlyIGlzIG5lZWRlZCBmb3IgY2xpcFRvSW1hZ2VCdWZmZXIgLSBpdCBkb2Vzbid0
IHdvcmsgd2l0aG91dCBpdCBvbiBub24tQ2cgcGxhdGZvcm1zLgotICAgICAgICBtYXNrSW1hZ2VD
b250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtY2xh
bXBlZEFic29sdXRlVGFyZ2V0UmVjdC54KCksIC1jbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Lnko
KSk7Ci0gICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9y
bSk7Ci0KLSAgICAgICAgZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKG1hc2tlckRhdGEsIG1hc2tF
bGVtZW50LCBvYmplY3QpOwotICAgIH0KLQotICAgIGlmICghbWFza2VyRGF0YS0+bWFza0ltYWdl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGlw
VG9JbWFnZUJ1ZmZlcihjb250ZXh0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY2xhbXBlZEFic29sdXRl
VGFyZ2V0UmVjdCwgbWFza2VyRGF0YS0+bWFza0ltYWdlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdl
KE1hc2tlckRhdGEqIG1hc2tlckRhdGEsIGNvbnN0IFNWR01hc2tFbGVtZW50KiBtYXNrRWxlbWVu
dCwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBtYXNrSW1h
Z2VDb250ZXh0ID0gbWFza2VyRGF0YS0+bWFza0ltYWdlLT5jb250ZXh0KCk7Ci0gICAgQVNTRVJU
KG1hc2tJbWFnZUNvbnRleHQpOwotCi0gICAgLy8gRXZlbnR1YWxseSBhZGp1c3QgdGhlIG1hc2sg
aW1hZ2UgY29udGV4dCBhY2NvcmRpbmcgdG8gdGhlIHRhcmdldCBvYmplY3RCb3VuZGluZ0JveC4K
LSAgICBBZmZpbmVUcmFuc2Zvcm0gbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKLSAgICBpZiAo
bWFza0VsZW1lbnQtPm1hc2tDb250ZW50VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklU
X1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5k
aW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwotICAgICAgICBtYXNrQ29udGVu
dFRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJv
dW5kaW5nQm94LnkoKSk7Ci0gICAgICAgIG1hc2tDb250ZW50VHJhbnNmb3JtYXRpb24uc2NhbGVO
b25Vbmlmb3JtKG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJvdW5kaW5nQm94Lmhl
aWdodCgpKTsKLSAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKG1hc2tDb250ZW50
VHJhbnNmb3JtYXRpb24pOwotICAgIH0KLQotICAgIC8vIERyYXcgdGhlIGNvbnRlbnQgaW50byB0
aGUgSW1hZ2VCdWZmZXIuCi0gICAgZm9yIChOb2RlKiBub2RlID0gbWFza0VsZW1lbnQtPmZpcnN0
Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghbm9k
ZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKS0+aXNT
dHlsZWQoKSB8fCAhcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVu
ZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgICAgIGlmICghc3R5bGUg
fHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNpYmlsaXR5KCkgIT0gVklT
SUJMRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xz
OjpyZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihtYXNrZXJEYXRhLT5tYXNrSW1hZ2UuZ2V0KCks
IHJlbmRlcmVyLCBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uKTsKLSAgICB9Ci0KLSAgICBtYXNr
SW1hZ2VDb250ZXh0LT5yZXN0b3JlKCk7Ci0KLSNpZiAhUExBVEZPUk0oQ0cpCi0gICAgbWFza2Vy
RGF0YS0+bWFza0ltYWdlLT50cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VSR0Is
IENvbG9yU3BhY2VMaW5lYXJSR0IpOwotI2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgdGhlIGx1bWlu
YW5jZSBtYXNrLgotICAgIEludFJlY3QgbWFza0ltYWdlUmVjdChJbnRQb2ludCgpLCBtYXNrZXJE
YXRhLT5tYXNrSW1hZ2UtPnNpemUoKSk7Ci0gICAgUmVmUHRyPEJ5dGVBcnJheT4gc3JjUGl4ZWxB
cnJheSA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKG1h
c2tJbWFnZVJlY3QpOwotCi0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVs
QXJyYXktPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhl
bE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAg
dW5zaWduZWQgY2hhciBhID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsT2Zmc2V0ICsgMyk7Ci0g
ICAgICAgIGlmICghYSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1bnNpZ25lZCBj
aGFyIHIgPSBzcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxPZmZzZXQpOwotICAgICAgICB1bnNpZ25l
ZCBjaGFyIGcgPSBzcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAg
dW5zaWduZWQgY2hhciBiID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsT2Zmc2V0ICsgMik7Ci0K
LSAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4w
NzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChw
aXhlbE9mZnNldCArIDMsIGx1bWEpOwotICAgIH0KLQotICAgIG1hc2tlckRhdGEtPm1hc2tJbWFn
ZS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY1BpeGVsQXJyYXkuZ2V0KCksIG1hc2tJbWFn
ZVJlY3Quc2l6ZSgpLCBtYXNrSW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlcjo6Y2FsY3VsYXRlTWFza0NvbnRlbnRSZXBhaW50UmVjdCgpCi17
Ci0gICAgZm9yIChOb2RlKiBjaGlsZE5vZGUgPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGRO
b2RlOyBjaGlsZE5vZGUgPSBjaGlsZE5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYg
KCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4o
Y2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAg
ICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNp
YmlsaXR5KCkgIT0gVklTSUJMRSkKLSAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9t
YXNrQ29udGVudEJvdW5kYXJpZXMudW5pdGUocmVuZGVyZXItPmxvY2FsVG9QYXJlbnRUcmFuc2Zv
cm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7
Ci0gICAgfQotfQotCi1GbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OnJlc291cmNl
Qm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgU1ZHTWFza0VsZW1lbnQq
IG1hc2tFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpOwotICAg
IEFTU0VSVChtYXNrRWxlbWVudCk7Ci0KLSAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3gg
PSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7Ci0gICAgRmxvYXRSZWN0IG1hc2tCb3VuZGFy
aWVzID0gbWFza0VsZW1lbnQtPm1hc2tCb3VuZGluZ0JveChvYmplY3RCb3VuZGluZ0JveCk7Ci0K
LSAgICAvLyBSZXNvdXJjZSB3YXMgbm90IGxheW91dGVkIHlldC4gR2l2ZSBiYWNrIGNsaXBwaW5n
IHJlY3Qgb2YgdGhlIG1hc2suCi0gICAgaWYgKHNlbGZOZWVkc0xheW91dCgpKQotICAgICAgICBy
ZXR1cm4gbWFza0JvdW5kYXJpZXM7Ci0KLSAgICBpZiAobV9tYXNrQ29udGVudEJvdW5kYXJpZXMu
aXNFbXB0eSgpKQotICAgICAgICBjYWxjdWxhdGVNYXNrQ29udGVudFJlcGFpbnRSZWN0KCk7Ci0K
LSAgICBGbG9hdFJlY3QgbWFza1JlY3QgPSBtX21hc2tDb250ZW50Qm91bmRhcmllczsKLSAgICBp
ZiAobWFza0VsZW1lbnQtPm1hc2tDb250ZW50VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19V
TklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRy
YW5zZm9ybTsKLSAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54
KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7Ci0gICAgICAgIHRyYW5zZm9ybS5zY2FsZU5vblVu
aWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0
KCkpOwotICAgICAgICBtYXNrUmVjdCA9IHRyYW5zZm9ybS5tYXBSZWN0KG1hc2tSZWN0KTsKLSAg
ICB9Ci0KLSAgICBtYXNrUmVjdC5pbnRlcnNlY3QobWFza0JvdW5kYXJpZXMpOwotICAgIHJldHVy
biBtYXNrUmVjdDsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oCShy
ZXZpc2lvbiA3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZU1hc2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcl9oCi0jZGVmaW5lIFJl
bmRlclNWR1Jlc291cmNlTWFza2VyX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuaCIKLSNpbmNsdWRlICJTVkdNYXNrRWxlbWVudC5oIgotI2luY2x1ZGUgIlNW
R1VuaXRUeXBlcy5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IE1hc2tlckRhdGEgewot
ICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlOwotfTsKLQotY2xhc3MgUmVuZGVyU1ZH
UmVzb3VyY2VNYXNrZXIgOiBwdWJsaWMgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIgewotcHVi
bGljOgotICAgIFJlbmRlclNWR1Jlc291cmNlTWFza2VyKFNWR01hc2tFbGVtZW50Kik7Ci0gICAg
dmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIoKTsKLQotICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tl
ciI7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wg
bWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGll
bnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1
ZSk7Ci0gICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVy
U3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsK
LSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCop
OwotCi0gICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtYXNrVW5pdHMoKSBjb25zdCB7IHJl
dHVybiB0b1VuaXRUeXBlKHN0YXRpY19jYXN0PFNWR01hc2tFbGVtZW50Kj4obm9kZSgpKS0+bWFz
a1VuaXRzKCkpOyB9Ci0gICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtYXNrQ29udGVudFVu
aXRzKCkgY29uc3QgeyByZXR1cm4gdG9Vbml0VHlwZShzdGF0aWNfY2FzdDxTVkdNYXNrRWxlbWVu
dCo+KG5vZGUoKSktPm1hc2tDb250ZW50VW5pdHMoKSk7IH0KLQotICAgIHZpcnR1YWwgUmVuZGVy
U1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VU
eXBlOyB9Ci0gICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsK
LQotcHJpdmF0ZToKLSAgICB2b2lkIGRyYXdDb250ZW50SW50b01hc2tJbWFnZShNYXNrZXJEYXRh
KiwgY29uc3QgU1ZHTWFza0VsZW1lbnQqLCBSZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIGNhbGN1
bGF0ZU1hc2tDb250ZW50UmVwYWludFJlY3QoKTsKLQotICAgIEZsb2F0UmVjdCBtX21hc2tDb250
ZW50Qm91bmRhcmllczsKLSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIE1hc2tlckRhdGEqPiBt
X21hc2tlcjsKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShyZXZp
c2lvbiA3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI5MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIgotCi0jaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybkF0dHJp
YnV0ZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCi0jaW5jbHVkZSAiU1ZHSW1hZ2VC
dWZmZXJUb29scy5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1SZW5kZXJTVkdSZXNvdXJjZVR5cGUgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuOjpzX3Jlc291cmNlVHlwZSA9IFBhdHRlcm5SZXNvdXJjZVR5cGU7Ci0KLVJlbmRlclNWR1Jl
c291cmNlUGF0dGVybjo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuKFNWR1BhdHRlcm5FbGVtZW50
KiBub2RlKQotICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKLSAgICAsIG1f
c2hvdWxkQ29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzKHRydWUpCi17Ci19Ci0KLVJlbmRlclNWR1Jl
c291cmNlUGF0dGVybjo6flJlbmRlclNWR1Jlc291cmNlUGF0dGVybigpCi17Ci0gICAgaWYgKG1f
cGF0dGVybi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlbGV0ZUFsbFZhbHVl
cyhtX3BhdHRlcm4pOwotICAgIG1fcGF0dGVybi5jbGVhcigpOwotfQotCi12b2lkIFJlbmRlclNW
R1Jlc291cmNlUGF0dGVybjo6cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJ
bnZhbGlkYXRpb24pCi17Ci0gICAgaWYgKCFtX3BhdHRlcm4uaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGRlbGV0ZUFsbFZhbHVlcyhtX3BhdHRlcm4pOwotICAgICAgICBtX3BhdHRlcm4uY2xlYXIoKTsK
LSAgICB9Ci0KLSAgICBtX3Nob3VsZENvbGxlY3RQYXR0ZXJuQXR0cmlidXRlcyA9IHRydWU7Ci0g
ICAgbWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IFJl
cGFpbnRJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKLX0KLQotdm9pZCBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmpl
Y3QqIGNsaWVudCwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uKQotewotICAgIEFTU0VSVChjbGll
bnQpOwotCi0gICAgaWYgKG1fcGF0dGVybi5jb250YWlucyhjbGllbnQpKQotICAgICAgICBkZWxl
dGUgbV9wYXR0ZXJuLnRha2UoY2xpZW50KTsKLQotICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRp
b24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gUmVwYWludEludmFsaWRhdGlvbiA6IFBh
cmVudE9ubHlJbnZhbGlkYXRpb24pOwotfQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVy
bjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUp
Ci17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLSAgICBBU1NFUlQo
Y29udGV4dCk7Ci0gICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUp
OwotCi0gICAgLy8gQmUgc3VyZSB0byBzeW5jaHJvbml6ZSBhbGwgU1ZHIHByb3BlcnRpZXMgb24g
dGhlIHBhdHRlcm5FbGVtZW50IF9iZWZvcmVfIHByb2Nlc3NpbmcgYW55IGZ1cnRoZXIuCi0gICAg
Ly8gT3RoZXJ3aGlzZSB0aGUgY2FsbCB0byBjb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMoKSBiZWxv
dywgbWF5IGNhdXNlIHRoZSBTVkcgRE9NIHByb3BlcnR5Ci0gICAgLy8gc3luY2hyb25pemF0aW9u
IHRvIGtpY2sgaW4sIHdoaWNoIGNhdXNlcyByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCkgdG8g
YmUgY2FsbGVkLCB3aGljaCBpbiB0dXJuIGRlbGV0ZXMgb3VyCi0gICAgLy8gUGF0dGVybkRhdGEg
b2JqZWN0ISBMZWF2aW5nIG91dCB0aGUgbGluZSBiZWxvdyB3aWxsIGNhdXNlIHN2Zy9keW5hbWlj
LXVwZGF0ZXMvU1ZHUGF0dGVybkVsZW1lbnQtc3ZnZG9tKiB0byBjcmFzaC4KLSAgICBTVkdQYXR0
ZXJuRWxlbWVudCogcGF0dGVybkVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdQYXR0ZXJuRWxlbWVu
dCo+KG5vZGUoKSk7Ci0gICAgaWYgKCFwYXR0ZXJuRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKG1fc2hvdWxkQ29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzKSB7Ci0gICAg
ICAgIHBhdHRlcm5FbGVtZW50LT51cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShhbnlRTmFtZSgp
KTsKLQotICAgICAgICBtX2F0dHJpYnV0ZXMgPSBQYXR0ZXJuQXR0cmlidXRlcygpOwotICAgICAg
ICBwYXR0ZXJuRWxlbWVudC0+Y29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzKG1fYXR0cmlidXRlcyk7
Ci0gICAgICAgIG1fc2hvdWxkQ29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzID0gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gU3BlYzogV2hlbiB0aGUgZ2VvbWV0cnkgb2YgdGhlIGFwcGxpY2FibGUgZWxl
bWVudCBoYXMgbm8gd2lkdGggb3IgaGVpZ2h0IGFuZCBvYmplY3RCb3VuZGluZ0JveCBpcyBzcGVj
aWZpZWQsCi0gICAgLy8gdGhlbiB0aGUgZ2l2ZW4gZWZmZWN0IChlLmcuIGEgZ3JhZGllbnQgb3Ig
YSBmaWx0ZXIpIHdpbGwgYmUgaWdub3JlZC4KLSAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdC
b3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7Ci0gICAgaWYgKG1fYXR0cmlidXRlcy5i
b3VuZGluZ0JveE1vZGUoKSAmJiBvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9wYXR0ZXJuLmNvbnRhaW5zKG9iamVjdCkpCi0g
ICAgICAgIG1fcGF0dGVybi5zZXQob2JqZWN0LCBuZXcgUGF0dGVybkRhdGEpOwotCi0gICAgUGF0
dGVybkRhdGEqIHBhdHRlcm5EYXRhID0gbV9wYXR0ZXJuLmdldChvYmplY3QpOwotICAgIGlmICgh
cGF0dGVybkRhdGEtPnBhdHRlcm4pIHsKLSAgICAgICAgLy8gSWYgd2UgY291bGRuJ3QgZGV0ZXJt
aW5lIHRoZSBwYXR0ZXJuIGNvbnRlbnQgZWxlbWVudCByb290LCBzdG9wIGhlcmUuCi0gICAgICAg
IGlmICghbV9hdHRyaWJ1dGVzLnBhdHRlcm5Db250ZW50RWxlbWVudCgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIENvbXB1dGUgYWxsIG5lY2Vzc2FyeSB0cmFuc2Zv
cm1hdGlvbnMgdG8gYnVpbGQgdGhlIHRpbGUgaW1hZ2UgJiB0aGUgcGF0dGVybi4KLSAgICAgICAg
RmxvYXRSZWN0IHRpbGVCb3VuZGFyaWVzOwotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdGlsZUlt
YWdlVHJhbnNmb3JtOwotICAgICAgICBpZiAoIWJ1aWxkVGlsZUltYWdlVHJhbnNmb3JtKG9iamVj
dCwgbV9hdHRyaWJ1dGVzLCBwYXR0ZXJuRWxlbWVudCwgdGlsZUJvdW5kYXJpZXMsIHRpbGVJbWFn
ZVRyYW5zZm9ybSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwotICAgICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xz
OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbShv
YmplY3QsIGFic29sdXRlVHJhbnNmb3JtKTsKLQotICAgICAgICBGbG9hdFJlY3QgYWJzb2x1dGVU
aWxlQm91bmRhcmllcyA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QodGlsZUJvdW5kYXJpZXMp
OwotCi0gICAgICAgIC8vIEJ1aWxkIHRpbGUgaW1hZ2UuCi0gICAgICAgIE93blB0cjxJbWFnZUJ1
ZmZlcj4gdGlsZUltYWdlID0gY3JlYXRlVGlsZUltYWdlKG9iamVjdCwgbV9hdHRyaWJ1dGVzLCB0
aWxlQm91bmRhcmllcywgYWJzb2x1dGVUaWxlQm91bmRhcmllcywgdGlsZUltYWdlVHJhbnNmb3Jt
KTsKLSAgICAgICAgaWYgKCF0aWxlSW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgUmVmUHRyPEltYWdlPiBjb3BpZWRJbWFnZSA9IHRpbGVJbWFnZS0+Y29weUltYWdl
KCk7Ci0gICAgICAgIGlmICghY29waWVkSW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgLy8gQnVpbGQgcGF0dGVybi4KLSAgICAgICAgcGF0dGVybkRhdGEtPnBhdHRl
cm4gPSBQYXR0ZXJuOjpjcmVhdGUoY29waWVkSW1hZ2UsIHRydWUsIHRydWUpOwotICAgICAgICBp
ZiAoIXBhdHRlcm5EYXRhLT5wYXR0ZXJuKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIC8vIENvbXB1dGUgcGF0dGVybiBzcGFjZSB0cmFuc2Zvcm1hdGlvbi4KLSAgICAgICAg
cGF0dGVybkRhdGEtPnRyYW5zZm9ybS50cmFuc2xhdGUodGlsZUJvdW5kYXJpZXMueCgpLCB0aWxl
Qm91bmRhcmllcy55KCkpOwotICAgICAgICBwYXR0ZXJuRGF0YS0+dHJhbnNmb3JtLnNjYWxlKHRp
bGVCb3VuZGFyaWVzLndpZHRoKCkgLyBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLndpZHRoKCksIHRp
bGVCb3VuZGFyaWVzLmhlaWdodCgpIC8gYWJzb2x1dGVUaWxlQm91bmRhcmllcy5oZWlnaHQoKSk7
Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPSBtX2F0dHJpYnV0
ZXMucGF0dGVyblRyYW5zZm9ybSgpOwotICAgICAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJ
ZGVudGl0eSgpKQotICAgICAgICAgICAgcGF0dGVybkRhdGEtPnRyYW5zZm9ybS5tdWx0aXBseShw
YXR0ZXJuVHJhbnNmb3JtKTsKLQotICAgICAgICBwYXR0ZXJuRGF0YS0+cGF0dGVybi0+c2V0UGF0
dGVyblNwYWNlVHJhbnNmb3JtKHBhdHRlcm5EYXRhLT50cmFuc2Zvcm0pOwotICAgIH0KLQotICAg
IC8vIERyYXcgcGF0dGVybgotICAgIGNvbnRleHQtPnNhdmUoKTsKLQotICAgIGNvbnN0IFNWR1Jl
bmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdTdHlsZSgpOwotICAgIEFTU0VSVChzdmdT
dHlsZSk7Ci0KLSAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7Ci0gICAg
ICAgIGNvbnRleHQtPnNldEFscGhhKHN2Z1N0eWxlLT5maWxsT3BhY2l0eSgpKTsKLSAgICAgICAg
Y29udGV4dC0+c2V0RmlsbFBhdHRlcm4ocGF0dGVybkRhdGEtPnBhdHRlcm4pOwotICAgICAgICBj
b250ZXh0LT5zZXRGaWxsUnVsZShzdmdTdHlsZS0+ZmlsbFJ1bGUoKSk7Ci0gICAgfSBlbHNlIGlm
IChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkgewotICAgICAgICBpZiAoc3ZnU3R5
bGUtPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRSkKLSAgICAgICAgICAg
IHBhdHRlcm5EYXRhLT5wYXR0ZXJuLT5zZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0odHJhbnNmb3Jt
T25Ob25TY2FsaW5nU3Ryb2tlKG9iamVjdCwgcGF0dGVybkRhdGEtPnRyYW5zZm9ybSkpOwotICAg
ICAgICBjb250ZXh0LT5zZXRBbHBoYShzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpKTsKLSAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlUGF0dGVybihwYXR0ZXJuRGF0YS0+cGF0dGVybik7Ci0gICAg
ICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwg
c3R5bGUsIG9iamVjdCk7Ci0gICAgfQotCi0gICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9U
ZXh0TW9kZSkgewotICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoVGV4dE1vZGVGaWxsKTsK
LQotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAgICAgY29udGV4dC0+YXBwbHlGaWxsUGF0dGVy
bigpOwotI2VuZGlmCi0gICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0
cm9rZU1vZGUpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShUZXh0
TW9kZVN0cm9rZSk7Ci0KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIGNvbnRleHQtPmFw
cGx5U3Ryb2tlUGF0dGVybigpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVk
IHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKLXsKLSAgICBBU1NFUlQoY29u
dGV4dCk7Ci0gICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwot
Ci0gICAgaWYgKHBhdGggJiYgIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7Ci0g
ICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAgICBj
b250ZXh0LT5maWxsUGF0aCgqcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAm
IEFwcGx5VG9TdHJva2VNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0
aCk7Ci0gICAgfQotCi0gICAgY29udGV4dC0+cmVzdG9yZSgpOwotfQotCi1zdGF0aWMgaW5saW5l
IEZsb2F0UmVjdCBjYWxjdWxhdGVQYXR0ZXJuQm91bmRhcmllcyhjb25zdCBQYXR0ZXJuQXR0cmli
dXRlcyYgYXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVkdQYXR0
ZXJuRWxlbWVudCogcGF0dGVybkVsZW1lbnQpCi17Ci0gICAgQVNTRVJUKHBhdHRlcm5FbGVtZW50
KTsKLQotICAgIGlmIChhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKQotICAgICAgICByZXR1
cm4gRmxvYXRSZWN0KGF0dHJpYnV0ZXMueCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RC
b3VuZGluZ0JveC53aWR0aCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZXMueSgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RC
b3VuZGluZ0JveC5oZWlnaHQoKSArIG9iamVjdEJvdW5kaW5nQm94LnkoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVzLndpZHRoKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9i
amVjdEJvdW5kaW5nQm94LndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmli
dXRlcy5oZWlnaHQoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3guaGVp
Z2h0KCkpOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdChhdHRyaWJ1dGVzLngoKS52YWx1ZShwYXR0
ZXJuRWxlbWVudCksCi0gICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnkoKS52YWx1ZShw
YXR0ZXJuRWxlbWVudCksCi0gICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLndpZHRoKCku
dmFsdWUocGF0dGVybkVsZW1lbnQpLAotICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5o
ZWlnaHQoKS52YWx1ZShwYXR0ZXJuRWxlbWVudCkpOwotfQotCi1ib29sIFJlbmRlclNWR1Jlc291
cmNlUGF0dGVybjo6YnVpbGRUaWxlSW1hZ2VUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYgYXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVkdQYXR0ZXJuRWxl
bWVudCogcGF0dGVybkVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0JiBwYXR0ZXJuQm91bmRhcmllcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVy
ZXIpOwotICAgIEFTU0VSVChwYXR0ZXJuRWxlbWVudCk7Ci0KLSAgICBGbG9hdFJlY3Qgb2JqZWN0
Qm91bmRpbmdCb3ggPSByZW5kZXJlci0+b2JqZWN0Qm91bmRpbmdCb3goKTsKLSAgICBwYXR0ZXJu
Qm91bmRhcmllcyA9IGNhbGN1bGF0ZVBhdHRlcm5Cb3VuZGFyaWVzKGF0dHJpYnV0ZXMsIG9iamVj
dEJvdW5kaW5nQm94LCBwYXR0ZXJuRWxlbWVudCk7IAotICAgIGlmIChwYXR0ZXJuQm91bmRhcmll
cy53aWR0aCgpIDw9IDAgfHwgcGF0dGVybkJvdW5kYXJpZXMuaGVpZ2h0KCkgPD0gMCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdCb3hDVE0gPSBwYXR0
ZXJuRWxlbWVudC0+dmlld0JveFRvVmlld1RyYW5zZm9ybShwYXR0ZXJuRWxlbWVudC0+dmlld0Jv
eCgpLCBwYXR0ZXJuRWxlbWVudC0+cHJlc2VydmVBc3BlY3RSYXRpbygpLCBwYXR0ZXJuQm91bmRh
cmllcy53aWR0aCgpLCBwYXR0ZXJuQm91bmRhcmllcy5oZWlnaHQoKSk7Ci0KLSAgICAvLyBBcHBs
eSB2aWV3Qm94L29iamVjdEJvdW5kaW5nQm94IHRyYW5zZm9ybWF0aW9ucy4KLSAgICBpZiAoIXZp
ZXdCb3hDVE0uaXNJZGVudGl0eSgpKQotICAgICAgICB0aWxlSW1hZ2VUcmFuc2Zvcm0gPSB2aWV3
Qm94Q1RNOwotICAgIGVsc2UgaWYgKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlQ29udGVudCgp
KSB7Ci0gICAgICAgIHRpbGVJbWFnZVRyYW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdC
b3gueCgpLCBvYmplY3RCb3VuZGluZ0JveC55KCkpOwotICAgICAgICB0aWxlSW1hZ2VUcmFuc2Zv
cm0uc2NhbGUob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdCb3guaGVp
Z2h0KCkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1QYXNzT3duUHRyPEltYWdl
QnVmZmVyPiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmNyZWF0ZVRpbGVJbWFnZShSZW5kZXJP
YmplY3QqIG9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiBhdHRyaWJ1
dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiB0aWxlQm91bmRhcmllcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUaWxlQm91bmRhcmllcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdAotewotICAgIEFTU0VS
VChvYmplY3QpOwotCi0gICAgLy8gQ2xhbXAgdGlsZSBpbWFnZSBzaXplIGFnYWluc3QgU1ZHIHZp
ZXdwb3J0IHNpemUsIGFzIGxhc3QgcmVzb3J0LCB0byBhdm9pZCBhbGxvY2F0aW5nIGh1Z2UgaW1h
Z2UgYnVmZmVycy4KLSAgICBGbG9hdFJlY3QgY29udGVudEJveFJlY3QgPSBTVkdSZW5kZXJTdXBw
b3J0OjpmaW5kVHJlZVJvb3RPYmplY3Qob2JqZWN0KS0+Y29udGVudEJveFJlY3QoKTsKLQotICAg
IEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcyA9IGFic29sdXRlVGlsZUJv
dW5kYXJpZXM7Ci0gICAgaWYgKGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLndpZHRoKCkg
PiBjb250ZW50Qm94UmVjdC53aWR0aCgpKQotICAgICAgICBjbGFtcGVkQWJzb2x1dGVUaWxlQm91
bmRhcmllcy5zZXRXaWR0aChjb250ZW50Qm94UmVjdC53aWR0aCgpKTsKLQotICAgIGlmIChjbGFt
cGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcy5oZWlnaHQoKSA+IGNvbnRlbnRCb3hSZWN0LmhlaWdo
dCgpKQotICAgICAgICBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcy5zZXRIZWlnaHQoY29u
dGVudEJveFJlY3QuaGVpZ2h0KCkpOwotCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1h
Z2U7Ci0KLSAgICBpZiAoIVNWR0ltYWdlQnVmZmVyVG9vbHM6OmNyZWF0ZUltYWdlQnVmZmVyKGFi
c29sdXRlVGlsZUJvdW5kYXJpZXMsIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCB0aWxl
SW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IpKQotICAgICAgICByZXR1cm4gUGFzc093blB0cjxJ
bWFnZUJ1ZmZlcj4oKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCogdGlsZUltYWdlQ29udGV4dCA9
IHRpbGVJbWFnZS0+Y29udGV4dCgpOwotICAgIEFTU0VSVCh0aWxlSW1hZ2VDb250ZXh0KTsKLQot
ICAgIC8vIFRoZSBpbWFnZSBidWZmZXIgcmVwcmVzZW50cyB0aGUgZmluYWwgcmVuZGVyZWQgc2l6
ZSwgc28gdGhlIGNvbnRlbnQgaGFzIHRvIGJlIHNjYWxlZCAodG8gYXZvaWQgcGl4ZWxhdGlvbiku
Ci0gICAgdGlsZUltYWdlQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKGFic29sdXRlVGlsZUJvdW5k
YXJpZXMud2lkdGgoKSAvIHRpbGVCb3VuZGFyaWVzLndpZHRoKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlVGlsZUJvdW5kYXJpZXMuaGVpZ2h0KCkgLyB0
aWxlQm91bmRhcmllcy5oZWlnaHQoKSkpOwotCi0gICAgLy8gQXBwbHkgdGlsZSBpbWFnZSB0cmFu
c2Zvcm1hdGlvbnMuCi0gICAgaWYgKCF0aWxlSW1hZ2VUcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQot
ICAgICAgICB0aWxlSW1hZ2VDb250ZXh0LT5jb25jYXRDVE0odGlsZUltYWdlVHJhbnNmb3JtKTsK
LQotICAgIEFmZmluZVRyYW5zZm9ybSBjb250ZW50VHJhbnNmb3JtYXRpb247Ci0KLSAgICAvLyBE
cmF3IHRoZSBjb250ZW50IGludG8gdGhlIEltYWdlQnVmZmVyLgotICAgIGZvciAoTm9kZSogbm9k
ZSA9IGF0dHJpYnV0ZXMucGF0dGVybkNvbnRlbnRFbGVtZW50KCktPmZpcnN0Q2hpbGQoKTsgbm9k
ZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5pc1NW
R0VsZW1lbnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpLT5pc1N0eWxlZCgp
IHx8ICFub2RlLT5yZW5kZXJlcigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFNW
R0ltYWdlQnVmZmVyVG9vbHM6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKHRpbGVJbWFnZS5n
ZXQoKSwgbm9kZS0+cmVuZGVyZXIoKSwgY29udGVudFRyYW5zZm9ybWF0aW9uKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdGlsZUltYWdlLnJlbGVhc2UoKTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmgJKHJldmlzaW9uIDc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuX2gK
LSNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuX2gKLQotI2lmIEVOQUJMRShTVkcpCi0j
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiUGF0
dGVybkF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5o
IgotI2luY2x1ZGUgIlNWR1BhdHRlcm5FbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5cGVz
LmgiCi0KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgUGF0dGVybkRhdGEgewotICAgIFJlZlB0
cjxQYXR0ZXJuPiBwYXR0ZXJuOwotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci19Owot
Ci1jbGFzcyBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4gOiBwdWJsaWMgUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIgewotcHVibGljOgotICAgIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybihTVkdQ
YXR0ZXJuRWxlbWVudCopOwotICAgIHZpcnR1YWwgflJlbmRlclNWR1Jlc291cmNlUGF0dGVybigp
OwotCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlclNWR1Jlc291cmNlUGF0dGVybiI7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVB
bGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwotICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBt
YXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNp
Z25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVz
b3VyY2VNb2RlLCBjb25zdCBQYXRoKik7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VC
b3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotCi0gICAg
dmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1
cm4gc19yZXNvdXJjZVR5cGU7IH0KLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNf
cmVzb3VyY2VUeXBlOwotCi1wcml2YXRlOgotICAgIGJvb2wgYnVpbGRUaWxlSW1hZ2VUcmFuc2Zv
cm0oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmLCBjb25zdCBTVkdQYXR0
ZXJuRWxlbWVudCosIEZsb2F0UmVjdCYgcGF0dGVybkJvdW5kYXJpZXMsIEFmZmluZVRyYW5zZm9y
bSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdDsKLQotICAgIFBhc3NPd25QdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZVRpbGVJbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBQYXR0ZXJuQXR0cmlidXRl
cyYsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZUJvdW5kYXJpZXMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUaWxlQm91
bmRhcmllcywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0aWxlSW1hZ2VUcmFuc2Zvcm0pIGNvbnN0
OwotCi0gICAgYm9vbCBtX3Nob3VsZENvbGxlY3RQYXR0ZXJuQXR0cmlidXRlcyA6IDE7Ci0gICAg
UGF0dGVybkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwotICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0
KiwgUGF0dGVybkRhdGEqPiBtX3BhdHRlcm47Ci19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFk
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwCShyZXZpc2lvbiA3NTM0NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlUmFkaWFsR3JhZGllbnQuaCIKLQotI2luY2x1ZGUgIlJhZGlhbEdyYWRpZW50QXR0cmli
dXRlcy5oIgotI2luY2x1ZGUgIlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLVJlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZVJh
ZGlhbEdyYWRpZW50OjpzX3Jlc291cmNlVHlwZSA9IFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBl
OwotCi1SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50OjpSZW5kZXJTVkdSZXNvdXJjZVJh
ZGlhbEdyYWRpZW50KFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQobm9kZSkKLXsKLX0KLQotUmVuZGVyU1ZHUmVzb3VyY2VSYWRp
YWxHcmFkaWVudDo6flJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQoKQotewotfQotCi12
b2lkIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQ6OmNvbGxlY3RHcmFkaWVudEF0dHJp
YnV0ZXMoU1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQpCi17Ci0gICAgbV9hdHRy
aWJ1dGVzID0gUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzKCk7Ci0gICAgc3RhdGljX2Nhc3Q8U1ZH
UmFkaWFsR3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KS0+Y29sbGVjdEdyYWRpZW50
QXR0cmlidXRlcyhtX2F0dHJpYnV0ZXMpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlUmFk
aWFsR3JhZGllbnQ6OmJ1aWxkR3JhZGllbnQoR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEsIFNW
R0dyYWRpZW50RWxlbWVudCogZ3JhZGllbnRFbGVtZW50KSBjb25zdAotewotICAgIFNWR1JhZGlh
bEdyYWRpZW50RWxlbWVudCogcmFkaWFsR3JhZGllbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
UmFkaWFsR3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KTsKLQotICAgIC8vIERldGVy
bWluZSBncmFkaWVudCBmb2NhbC9jZW50ZXIgcG9pbnRzIGFuZCByYWRpdXMKLSAgICBGbG9hdFBv
aW50IGZvY2FsUG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludDsKLSAgICBmbG9hdCBy
YWRpdXM7Ci0gICAgcmFkaWFsR3JhZGllbnRFbGVtZW50LT5jYWxjdWxhdGVGb2NhbENlbnRlclBv
aW50c0FuZFJhZGl1cyhtX2F0dHJpYnV0ZXMsIGZvY2FsUG9pbnQsIGNlbnRlclBvaW50LCByYWRp
dXMpOwotCi0gICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoZm9j
YWxQb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCAvLyBTVkcgZG9lcyBub3Qgc3VwcG9ydCBhICJmb2N1cyByYWRpdXMiCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyUG9pbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzKTsKLQotICAgIGdyYWRp
ZW50RGF0YS0+Z3JhZGllbnQtPnNldFNwcmVhZE1ldGhvZChtX2F0dHJpYnV0ZXMuc3ByZWFkTWV0
aG9kKCkpOwotCi0gICAgLy8gQWRkIHN0b3BzCi0gICAgYWRkU3RvcHMoZ3JhZGllbnREYXRhLCBt
X2F0dHJpYnV0ZXMuc3RvcHMoKSk7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdy
YWRpZW50LmgJKHJldmlzaW9uIDc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFJlbmRlclNWR1Jlc291cmNl
UmFkaWFsR3JhZGllbnRfaAotI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50
X2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVz
LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDsKLQotY2xhc3MgUmVu
ZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudCA6IHB1YmxpYyBSZW5kZXJTVkdSZXNvdXJjZUdy
YWRpZW50IHsKLXB1YmxpYzoKLSAgICBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50KFNW
R1JhZGlhbEdyYWRpZW50RWxlbWVudCopOwotICAgIHZpcnR1YWwgflJlbmRlclNWR1Jlc291cmNl
UmFkaWFsR3JhZGllbnQoKTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50IjsgfQotCi0g
ICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBl
IHNfcmVzb3VyY2VUeXBlOwotCi0gICAgdmlydHVhbCBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKTsgfQotICAgIHZpcnR1
YWwgdm9pZCBjYWxjdWxhdGVHcmFkaWVudFRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkgeyB0cmFuc2Zvcm0gPSBtX2F0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKFNWR0dyYWRpZW50RWxl
bWVudCopOwotICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KEdyYWRpZW50RGF0YSosIFNW
R0dyYWRpZW50RWxlbWVudCopIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFJhZGlhbEdyYWRpZW50
QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Ci19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmNwcAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgot
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIK
LSNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0KLSNpZiBQTEFURk9STShTS0lBKQotI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVJlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6
OnNfcmVzb3VyY2VUeXBlID0gU29saWRDb2xvclJlc291cmNlVHlwZTsKLQotUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yOjpSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IoKQotewotfQotCi1S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6On5SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Io
KQotewotfQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6YXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpCi17Ci0gICAgLy8gV2Ug
YXJlIE5PVCBhbGxvd2VkIHRvIEFTU0VSVChvYmplY3QpIGhlcmUsIHVubGlrZSBhbGwgb3RoZXIg
cmVzb3VyY2VzLgotICAgIC8vIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciBpcyB0aGUgb25s
eSByZXNvdXJjZSB3aGljaCBtYXkgYmUgdXNlZCBmcm9tIEhUTUwsIHdoZW4gcmVuZGVyaW5nCi0g
ICAgLy8gU1ZHIEZvbnRzIGZvciBhIEhUTUwgZG9jdW1lbnQuIFRoaXMgd2lsbCBiZSBpbmRpY2F0
ZWQgYnkgYSBudWxsIFJlbmRlck9iamVjdCBwb2ludGVyLgotICAgIEFTU0VSVChjb250ZXh0KTsK
LSAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7Ci0KLSAgICBj
b25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSA/IHN0eWxlLT5zdmdTdHlsZSgp
IDogMDsKLSAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdHlsZSA/IHN0eWxlLT5jb2xvclNw
YWNlKCkgOiBDb2xvclNwYWNlRGV2aWNlUkdCOwotCi0gICAgaWYgKHJlc291cmNlTW9kZSAmIEFw
cGx5VG9GaWxsTW9kZSkgewotICAgICAgICBjb250ZXh0LT5zZXRBbHBoYShzdmdTdHlsZSA/IHN2
Z1N0eWxlLT5maWxsT3BhY2l0eSgpIDogMS4wZik7Ci0gICAgICAgIGNvbnRleHQtPnNldEZpbGxD
b2xvcihtX2NvbG9yLCBjb2xvclNwYWNlKTsKLSAgICAgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUo
c3ZnU3R5bGUgPyBzdmdTdHlsZS0+ZmlsbFJ1bGUoKSA6IFJVTEVfTk9OWkVSTyk7Ci0KLSAgICAg
ICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnNldFRleHREcmF3aW5nTW9kZShUZXh0TW9kZUZpbGwpOwotICAgIH0gZWxzZSBpZiAocmVz
b3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpIHsKLSAgICAgICAgY29udGV4dC0+c2V0QWxw
aGEoc3ZnU3R5bGUgPyBzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpIDogMS4wZik7Ci0gICAgICAg
IGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKG1fY29sb3IsIGNvbG9yU3BhY2UpOwotCi0gICAgICAg
IGlmIChzdHlsZSkKLSAgICAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5
bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7Ci0KLSAgICAgICAgaWYgKHJlc291
cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFRleHRE
cmF3aW5nTW9kZShUZXh0TW9kZVN0cm9rZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCBy
ZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQpOwot
ICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKLQotICAgIGlm
IChwYXRoICYmICEocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewotICAgICAgICBp
ZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+
ZmlsbFBhdGgoKnBhdGgpOwotICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRv
U3Ryb2tlTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOwotICAg
IH0KLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgJKHJldmlzaW9uIDc1MzQ1KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5k
ZWYgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yX2gKLSNkZWZpbmUgUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciA6
IHB1YmxpYyBSZW5kZXJTVkdSZXNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yKCk7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sID0g
dHJ1ZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJP
YmplY3QqLCBib29sID0gdHJ1ZSkgeyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3Vy
Y2VNb2RlLCBjb25zdCBQYXRoKik7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3Vu
ZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotCi0gICAgdmly
dHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4g
c19yZXNvdXJjZVR5cGU7IH0KLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVz
b3VyY2VUeXBlOwotCi0gICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvcjsgfQotICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fY29sb3Ig
PSBjb2xvcjsgfQotCi1wcml2YXRlOgotICAgIENvbG9yIG1fY29sb3I7Ci19OwotCi19Ci0KLSNl
bmRpZgotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9v
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jv
b3QuY3BwCShyZXZpc2lvbiA3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNjEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAw
OSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVy
U1ZHUm9vdC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSGl0
VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgotI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUg
IlNWR0xlbmd0aC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJT
VkdSZXNvdXJjZXMuaCIKLSNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
U3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCi0KLSNpZiBFTkFC
TEUoRklMVEVSUykKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgotI2VuZGlm
Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVuZGVy
U1ZHUm9vdDo6UmVuZGVyU1ZHUm9vdChTVkdTdHlsZWRFbGVtZW50KiBub2RlKQotICAgIDogUmVu
ZGVyQm94KG5vZGUpCi0gICAgLCBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQoZmFsc2UpCi0gICAgLCBt
X25lZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRlKHRydWUpCi17Ci0gICAgc2V0UmVwbGFj
ZWQodHJ1ZSk7Ci19Ci0KLVJlbmRlclNWR1Jvb3Q6On5SZW5kZXJTVkdSb290KCkKLXsKLX0KLQot
dm9pZCBSZW5kZXJTVkdSb290Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCi17Ci0g
ICAgQVNTRVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKLQotICAgIGludCBib3Jk
ZXJBbmRQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7Ci0gICAgaW50IHdpZHRoID0g
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGZhbHNlKSArIGJvcmRlckFuZFBhZGRpbmc7Ci0K
LSAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lk
dGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkKLSAgICAgICAgd2lkdGggPSBtaW4od2lk
dGgsIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9
PSBDT05URU5UX0JPWCA/IGJvcmRlckFuZFBhZGRpbmcgOiAwKSk7Ci0KLSAgICBpZiAoc3R5bGUo
KS0+d2lkdGgoKS5pc1BlcmNlbnQoKSB8fCAoc3R5bGUoKS0+d2lkdGgoKS5pc0F1dG8oKSAmJiBz
dHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKSkpIHsKLSAgICAgICAgbV9taW5QcmVmZXJyZWRM
b2dpY2FsV2lkdGggPSAwOwotICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHdp
ZHRoOwotICAgIH0gZWxzZQotICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1f
bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gd2lkdGg7Ci0KLSAgICBzZXRQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzRGlydHkoZmFsc2UpOwotfQotCi1pbnQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJl
cGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoKSBjb25zdAotewotICAgIGlu
dCByZXBsYWNlZFdpZHRoID0gUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgo
aW5jbHVkZU1heFdpZHRoKTsKLSAgICBpZiAoIXN0eWxlKCktPmxvZ2ljYWxXaWR0aCgpLmlzUGVy
Y2VudCgpKQotICAgICAgICByZXR1cm4gcmVwbGFjZWRXaWR0aDsKLQotICAgIC8vIEZJWE1FOiBJ
bnZlc3RpZ2F0ZSBpbiBzaXplIHJvdW5kaW5nIGlzc3VlcwotICAgIFNWR1NWR0VsZW1lbnQqIHN2
ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2RlKCkpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KHJvdW5kZihyZXBsYWNlZFdpZHRoICogc3ZnLT5jdXJyZW50U2NhbGUoKSkp
OwotfQotCi1pbnQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgp
IGNvbnN0Ci17Ci0gICAgaW50IHJlcGxhY2VkSGVpZ2h0ID0gUmVuZGVyQm94Ojpjb21wdXRlUmVw
bGFjZWRMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgaWYgKCFzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCku
aXNQZXJjZW50KCkpCi0gICAgICAgIHJldHVybiByZXBsYWNlZEhlaWdodDsKLQotICAgIC8vIEZJ
WE1FOiBJbnZlc3RpZ2F0ZSBpbiBzaXplIHJvdW5kaW5nIGlzc3VlcwotICAgIFNWR1NWR0VsZW1l
bnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2RlKCkpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihyZXBsYWNlZEhlaWdodCAqIHN2Zy0+Y3VycmVudFNj
YWxlKCkpKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQotewotICAgIEFTU0VS
VChuZWVkc0xheW91dCgpKTsKLQotICAgIC8vIEFyYml0cmFyeSBhZmZpbmUgdHJhbnNmb3JtcyBh
cmUgaW5jb21wYXRpYmxlIHdpdGggTGF5b3V0U3RhdGUuCi0gICAgdmlldygpLT5kaXNhYmxlTGF5
b3V0U3RhdGUoKTsKLQotICAgIGJvb2wgbmVlZHNMYXlvdXQgPSBzZWxmTmVlZHNMYXlvdXQoKTsK
LSAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJp
bmdMYXlvdXQoKSAmJiBuZWVkc0xheW91dCk7Ci0KLSAgICBJbnRTaXplIG9sZFNpemUod2lkdGgo
KSwgaGVpZ2h0KCkpOwotICAgIGNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKLSAgICBjb21wdXRlTG9n
aWNhbEhlaWdodCgpOwotICAgIGNhbGNWaWV3cG9ydCgpOwotCi0gICAgU1ZHU1ZHRWxlbWVudCog
c3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgbV9pc0xheW91
dFNpemVDaGFuZ2VkID0gc3ZnLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSAmJiBvbGRTaXplICE9IHNp
emUoKTsKLQotICAgIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKHRoaXMsIG5lZWRz
TGF5b3V0KTsKLSAgICBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgPSBmYWxzZTsKLQotICAgIC8vIEF0
IHRoaXMgcG9pbnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkgZ3JhYmJlZCB0aGUgb2xkIGJvdW5k
cywKLSAgICAvLyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyByZXBhaW50QWZ0ZXJMYXlvdXQoKSB1
c2VzIHRoZSBuZXcgYm91bmRzLgotICAgIGlmIChtX25lZWRzQm91bmRhcmllc09yVHJhbnNmb3Jt
VXBkYXRlKSB7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKLSAgICAgICAgbV9u
ZWVkc0JvdW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIHJl
cGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKLQotICAgIHZpZXcoKS0+ZW5hYmxlTGF5b3V0
U3RhdGUoKTsKLSAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZH
Um9vdDo6c2VsZldpbGxQYWludCgpCi17Ci0jaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAgU1ZHUmVz
b3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9y
UmVuZGVyT2JqZWN0KHRoaXMpOwotICAgIHJldHVybiByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLT5m
aWx0ZXIoKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQgUmVu
ZGVyU1ZHUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQg
cGFyZW50WSkKLXsKLSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBpc1Zpc2libGUgPSBzdHlsZSgpLT52aXNp
YmlsaXR5KCkgPT0gVklTSUJMRTsKLSAgICBJbnRQb2ludCBwYXJlbnRPcmlnaW5JbkNvbnRhaW5l
cihwYXJlbnRYLCBwYXJlbnRZKTsKLSAgICBJbnRQb2ludCBib3JkZXJCb3hPcmlnaW5JbkNvbnRh
aW5lciA9IHBhcmVudE9yaWdpbkluQ29udGFpbmVyICsgcGFyZW50T3JpZ2luVG9Cb3JkZXJCb3go
KTsKLQotICAgIGlmIChoYXNCb3hEZWNvcmF0aW9ucygpICYmIChwYWludEluZm8ucGhhc2UgPT0g
UGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZUNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1Zpc2libGUpCi0gICAgICAgIHBhaW50Qm94RGVj
b3JhdGlvbnMocGFpbnRJbmZvLCBib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lci54KCksIGJvcmRl
ckJveE9yaWdpbkluQ29udGFpbmVyLnkoKSk7Ci0KLSAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEFu
IGVtcHR5IHZpZXdwb3J0IGRpc2FibGVzIHJlbmRlcmluZy4gIEZJWE1FOiBTaG91bGQgd2Ugc3Rp
bGwgcmVuZGVyIGZpbHRlcnM/Ci0gICAgaWYgKG1fdmlld3BvcnRTaXplLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG9uJ3QgcGFpbnQgaWYgd2UgZG9uJ3QgaGF2ZSBraWRz
LCBleGNlcHQgaWYgd2UgaGF2ZSBmaWx0ZXJzIHdlIHNob3VsZCBwYWludCB0aG9zZS4KLSAgICBp
ZiAoIWZpcnN0Q2hpbGQoKSAmJiAhc2VsZldpbGxQYWludCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUgUGFpbnRJbmZvIGJlY2F1c2UgYXBwbHlUcmFuc2Zv
cm0gd2lsbCBtb2RpZnkgdGhlIGRhbWFnZSByZWN0LgotICAgIFBhaW50SW5mbyBjaGlsZFBhaW50
SW5mbyhwYWludEluZm8pOwotICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLQot
ICAgIC8vIEFwcGx5IGluaXRpYWwgdmlld3BvcnQgY2xpcCAtIG5vdCBhZmZlY3RlZCBieSBvdmVy
ZmxvdyBoYW5kbGluZwotICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmNsaXAob3ZlcmZsb3dD
bGlwUmVjdChib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lci54KCksIGJvcmRlckJveE9yaWdpbklu
Q29udGFpbmVyLnkoKSkpOwotCi0gICAgLy8gQ29udmVydCBmcm9tIGNvbnRhaW5lciBvZmZzZXRz
IChodG1sIHJlbmRlcmVycykgdG8gYSByZWxhdGl2ZSB0cmFuc2Zvcm0gKHN2ZyByZW5kZXJlcnMp
LgotICAgIC8vIFRyYW5zZm9ybSBmcm9tIG91ciBwYWludCBjb250YWluZXIncyBjb29yZGluYXRl
IHN5c3RlbSB0byBvdXIgbG9jYWwgY29vcmRzLgotICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJh
bnNmb3JtKGxvY2FsVG9SZXBhaW50Q29udGFpbmVyVHJhbnNmb3JtKHBhcmVudE9yaWdpbkluQ29u
dGFpbmVyKSk7Ci0KLSAgICBib29sIGNvbnRpbnVlUmVuZGVyaW5nID0gdHJ1ZTsKLSAgICBpZiAo
Y2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCi0gICAgICAgIGNv
bnRpbnVlUmVuZGVyaW5nID0gU1ZHUmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29u
dGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbyk7Ci0KLSAgICBpZiAoY29udGludWVSZW5kZXJpbmcp
Ci0gICAgICAgIFJlbmRlckJveDo6cGFpbnQoY2hpbGRQYWludEluZm8sIDAsIDApOwotCi0gICAg
aWYgKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQotICAgICAg
ICBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFp
bnRJbmZvLCBwYWludEluZm8uY29udGV4dCk7Ci0KLSAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0
LT5yZXN0b3JlKCk7Ci0KLSAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0
bGluZSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHls
ZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiBpc1Zpc2libGUpCi0gICAgICAgIHBhaW50T3V0bGluZShw
YWludEluZm8uY29udGV4dCwgYm9yZGVyQm94T3JpZ2luSW5Db250YWluZXIueCgpLCBib3JkZXJC
b3hPcmlnaW5JbkNvbnRhaW5lci55KCksIHdpZHRoKCksIGhlaWdodCgpKTsKLX0KLQotdm9pZCBS
ZW5kZXJTVkdSb290OjpkZXN0cm95KCkKLXsKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50
RGVzdHJveWVkKHRoaXMpOwotICAgIFJlbmRlckJveDo6ZGVzdHJveSgpOwotfQotCi12b2lkIFJl
bmRlclNWR1Jvb3Q6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3Qg
UmVuZGVyU3R5bGUqIG5ld1N0eWxlKQotewotICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5j
ZUxheW91dCkKLSAgICAgICAgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7Ci0gICAgUmVuZGVy
Qm94OjpzdHlsZVdpbGxDaGFuZ2UoZGlmZiwgbmV3U3R5bGUpOwotfQotCi12b2lkIFJlbmRlclNW
R1Jvb3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUpCi17Ci0gICAgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShkaWZmLCBv
bGRTdHlsZSk7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCh0aGlz
LCBkaWZmLCBzdHlsZSgpKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVGcm9tRWxl
bWVudCgpCi17Ci0gICAgUmVuZGVyQm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIFNWR1Jl
c291cmNlc0NhY2hlOjpjbGllbnRVcGRhdGVkRnJvbUVsZW1lbnQodGhpcywgc3R5bGUoKSk7Ci19
Ci0KLXZvaWQgUmVuZGVyU1ZHUm9vdDo6Y2FsY1ZpZXdwb3J0KCkKLXsKLSAgICBTVkdTVkdFbGVt
ZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4obm9kZSgpKTsKLQotICAgIGlm
ICghc3ZnLT5oYXNTZXRDb250YWluZXJTaXplKCkpIHsKLSAgICAgICAgLy8gSW4gdGhlIG5vcm1h
bCBjYXNlIG9mIDxzdmc+IGJlaW5nIHN0YW5kLWFsb25lIG9yIGluIGEgQ1NTQm94TW9kZWwgb2Jq
ZWN0IHdlIHVzZQotICAgICAgICAvLyBSZW5kZXJCb3g6OndpZHRoKCkvaGVpZ2h0KCkgKHdoaWNo
IHB1bGxzIGRhdGEgZnJvbSBSZW5kZXJTdHlsZSkKLSAgICAgICAgbV92aWV3cG9ydFNpemUgPSBG
bG9hdFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gSW4gdGhlIFNWR0ltYWdlIGNhc2UgZ3JhYiB0aGUgU1ZHTGVuZ3RoIHZhbHVlcyBvZmYg
b2YgU1ZHU1ZHRWxlbWVudCBhbmQgdXNlCi0gICAgLy8gdGhlIHNwZWNpYWwgcmVsYXRpdmVXaWR0
aFZhbHVlIGFjY2Vzc29ycyB3aGljaCByZXNwZWN0IHRoZSBzcGVjaWZpZWQgY29udGFpbmVyU2l6
ZQotICAgIC8vIEZJWE1FOiBDaGVjayBob3cgU1ZHSW1hZ2UgKyB6b29taW5nIGlzIHN1cHBvc2Vk
IHRvIGJlIGhhbmRsZWQ/Ci0gICAgU1ZHTGVuZ3RoIHdpZHRoID0gc3ZnLT53aWR0aCgpOwotICAg
IFNWR0xlbmd0aCBoZWlnaHQgPSBzdmctPmhlaWdodCgpOwotICAgIG1fdmlld3BvcnRTaXplID0g
RmxvYXRTaXplKHdpZHRoLnVuaXRUeXBlKCkgPT0gTGVuZ3RoVHlwZVBlcmNlbnRhZ2UgPyBzdmct
PnJlbGF0aXZlV2lkdGhWYWx1ZSgpIDogd2lkdGgudmFsdWUoc3ZnKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWlnaHQudW5pdFR5cGUoKSA9PSBMZW5ndGhUeXBlUGVyY2VudGFn
ZSA/IHN2Zy0+cmVsYXRpdmVIZWlnaHRWYWx1ZSgpIDogaGVpZ2h0LnZhbHVlKHN2ZykpOwotfQot
Ci0vLyBSZW5kZXJCb3ggbWV0aG9kcyB3aWxsIGV4cGVjdCBjb29yZGluYXRlcyB3L28gYW55IHRy
YW5zZm9ybXMgaW4gY29vcmRpbmF0ZXMKLS8vIHJlbGF0aXZlIHRvIG91ciBib3JkZXJCb3ggb3Jp
Z2luLiAgVGhpcyBtZXRob2QgZ2l2ZXMgdXMgZXhhY3RseSB0aGF0LgotQWZmaW5lVHJhbnNmb3Jt
IFJlbmRlclNWR1Jvb3Q6OmxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSBjb25zdAotewotICAg
IEludFNpemUgYm9yZGVyQW5kUGFkZGluZyA9IGJvcmRlck9yaWdpblRvQ29udGVudEJveCgpOwot
ICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2Rl
KCkpOwotICAgIGZsb2F0IHNjYWxlID0gc3ZnLT5jdXJyZW50U2NhbGUoKTsKLSAgICBGbG9hdFBv
aW50IHRyYW5zbGF0ZSA9IHN2Zy0+Y3VycmVudFRyYW5zbGF0ZSgpOwotICAgIEFmZmluZVRyYW5z
Zm9ybSBjdG0oc2NhbGUsIDAsIDAsIHNjYWxlLCBib3JkZXJBbmRQYWRkaW5nLndpZHRoKCkgKyB0
cmFuc2xhdGUueCgpLCBib3JkZXJBbmRQYWRkaW5nLmhlaWdodCgpICsgdHJhbnNsYXRlLnkoKSk7
Ci0gICAgcmV0dXJuIHN2Zy0+dmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpIC8gc2NhbGUs
IGhlaWdodCgpIC8gc2NhbGUpICogY3RtOwotfQotCi1JbnRTaXplIFJlbmRlclNWR1Jvb3Q6OnBh
cmVudE9yaWdpblRvQm9yZGVyQm94KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZSh4KCks
IHkoKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyU1ZHUm9vdDo6Ym9yZGVyT3JpZ2luVG9Db250ZW50
Qm94KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShib3JkZXJMZWZ0KCkgKyBwYWRkaW5n
TGVmdCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9y
bSBSZW5kZXJTVkdSb290Ojpsb2NhbFRvUmVwYWludENvbnRhaW5lclRyYW5zZm9ybShjb25zdCBJ
bnRQb2ludCYgcGFyZW50T3JpZ2luSW5Db250YWluZXIpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIHBhcmVudFRvQ29udGFpbmVyKGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSk7Ci0gICAg
cmV0dXJuIHBhcmVudFRvQ29udGFpbmVyLnRyYW5zbGF0ZVJpZ2h0KHBhcmVudE9yaWdpbkluQ29u
dGFpbmVyLngoKSwgcGFyZW50T3JpZ2luSW5Db250YWluZXIueSgpKTsKLX0KLQotY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBSZW5kZXJTVkdSb290Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29u
c3QKLXsKLSAgICBJbnRTaXplIHBhcmVudFRvQm9yZGVyQm94T2Zmc2V0ID0gcGFyZW50T3JpZ2lu
VG9Cb3JkZXJCb3goKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBib3JkZXJCb3hPcmlnaW5Ub1Bh
cmVudE9yaWdpbihsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkpOwotICAgIGJvcmRlckJveE9y
aWdpblRvUGFyZW50T3JpZ2luLnRyYW5zbGF0ZVJpZ2h0KHBhcmVudFRvQm9yZGVyQm94T2Zmc2V0
LndpZHRoKCksIHBhcmVudFRvQm9yZGVyQm94T2Zmc2V0LmhlaWdodCgpKTsKLQotICAgIG1fbG9j
YWxUb1BhcmVudFRyYW5zZm9ybSA9IGJvcmRlckJveE9yaWdpblRvUGFyZW50T3JpZ2luOwotICAg
IHJldHVybiBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07Ci19Ci0KLUludFJlY3QgUmVuZGVyU1ZH
Um9vdDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIpCi17Ci0gICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNsaXBw
ZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIpOwotfQotCi12
b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQp
Ci17Ci0gICAgLy8gQXBwbHkgb3VyIGxvY2FsIHRyYW5zZm9ybXMgKGV4Y2VwdCBmb3IgeC95IHRy
YW5zbGF0aW9uKSwgdGhlbiBvdXIgc2hhZG93LCAKLSAgICAvLyBhbmQgdGhlbiBjYWxsIFJlbmRl
ckJveCdzIG1ldGhvZCB0byBoYW5kbGUgYWxsIHRoZSBub3JtYWwgQ1NTIEJveCBtb2RlbCBiaXRz
Ci0gICAgcmVwYWludFJlY3QgPSBsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkubWFwUmVjdChy
ZXBhaW50UmVjdCk7Ci0KLSAgICAvLyBBcHBseSBpbml0aWFsIHZpZXdwb3J0IGNsaXAgLSBub3Qg
YWZmZWN0ZWQgYnkgb3ZlcmZsb3cgc2V0dGluZ3MgICAgCi0gICAgcmVwYWludFJlY3QuaW50ZXJz
ZWN0KGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV92aWV3cG9ydFNp
emUpKSk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5z
dmdTdHlsZSgpOwotICAgIGlmIChjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBzdmdTdHlsZS0+
c2hhZG93KCkpCi0gICAgICAgIHNoYWRvdy0+YWRqdXN0UmVjdEZvclNoYWRvdyhyZXBhaW50UmVj
dCk7Ci0KLSAgICBSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFp
bmVyLCByZXBhaW50UmVjdCwgZml4ZWQpOwotfQotCi12b2lkIFJlbmRlclNWR1Jvb3Q6Om1hcExv
Y2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJv
b2wgZml4ZWQgLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1T
dGF0ZSkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWZpeGVkKTsgLy8gV2Ugc2hvdWxkIGhhdmUgbm8g
Zml4ZWQgY29udGVudCBpbiB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlLgotICAgIEFTU0VSVCh1c2VU
cmFuc2Zvcm1zKTsgLy8gbWFwcGluZyBhIHBvaW50IHRocm91Z2ggU1ZHIHcvbyByZXNwZWN0aW5n
IHRyYXNuZm9ybXMgaXMgdXNlbGVzcy4KLQotICAgIC8vIFRyYW5zZm9ybSB0byBvdXIgYm9yZGVy
IGJveCBhbmQgbGV0IFJlbmRlckJveCB0cmFuc2Zvcm0gdGhlIHJlc3Qgb2YgdGhlIHdheS4KLSAg
ICB0cmFuc2Zvcm1TdGF0ZS5hcHBseVRyYW5zZm9ybShsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3Jt
KCkpOwotICAgIFJlbmRlckJveDo6bWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVy
LCBmaXhlZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOwotfQotCi12b2lkIFJlbmRl
clNWR1Jvb3Q6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQotewotICAgIG1fb2JqZWN0Qm91bmRp
bmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gRmxvYXRSZWN0
KCk7Ci0gICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLQotICAgIFNWR1Jl
bmRlclN1cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKHRoaXMsIG1fb2JqZWN0
Qm91bmRpbmdCb3gsIG1fc3Ryb2tlQm91bmRpbmdCb3gsIG1fcmVwYWludEJvdW5kaW5nQm94KTsK
LSAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXMo
dGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOwotICAgIG1fcmVwYWludEJvdW5kaW5nQm94Lmlu
ZmxhdGUoYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCkpOwotfQotCi1ib29sIFJlbmRlclNWR1Jvb3Q6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0
VGVzdEFjdGlvbikKLXsKLSAgICBJbnRQb2ludCBwb2ludEluQ29udGFpbmVyKHgsIHkpOwotICAg
IEludFNpemUgY29udGFpbmVyVG9QYXJlbnRPZmZzZXQodHgsIHR5KTsKLQotICAgIEludFBvaW50
IHBvaW50SW5QYXJlbnQgPSBwb2ludEluQ29udGFpbmVyIC0gY29udGFpbmVyVG9QYXJlbnRPZmZz
ZXQ7Ci0gICAgSW50UG9pbnQgcG9pbnRJbkJvcmRlckJveCA9IHBvaW50SW5QYXJlbnQgLSBwYXJl
bnRPcmlnaW5Ub0JvcmRlckJveCgpOwotCi0gICAgLy8gTm90ZTogRm9yIG5vdywgd2UncmUgaWdu
b3JpbmcgaGl0cyB0byBib3JkZXIgYW5kIHBhZGRpbmcgZm9yIDxzdmc+Ci0gICAgSW50UG9pbnQg
cG9pbnRJbkNvbnRlbnRCb3ggPSBwb2ludEluQm9yZGVyQm94IC0gYm9yZGVyT3JpZ2luVG9Db250
ZW50Qm94KCk7Ci0gICAgaWYgKCFjb250ZW50Qm94UmVjdCgpLmNvbnRhaW5zKHBvaW50SW5Db250
ZW50Qm94KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSW50UG9pbnQgbG9jYWxQb2lu
dCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBh
cmVudCk7Ci0KLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGls
ZC0+bm9kZUF0RmxvYXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2FsUG9pbnQsIGhpdFRlc3RB
Y3Rpb24pKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQ1NTL0hUTUwgYXNzdW1lcyB0aGUgbG9j
YWwgcG9pbnQgaXMgcmVsYXRpdmUgdG8gdGhlIGJvcmRlciBib3gsIHJpZ2h0PwotICAgICAgICAg
ICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Cb3JkZXJCb3gpOwotICAgICAg
ICAgICAgLy8gRklYTUU6IG5vZGVBdEZsb2F0UG9pbnQoKSBkb2Vzbid0IGhhbmRsZSByZWN0LWJh
c2VkIGhpdCB0ZXN0cyB5ZXQuCi0gICAgICAgICAgICByZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2Vk
VGVzdFJlc3VsdChjaGlsZC0+bm9kZSgpLCB4LCB5KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZGlkbid0IGVhcmx5IGV4aXQgYWJv
dmUsIHdlJ3ZlIGp1c3QgaGl0IHRoZSBjb250YWluZXIgPHN2Zz4gZWxlbWVudC4gVW5saWtlIFNW
RyAxLjEsIDJuZCBFZGl0aW9uIGFsbG93cyBjb250YWluZXIgZWxlbWVudHMgdG8gYmUgaGl0Lgot
ICAgIGlmIChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQpIHsKLSAgICAg
ICAgLy8gT25seSByZXR1cm4gdHJ1ZSBoZXJlLCBpZiB0aGUgbGFzdCBoaXQgdGVzdGluZyBwaGFz
ZSAnQmxvY2tCYWNrZ3JvdW5kJyBpcyBleGVjdXRlZC4gSWYgd2UnZCByZXR1cm4gdHJ1ZSBpbiB0
aGUgJ0ZvcmVncm91bmQnIHBoYXNlLAotICAgICAgICAvLyBoaXQgdGVzdGluZyB3b3VsZCBzdG9w
IGltbWVkaWF0ZWx5LiBGb3IgU1ZHIG9ubHkgdHJlZXMgdGhpcyBkb2Vzbid0IG1hdHRlci4gVGhv
dWdoIHdoZW4gd2UgaGF2ZSBhIDxmb3JlaWduT2JqZWN0PiBzdWJ0cmVlIHdlIG5lZWQKLSAgICAg
ICAgLy8gdG8gYmUgYWJsZSB0byBkZXRlY3QgaGl0cyBvbiB0aGUgYmFja2dyb3VuZCBvZiBhIDxk
aXY+IGVsZW1lbnQuIElmIHdlJ2QgcmV0dXJuIHRydWUgaGVyZSBpbiB0aGUgJ0ZvcmVncm91bmQn
IHBoYXNlLCB3ZSBhcmUgbm90IGFibGUgCi0gICAgICAgIC8vIHRvIGRldGVjdCB0aGVzZSBoaXRz
IGFueW1vcmUuCi0gICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCByb3VuZGVkSW50
UG9pbnQobG9jYWxQb2ludCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmgJKHJldmlzaW9uIDc1MzQ1KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgUmVuZGVyU1ZH
Um9vdF9oCi0jZGVmaW5lIFJlbmRlclNWR1Jvb3RfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLQotI2luY2x1ZGUgIlNW
R1JlbmRlclN1cHBvcnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTVkdTdHls
ZWRFbGVtZW50OwotY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwotCi1jbGFzcyBSZW5kZXJTVkdSb290
IDogcHVibGljIFJlbmRlckJveCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyU1ZHUm9v
dChTVkdTdHlsZWRFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHUm9vdCgpOwotCi0g
ICAgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJu
ICZtX2NoaWxkcmVuOyB9Ci0gICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIHsg
cmV0dXJuICZtX2NoaWxkcmVuOyB9Ci0KLSAgICBib29sIGlzTGF5b3V0U2l6ZUNoYW5nZWQoKSBj
b25zdCB7IHJldHVybiBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc09yVHJhbnNmb3Jt
VXBkYXRlID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0
ZSgpIHsgbV9uZWVkc0JvdW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLQotcHJp
dmF0ZToKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVu
KCkgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQotICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0
Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBjaGlsZHJlbigpOyB9
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5k
ZXJTVkdSb290IjsgfQotCi0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKCk7Ci0gICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJv
b2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY29tcHV0
ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBw
YXJlbnRZKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdT
dHlsZSk7Ci0gICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJv
bUVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRv
UGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7Ci0KLSAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBG
bG9hdFBvaW50JikgY29uc3Q7Ci0gICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBv
aW50JikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdC
b3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
aW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7Ci0KLSAgICB2aXJ0
dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIpOwotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3Qm
IHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKTsKLQotICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRv
Q29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIHVz
ZVRyYW5zZm9ybXMsIGJvb2wgZml4ZWQsIFRyYW5zZm9ybVN0YXRlJikgY29uc3Q7Ci0KLSAgICB2
b2lkIGNhbGNWaWV3cG9ydCgpOwotCi0gICAgYm9vbCBzZWxmV2lsbFBhaW50KCk7Ci0gICAgdm9p
ZCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7Ci0KLSAgICBJbnRTaXplIHBhcmVudE9yaWdpblRv
Qm9yZGVyQm94KCkgY29uc3Q7Ci0gICAgSW50U2l6ZSBib3JkZXJPcmlnaW5Ub0NvbnRlbnRCb3go
KSBjb25zdDsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUb1JlcGFpbnRDb250YWluZXJUcmFu
c2Zvcm0oY29uc3QgSW50UG9pbnQmIHBhcmVudE9yaWdpbkluQ29udGFpbmVyKSBjb25zdDsKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpIGNvbnN0OwotCi0g
ICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47Ci0gICAgRmxvYXRTaXplIG1fdmll
d3BvcnRTaXplOwotICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94OwotICAgIEZsb2F0
UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGlu
Z0JveDsKLSAgICBtdXRhYmxlIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zv
cm07Ci0gICAgYm9vbCBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgOiAxOwotICAgIGJvb2wgbV9uZWVk
c0JvdW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSA6IDE7Ci19OwotCi1pbmxpbmUgUmVuZGVyU1ZH
Um9vdCogdG9SZW5kZXJTVkdSb290KFJlbmRlck9iamVjdCogb2JqZWN0KQoteyAKLSAgICBBU1NF
UlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHUm9vdCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UmVuZGVyU1ZHUm9vdCo+KG9iamVjdCk7Ci19Ci0KLWlubGluZSBjb25zdCBSZW5kZXJTVkdS
b290KiB0b1JlbmRlclNWR1Jvb3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17IAotICAg
IEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdSb290KCkpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdSb290Kj4ob2JqZWN0KTsKLX0KLQotLy8gVGhpcyB3aWxs
IGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b1JlbmRlclNW
R1Jvb3QoY29uc3QgUmVuZGVyU1ZHUm9vdCopOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQotI2VuZGlmIC8vIFJlbmRlclNWR1Jvb3RfaApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHU2hh
ZG93VHJlZVJvb3RDb250YWluZXIuY3BwCShyZXZpc2lvbiA3NTM0NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHU2hhZG93VHJl
ZVJvb3RDb250YWluZXIuaCIKLQotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJT
VkdTaGFkb3dUcmVlRWxlbWVudHMuaCIKLSNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXI6OlJl
bmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKFNWR1VzZUVsZW1lbnQqIG5vZGUpCi0gICAg
OiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyKG5vZGUpCi0gICAgLCBtX3JlY3JlYXRl
VHJlZShmYWxzZSkKLXsKLX0KLQotUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXI6On5S
ZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpCi17Ci0gICAgaWYgKG1fc2hhZG93Um9v
dCAmJiBtX3NoYWRvd1Jvb3QtPmF0dGFjaGVkKCkpIHsKLSAgICAgICAgbV9zaGFkb3dSb290LT5k
ZXRhY2goKTsKLSAgICAgICAgbV9zaGFkb3dSb290LT5jbGVhclNoYWRvd0hvc3QoKTsKLSAgICB9
Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXI6OnVwZGF0ZVN0eWxl
KE5vZGU6OlN0eWxlQ2hhbmdlIGNoYW5nZSkKLXsKLSAgICBpZiAobV9zaGFkb3dSb290ICYmIG1f
c2hhZG93Um9vdC0+YXR0YWNoZWQoKSkKLSAgICAgICAgbV9zaGFkb3dSb290LT5yZWNhbGNTdHls
ZShjaGFuZ2UpOwotfQotCi12b2lkIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyOjp1
cGRhdGVGcm9tRWxlbWVudCgpCi17Ci0gICAgYm9vbCBoYWRFeGlzdGluZ1RyZWUgPSBtX3NoYWRv
d1Jvb3Q7Ci0KLSAgICBTVkdVc2VFbGVtZW50KiB1c2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
VXNlRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgaWYgKCFtX3NoYWRvd1Jvb3QpIHsKLSAgICAgICAg
QVNTRVJUKCFtX3JlY3JlYXRlVHJlZSk7Ci0gICAgICAgIG1fc2hhZG93Um9vdCA9IFNWR1NoYWRv
d1RyZWVSb290RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCksIHVzZUVsZW1lbnQpOwotICAgICAg
ICB1c2VFbGVtZW50LT5idWlsZFBlbmRpbmdSZXNvdXJjZSgpOwotICAgIH0KLQotICAgIEFTU0VS
VChtX3NoYWRvd1Jvb3QtPnNoYWRvd0hvc3QoKSA9PSB1c2VFbGVtZW50KTsKLQotICAgIGJvb2wg
c2hvdWxkUmVjcmVhdGVUcmVlID0gbV9yZWNyZWF0ZVRyZWU7Ci0gICAgaWYgKG1fcmVjcmVhdGVU
cmVlKSB7Ci0gICAgICAgIEFTU0VSVChoYWRFeGlzdGluZ1RyZWUpOwotCi0gICAgICAgIGlmICht
X3NoYWRvd1Jvb3QtPmF0dGFjaGVkKCkpCi0gICAgICAgICAgICBtX3NoYWRvd1Jvb3QtPmRldGFj
aCgpOwotCi0gICAgICAgIG1fc2hhZG93Um9vdC0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKLSAgICAg
ICAgbV9yZWNyZWF0ZVRyZWUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBPbmx5IHJlYnVpbGQg
dGhlIHNoYWRvdyB0cmVlLCBpZiB3ZSBhKSBuZXZlciBoYWQgYSB0cmVlIG9yIGIpIHdlIHdlcmUg
c3BlY2lmaWNhbGx5IGFza2VkIHRvIGRvIHNvCi0gICAgLy8gSWYgdGhlIHVzZSBlbGVtZW50IGlz
IGEgcGVuZGluZyByZXNvdXJjZSwgYW5kIGEpIG9yIGIpIGlzIHRydWUsIGRvIG5vdGhpbmcsIGFu
ZCB3YWl0IGZvciB0aGUgdXNlCi0gICAgLy8gZWxlbWVudCB0byBiZSBhc2tlZCB0byBidWlsZFBl
bmRpbmdSZXNvdXJjZSgpLCB0aGlzIHdpbGwgY2FsbCB1cyBhZ2Fpbiwgd2l0aCBtX3JlY3JlYXRl
VHJ1ZT10cnVlLgotICAgIGlmICgoc2hvdWxkUmVjcmVhdGVUcmVlIHx8ICFoYWRFeGlzdGluZ1Ry
ZWUpICYmICF1c2VFbGVtZW50LT5pc1BlbmRpbmdSZXNvdXJjZSgpKSB7Ci0gICAgICAgIHVzZUVs
ZW1lbnQtPmJ1aWxkU2hhZG93QW5kSW5zdGFuY2VUcmVlKG1fc2hhZG93Um9vdC5nZXQoKSk7Ci0K
LSAgICAgICAgLy8gQXR0YWNoIHNoYWRvdyByb290IGVsZW1lbnQKLSAgICAgICAgbV9zaGFkb3dS
b290LT5hdHRhY2hFbGVtZW50KHN0eWxlKCksIHJlbmRlckFyZW5hKCkpOwotCi0gICAgICAgIC8v
IEF0dGFjaCBzdWJ0cmVlLCBhcyBpZiBpdCB3YXMgYSByZWd1bGFyIG5vbi1zaGFkb3cgdHJlZQot
ICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9zaGFkb3dSb290LT5maXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgY2hpbGQtPmF0
dGFjaCgpOwotICAgIH0KLQotICAgIEFTU0VSVCghbV9yZWNyZWF0ZVRyZWUpOwotICAgIFJlbmRl
clNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6OnVwZGF0ZUZyb21FbGVtZW50KCk7Ci19Ci0KLXZv
aWQgUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXI6OnN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgUmVu
ZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5
bGUpOwotCi0gICAgaWYgKFJlbmRlck9iamVjdCogc2hhZG93Um9vdFJlbmRlcmVyID0gbV9zaGFk
b3dSb290ID8gbV9zaGFkb3dSb290LT5yZW5kZXJlcigpIDogMCkKLSAgICAgICAgc2hhZG93Um9v
dFJlbmRlcmVyLT5zZXRTdHlsZShzdHlsZSgpKTsKLX0KLQotTm9kZSogUmVuZGVyU1ZHU2hhZG93
VHJlZVJvb3RDb250YWluZXI6OnJvb3RFbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9z
aGFkb3dSb290LmdldCgpOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFp
bmVyLmgJKHJldmlzaW9uIDc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENv
bnRhaW5lcl9oCi0jZGVmaW5lIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyX2gKLQot
I2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5l
ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1jbGFzcyBTVkdVc2VFbGVtZW50Owot
Y2xhc3MgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVy
IHsKLXB1YmxpYzoKLSAgICBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcihTVkdVc2VF
bGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIo
KTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCBtYXJrU2hhZG93VHJlZUZvclJlY3JlYXRp
b24oKSB7IG1fcmVjcmVhdGVUcmVlID0gdHJ1ZTsgfQotICAgIHZvaWQgdXBkYXRlU3R5bGUoTm9k
ZTo6U3R5bGVDaGFuZ2UpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwot
Ci0gICAgTm9kZSogcm9vdEVsZW1lbnQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFs
IHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUpOwotCi0gICAgYm9vbCBtX3JlY3JlYXRlVHJlZTsKLSAgICBSZWZQdHI8U1ZHU2hh
ZG93VHJlZVJvb3RFbGVtZW50PiBtX3NoYWRvd1Jvb3Q7Ci19OwotCi19Ci0KLSNlbmRpZgotI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCShyZXZpc2lvbiA3NTM0NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5o
IgotCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJTVkdTaGFkb3dUcmVlRWxlbWVu
dHMuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjpS
ZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50KiBub2RlKQotICAgIDogUmVuZGVyU1ZHQ29udGFpbmVyKG5vZGUpCi0gICAgLCBtX25lZWRz
VHJhbnNmb3JtVXBkYXRlKHRydWUpCi17Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lcjo6Y2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKQotewotICAgIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOwotCi0gICAgYm9vbCBuZWVkc1VwZGF0ZSA9IG1fbmVl
ZHNUcmFuc2Zvcm1VcGRhdGU7Ci0gICAgaWYgKG5lZWRzVXBkYXRlKSB7Ci0gICAgICAgIG1fbG9j
YWxUcmFuc2Zvcm0gPSBlbGVtZW50LT5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7Ci0gICAgICAg
IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWVsZW1l
bnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmdUYWcpIHx8ICFzdGF0aWNfY2FzdDxTVkdHRWxlbWVu
dCo+KGVsZW1lbnQpLT5pc1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50KCkpCi0gICAgICAgIHJl
dHVybiBuZWVkc1VwZGF0ZTsKLQotICAgIEZsb2F0U2l6ZSB0cmFuc2xhdGlvbiA9IHN0YXRpY19j
YXN0PFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCktPmNvbnRhaW5lclRy
YW5zbGF0aW9uKCk7Ci0gICAgaWYgKCF0cmFuc2xhdGlvbi53aWR0aCgpICYmICF0cmFuc2xhdGlv
bi5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIG5lZWRzVXBkYXRlOwotCi0gICAgLy8gRklYTUU6
IENvdWxkIG9wdGltaXplIHRoaXMgY2FzZSBmb3IgdXNlIHRvIGF2b2lkIHJlZmV0Y2hpbmcgdGhl
IGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBoZXJlLCBpZiBvbmx5IHRoZSBjb250YWluZXJUcmFu
c2xhdGlvbigpIGNoYW5nZWQuCi0gICAgaWYgKCFuZWVkc1VwZGF0ZSkKLSAgICAgICAgbV9sb2Nh
bFRyYW5zZm9ybSA9IGVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKLQotICAgIG1f
bG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlKHRyYW5zbGF0aW9uLndpZHRoKCksIHRyYW5zbGF0aW9u
LmhlaWdodCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2lmbmRlZiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyX2gKLSNkZWZp
bmUgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcl9oCi0KLSNpZiBFTkFCTEUoU1ZHKQot
I2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0g
ICAgCi1jbGFzcyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDsKLWNsYXNzIFJlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZHQ29udGFpbmVyIHsKLXB1
YmxpYzoKLSAgICBleHBsaWNpdCBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyKFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxU
cmFuc2Zvcm07IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7
IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVh
bCBib29sIGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFu
c2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9
Ci0KLSAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwotICAgIEFmZmluZVRyYW5z
Zm9ybSBtX2xvY2FsVHJhbnNmb3JtOwotfTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0j
ZW5kaWYgLy8gUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcl9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
ci5jcHAJKHJldmlzaW9uIDc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lci5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAi
U1ZHU1ZHRWxlbWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclNWR1ZpZXdw
b3J0Q29udGFpbmVyOjpSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50
KiBub2RlKQotICAgIDogUmVuZGVyU1ZHQ29udGFpbmVyKG5vZGUpCi17Ci19Ci0KLXZvaWQgUmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OmFwcGx5Vmlld3BvcnRDbGlwKFBhaW50SW5mbyYgcGFp
bnRJbmZvKQotewotICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0Ojppc092ZXJmbG93SGlkZGVuKHRo
aXMpKQotICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChtX3ZpZXdwb3J0KTsKLX0KLQot
dm9pZCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6Y2FsY1ZpZXdwb3J0KCkKLXsKLSAgICAg
U1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwot
ICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkgewotICAgICAg
ICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KGVsZW1l
bnQpOwotCi0gICAgICAgICBGbG9hdFJlY3Qgb2xkVmlld3BvcnQgPSBtX3ZpZXdwb3J0OwotICAg
ICAgICAgbV92aWV3cG9ydCA9IEZsb2F0UmVjdChzdmctPngoKS52YWx1ZShzdmcpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgc3ZnLT55KCkudmFsdWUoc3ZnKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIHN2Zy0+d2lkdGgoKS52YWx1ZShzdmcpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgc3ZnLT5oZWlnaHQoKS52YWx1ZShzdmcpKTsKLQot
ICAgICAgICBpZiAob2xkVmlld3BvcnQgIT0gbV92aWV3cG9ydCkKLSAgICAgICAgICAgIHNldE5l
ZWRzQm91bmRhcmllc1VwZGF0ZSgpOwotICAgIH0KLX0KLQotQWZmaW5lVHJhbnNmb3JtIFJlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyOjp2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAg
aWYgKG5vZGUoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkgewotICAgICAgICBTVkdT
VkdFbGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4obm9kZSgpKTsKLSAg
ICAgICAgcmV0dXJuIHN2Zy0+dmlld0JveFRvVmlld1RyYW5zZm9ybShtX3ZpZXdwb3J0LndpZHRo
KCksIG1fdmlld3BvcnQuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIHJldHVybiBBZmZpbmVUcmFu
c2Zvcm0oKTsKLX0KLQotY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZW5kZXJTVkdWaWV3cG9ydENv
bnRhaW5lcjo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIHZpZXdwb3J0VHJhbnNsYXRpb24odmlld3BvcnRUcmFuc2Zvcm0oKSk7Ci0gICAgbV9s
b2NhbFRvUGFyZW50VHJhbnNmb3JtID0gdmlld3BvcnRUcmFuc2xhdGlvbi50cmFuc2xhdGVSaWdo
dChtX3ZpZXdwb3J0LngoKSwgbV92aWV3cG9ydC55KCkpOwotICAgIHJldHVybiBtX2xvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm07Ci0gICAgLy8gSWYgdGhpcyBjbGFzcyB3ZXJlIGV2ZXIgZ2l2ZW4gYSBs
b2NhbFRyYW5zZm9ybSgpLCB0aGVuIHRoZSBhYm92ZSB3b3VsZCByZWFkOgotICAgIC8vIHJldHVy
biB2aWV3cG9ydFRyYW5zZm9ybSgpICogbG9jYWxUcmFuc2Zvcm0oKSAqIHZpZXdwb3J0VHJhbnNs
YXRpb247Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OnBvaW50SXNJbnNp
ZGVWaWV3cG9ydENsaXAoY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCkKLXsKLSAgICAv
LyBSZXNwZWN0IHRoZSB2aWV3cG9ydCBjbGlwICh3aGljaCBpcyBpbiBwYXJlbnQgY29vcmRzKQot
ICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlzKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIG1fdmlld3BvcnQuY29udGFpbnMocG9p
bnRJblBhcmVudCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIuaAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aWZuZGVmIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyX2gKLSNkZWZpbmUgUmVuZGVyU1ZHVmll
d3BvcnRDb250YWluZXJfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJTVkdD
b250YWluZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBUaGlzIGlzIHVzZWQgZm9y
IG5vbi1yb290IDxzdmc+IGVsZW1lbnRzIGFuZCA8bWFya2VyPiBlbGVtZW50cywgbmVpdGhlciBv
ZiB3aGljaCBhcmUgU1ZHVHJhbnNmb3JtYWJsZQotLy8gdGh1cyB3ZSBpbmhlcml0IGZyb20gUmVu
ZGVyU1ZHQ29udGFpbmVyIGluc3RlYWQgb2YgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5l
cgotY2xhc3MgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZHQ29u
dGFpbmVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
cihTVkdTdHlsZWRFbGVtZW50Kik7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGlzU1ZH
Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1NW
R1ZpZXdwb3J0Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdWaWV3cG9y
dENvbnRhaW5lciI7IH0KLQotICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3cG9ydFRyYW5zZm9ybSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50
VHJhbnNmb3JtKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ZpZXdwb3J0KCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWaWV3cG9ydENsaXAoUGFpbnRJbmZvJik7Ci0gICAgdmly
dHVhbCBib29sIHBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnRJblBhcmVudCk7Ci0KLSAgICBGbG9hdFJlY3QgbV92aWV3cG9ydDsKLSAgICBtdXRhYmxlIEFm
ZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07Ci19OwotICAKLWlubGluZSBS
ZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciogdG9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcihS
ZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCAhc3RyY21wKG9i
amVjdC0+cmVuZGVyTmFtZSgpLCAiUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIiKSk7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKj4ob2JqZWN0KTsK
LX0KLQotLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0
Lgotdm9pZCB0b1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKGNvbnN0IFJlbmRlclNWR1ZpZXdw
b3J0Q29udGFpbmVyKik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShTVkcpCi0jZW5kaWYgLy8gUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXJfaApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAko
cmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW1hZ2VCdWZm
ZXJUb29scy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTI4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAi
U1ZHSW1hZ2VCdWZmZXJUb29scy5oIgotCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0mIGN1cnJlbnRDb250
ZW50VHJhbnNmb3JtYXRpb24oKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQWZmaW5lVHJh
bnNmb3JtLCBzX2N1cnJlbnRDb250ZW50VHJhbnNmb3JtYXRpb24sICgpKTsKLSAgICByZXR1cm4g
c19jdXJyZW50Q29udGVudFRyYW5zZm9ybWF0aW9uOwotfQotCi12b2lkIFNWR0ltYWdlQnVmZmVy
VG9vbHM6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lz
dGVtKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0pCi17Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gcmVuZGVy
ZXI7Ci0gICAgQVNTRVJUKGN1cnJlbnQpOwotCi0gICAgYWJzb2x1dGVUcmFuc2Zvcm0gPSBjdXJy
ZW50Q29udGVudFRyYW5zZm9ybWF0aW9uKCk7Ci0gICAgd2hpbGUgKGN1cnJlbnQpIHsKLSAgICAg
ICAgYWJzb2x1dGVUcmFuc2Zvcm0ubXVsdGlwbHkoY3VycmVudC0+bG9jYWxUb1BhcmVudFRyYW5z
Zm9ybSgpKTsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlzU1ZHUm9vdCgpKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnQoKTsKLSAgICB9Ci19Ci0K
LWJvb2wgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRS
ZWN0JiBhYnNvbHV0ZVRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZEFic29sdXRl
VGFyZ2V0UmVjdCwgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkKLXsKLSAgICBJbnRTaXplIGltYWdlU2l6ZShyb3VuZGVkSW1hZ2VCdWZmZXJT
aXplKGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3Quc2l6ZSgpKSk7Ci0gICAgSW50U2l6ZSB1bmNs
YW1wZWRJbWFnZVNpemUoU1ZHSW1hZ2VCdWZmZXJUb29sczo6cm91bmRlZEltYWdlQnVmZmVyU2l6
ZShhYnNvbHV0ZVRhcmdldFJlY3Quc2l6ZSgpKSk7Ci0KLSAgICAvLyBEb24ndCBjcmVhdGUgZW1w
dHkgSW1hZ2VCdWZmZXJzLgotICAgIGlmIChpbWFnZVNpemUuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShpbWFnZVNpemUsIGNvbG9yU3BhY2UpOwotICAgIGlmICghaW1hZ2UpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCogaW1hZ2VDb250ZXh0ID0g
aW1hZ2UtPmNvbnRleHQoKTsKLSAgICBBU1NFUlQoaW1hZ2VDb250ZXh0KTsKLQotICAgIC8vIENv
bXBlbnNhdGUgcm91bmRpbmcgZWZmZWN0cywgYXMgdGhlIGFic29sdXRlIHRhcmdldCByZWN0IGlz
IHVzaW5nIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYW5kIHRoZSBpbWFnZSBidWZmZXIgc2l6ZSBp
cyBpbnRlZ2VyLgotICAgIGltYWdlQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHVuY2xhbXBlZElt
YWdlU2l6ZS53aWR0aCgpIC8gYWJzb2x1dGVUYXJnZXRSZWN0LndpZHRoKCksIHVuY2xhbXBlZElt
YWdlU2l6ZS5oZWlnaHQoKSAvIGFic29sdXRlVGFyZ2V0UmVjdC5oZWlnaHQoKSkpOwotCi0gICAg
aW1hZ2VCdWZmZXIgPSBpbWFnZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgU1ZHSW1hZ2VCdWZmZXJUb29sczo6cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXIqIGltYWdlLCBSZW5kZXJPYmplY3QqIGl0ZW0sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
c3VidHJlZUNvbnRlbnRUcmFuc2Zvcm1hdGlvbikKLXsKLSAgICBBU1NFUlQoaXRlbSk7Ci0gICAg
QVNTRVJUKGltYWdlKTsKLSAgICBBU1NFUlQoaW1hZ2UtPmNvbnRleHQoKSk7Ci0KLSAgICBQYWlu
dEluZm8gaW5mbyhpbWFnZS0+Y29udGV4dCgpLCBQYWludEluZm86OmluZmluaXRlUmVjdCgpLCBQ
YWludFBoYXNlRm9yZWdyb3VuZCwgMCwgMCwgMCk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0mIGNv
bnRlbnRUcmFuc2Zvcm1hdGlvbiA9IGN1cnJlbnRDb250ZW50VHJhbnNmb3JtYXRpb24oKTsKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gc2F2ZWRDb250ZW50VHJhbnNmb3JtYXRpb24gPSBjb250ZW50VHJh
bnNmb3JtYXRpb247Ci0gICAgY29udGVudFRyYW5zZm9ybWF0aW9uLm11bHRpcGx5KHN1YnRyZWVD
b250ZW50VHJhbnNmb3JtYXRpb24pOwotCi0gICAgaXRlbS0+bGF5b3V0SWZOZWVkZWQoKTsKLSAg
ICBpdGVtLT5wYWludChpbmZvLCAwLCAwKTsKLQotICAgIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiA9
IHNhdmVkQ29udGVudFRyYW5zZm9ybWF0aW9uOwotfQotCi12b2lkIFNWR0ltYWdlQnVmZmVyVG9v
bHM6OmNsaXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVk
QWJzb2x1dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikKLXsK
LSAgICBBU1NFUlQoY29udGV4dCk7Ci0gICAgQVNTRVJUKGltYWdlQnVmZmVyKTsKLQotICAgIC8v
IFRoZSBtYXNrIGltYWdlIGhhcyBiZWVuIGNyZWF0ZWQgaW4gdGhlIGFic29sdXRlIGNvb3JkaW5h
dGUgc3BhY2UsIGFzIHRoZSBpbWFnZSBzaG91bGQgbm90IGJlIHNjYWxlZC4KLSAgICAvLyBTbyB0
aGUgYWN0dWFsIG1hc2tpbmcgcHJvY2VzcyBoYXMgdG8gYmUgZG9uZSBpbiB0aGUgYWJzb2x1dGUg
Y29vcmRpbmF0ZSBzcGFjZSBhcyB3ZWxsLgotICAgIGNvbnRleHQtPmNvbmNhdENUTShhYnNvbHV0
ZVRyYW5zZm9ybS5pbnZlcnNlKCkpOwotICAgIGNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKGlt
YWdlQnVmZmVyLmdldCgpLCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0KTsKLSAgICBjb250ZXh0
LT5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0pOwotCi0gICAgLy8gV2hlbiBuZXN0aW5nIHJl
c291cmNlcywgd2l0aCBvYmplY3RCb3VuZGluZ0JveCBhcyBjb250ZW50IHVuaXQgdHlwZXMsIHRo
ZXJlJ3Mgbm8gdXNlIGluIGNhY2hpbmcgdGhlCi0gICAgLy8gcmVzdWx0aW5nIGltYWdlIGJ1ZmZl
ciBhcyB0aGUgcGFyZW50IHJlc291cmNlIGFscmVhZHkgY2FjaGVzIHRoZSByZXN1bHQuCi0gICAg
aWYgKCFjdXJyZW50Q29udGVudFRyYW5zZm9ybWF0aW9uKCkuaXNJZGVudGl0eSgpKQotICAgICAg
ICBpbWFnZUJ1ZmZlci5jbGVhcigpOwotfQotCi1JbnRTaXplIFNWR0ltYWdlQnVmZmVyVG9vbHM6
OnJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIHJl
dHVybiBJbnRTaXplKHN0YXRpY19jYXN0PGludD4obHJvdW5kZihzaXplLndpZHRoKCkpKSwgc3Rh
dGljX2Nhc3Q8aW50Pihscm91bmRmKHNpemUuaGVpZ2h0KCkpKSk7Ci19Ci0KLUZsb2F0UmVjdCBT
VkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIo
Y29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRh
cmdldFJlY3QpCi17Ci0gICAgQVNTRVJUKHJlbmRlcmVyKTsKLQotICAgIGNvbnN0IFJlbmRlclNW
R1Jvb3QqIHN2Z1Jvb3QgPSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVHJlZVJvb3RPYmplY3QocmVu
ZGVyZXIpOwotICAgIEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0ID0gYWJzb2x1
dGVUYXJnZXRSZWN0OwotICAgIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QuaW50ZXJzZWN0KHN2
Z1Jvb3QtPmNvbnRlbnRCb3hSZWN0KCkpOwotICAgIHJldHVybiBjbGFtcGVkQWJzb2x1dGVUYXJn
ZXRSZWN0OwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5oCShyZXZpc2lvbiA3NTM0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBT
VkdJbWFnZUJ1ZmZlclRvb2xzX2gKLSNkZWZpbmUgU1ZHSW1hZ2VCdWZmZXJUb29sc19oCi0KLSNp
ZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQWZmaW5lVHJhbnNm
b3JtOwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgRmxvYXRTaXplOwotY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwotY2xhc3MgUmVuZGVyT2JqZWN0OwotCi1jbGFzcyBTVkdJbWFnZUJ1ZmZlclRvb2xz
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1hZ2VCdWZmZXI+Jiwg
Q29sb3JTcGFjZSk7Ci0gICAgc3RhdGljIHZvaWQgcmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXIqLCBSZW5kZXJPYmplY3QqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAg
ICBzdGF0aWMgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsYW1w
ZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mKTsKLQotICAgIHN0YXRp
YyB2b2lkIGNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lz
dGVtKGNvbnN0IFJlbmRlck9iamVjdCosIEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zv
cm0pOwotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJl
bmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJn
ZXRSZWN0KTsKLSAgICBzdGF0aWMgSW50U2l6ZSByb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0
IEZsb2F0U2l6ZSYpOwotCi1wcml2YXRlOgotICAgIFNWR0ltYWdlQnVmZmVyVG9vbHMoKSB7IH0K
LSAgICB+U1ZHSW1hZ2VCdWZmZXJUb29scygpIHsgfQotfTsKLQotfQotCi0jZW5kaWYKLSNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR01hcmtlckRhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHTWFya2VyRGF0YS5oCShyZXZpc2lv
biA3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYg
U1ZHTWFya2VyRGF0YV9oCi0jZGVmaW5lIFNWR01hcmtlckRhdGFfaAotCi0jaWYgRU5BQkxFKFNW
RykKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjsKLQotY2xhc3MgU1ZHTWFya2VyRGF0YSB7Ci1wdWJsaWM6
Ci0gICAgZW51bSBUeXBlIHsKLSAgICAgICAgVW5rbm93biA9IDAsCi0gICAgICAgIFN0YXJ0LAot
ICAgICAgICBNaWQsCi0gICAgICAgIEVuZAotICAgIH07Ci0KLSAgICBTVkdNYXJrZXJEYXRhKGNv
bnN0IFR5cGUmIHR5cGUgPSBVbmtub3duLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2Vy
ID0gMCkKLSAgICAgICAgOiBtX3R5cGUodHlwZSkKLSAgICAgICAgLCBtX21hcmtlcihtYXJrZXIp
Ci0gICAgewotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9vcmlnaW47IH0KLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXJrZXI7IH0KLQotICAgIGZsb2F0IGN1cnJlbnRBbmdsZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBGbG9hdFNpemUgaW5zbG9wZUNoYW5nZSA9IG1faW5zbG9wZVBvaW50c1sx
XSAtIG1faW5zbG9wZVBvaW50c1swXTsKLSAgICAgICAgRmxvYXRTaXplIG91dHNsb3BlQ2hhbmdl
ID0gbV9vdXRzbG9wZVBvaW50c1sxXSAtIG1fb3V0c2xvcGVQb2ludHNbMF07Ci0KLSAgICAgICAg
ZG91YmxlIGluc2xvcGUgPSByYWQyZGVnKGF0YW4yKGluc2xvcGVDaGFuZ2UuaGVpZ2h0KCksIGlu
c2xvcGVDaGFuZ2Uud2lkdGgoKSkpOwotICAgICAgICBkb3VibGUgb3V0c2xvcGUgPSByYWQyZGVn
KGF0YW4yKG91dHNsb3BlQ2hhbmdlLmhlaWdodCgpLCBvdXRzbG9wZUNoYW5nZS53aWR0aCgpKSk7
Ci0KLSAgICAgICAgZG91YmxlIGFuZ2xlID0gMDsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsK
LSAgICAgICAgY2FzZSBTdGFydDoKLSAgICAgICAgICAgIGFuZ2xlID0gb3V0c2xvcGU7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNaWQ6Ci0gICAgICAgICAgICBhbmdsZSA9IChp
bnNsb3BlICsgb3V0c2xvcGUpIC8gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVuZDoKLSAgICAgICAgICAgIGFuZ2xlID0gaW5zbG9wZTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGFuZ2xlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHVwZGF0ZVR5cGVBbmRNYXJrZXIo
Y29uc3QgVHlwZSYgdHlwZSwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlcikKLSAgICB7
Ci0gICAgICAgIG1fdHlwZSA9IHR5cGU7Ci0gICAgICAgIG1fbWFya2VyID0gbWFya2VyOwotICAg
IH0KLQotICAgIHZvaWQgdXBkYXRlT3V0c2xvcGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi0g
ICAgewotICAgICAgICBtX291dHNsb3BlUG9pbnRzWzBdID0gbV9vcmlnaW47Ci0gICAgICAgIG1f
b3V0c2xvcGVQb2ludHNbMV0gPSBwb2ludDsKLSAgICB9Ci0KLSAgICB2b2lkIHVwZGF0ZU1hcmtl
ckRhdGFGb3JQYXRoRWxlbWVudChjb25zdCBQYXRoRWxlbWVudCogZWxlbWVudCkKLSAgICB7Ci0g
ICAgICAgIEZsb2F0UG9pbnQqIHBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKLQotICAgICAgICBz
d2l0Y2ggKGVsZW1lbnQtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBQYXRoRWxlbWVudEFkZFF1YWRD
dXJ2ZVRvUG9pbnQ6Ci0gICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMzMTE1IChQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQg
bm90IGhhbmRsZWQgZm9yIDxtYXJrZXI+KQotICAgICAgICAgICAgbV9vcmlnaW4gPSBwb2ludHNb
MV07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQYXRoRWxlbWVudEFkZEN1cnZl
VG9Qb2ludDoKLSAgICAgICAgICAgIG1faW5zbG9wZVBvaW50c1swXSA9IHBvaW50c1sxXTsKLSAg
ICAgICAgICAgIG1faW5zbG9wZVBvaW50c1sxXSA9IHBvaW50c1syXTsKLSAgICAgICAgICAgIG1f
b3JpZ2luID0gcG9pbnRzWzJdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGF0
aEVsZW1lbnRNb3ZlVG9Qb2ludDoKLSAgICAgICAgICAgIG1fc3VicGF0aFN0YXJ0ID0gcG9pbnRz
WzBdOwotICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ6Ci0gICAgICAgICAg
ICB1cGRhdGVJbnNsb3BlKHBvaW50c1swXSk7Ci0gICAgICAgICAgICBtX29yaWdpbiA9IHBvaW50
c1swXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBhdGhFbGVtZW50Q2xvc2VT
dWJwYXRoOgotICAgICAgICAgICAgdXBkYXRlSW5zbG9wZShwb2ludHNbMF0pOwotICAgICAgICAg
ICAgbV9vcmlnaW4gPSBtX3N1YnBhdGhTdGFydDsKLSAgICAgICAgICAgIG1fc3VicGF0aFN0YXJ0
ID0gRmxvYXRQb2ludCgpOwotICAgICAgICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZvaWQg
dXBkYXRlSW5zbG9wZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLSAgICB7Ci0gICAgICAgIG1f
aW5zbG9wZVBvaW50c1swXSA9IG1fb3JpZ2luOwotICAgICAgICBtX2luc2xvcGVQb2ludHNbMV0g
PSBwb2ludDsKLSAgICB9Ci0KLSAgICBUeXBlIG1fdHlwZTsKLSAgICBSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlciogbV9tYXJrZXI7Ci0gICAgRmxvYXRQb2ludCBtX29yaWdpbjsKLSAgICBGbG9hdFBv
aW50IG1fc3VicGF0aFN0YXJ0OwotICAgIEZsb2F0UG9pbnQgbV9pbnNsb3BlUG9pbnRzWzJdOwot
ICAgIEZsb2F0UG9pbnQgbV9vdXRzbG9wZVBvaW50c1syXTsKLX07Ci0KLX0KLQotI2VuZGlmIC8v
IEVOQUJMRShTVkcpCi0jZW5kaWYgLy8gU1ZHTWFya2VyRGF0YV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uY3BwCShyZXZpc2lvbiA3
NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwOCBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHTWFya2Vy
TGF5b3V0SW5mby5oIgotCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1TVkdNYXJrZXJMYXlvdXRJbmZvOjpTVkdNYXJrZXJMYXlv
dXRJbmZvKCkKLSAgICA6IG1fbWlkTWFya2VyKDApCi0gICAgLCBtX2VsZW1lbnRJbmRleCgwKQot
ICAgICwgbV9zdHJva2VXaWR0aCgwKQotewotfQotCi1TVkdNYXJrZXJMYXlvdXRJbmZvOjp+U1ZH
TWFya2VyTGF5b3V0SW5mbygpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzU3Rh
cnRBbmRNaWRNYXJrZXJzKHZvaWQqIGluZm9QdHIsIGNvbnN0IFBhdGhFbGVtZW50KiBlbGVtZW50
KQotewotICAgIFNWR01hcmtlckxheW91dEluZm8mIGluZm8gPSAqcmVpbnRlcnByZXRfY2FzdDxT
VkdNYXJrZXJMYXlvdXRJbmZvKj4oaW5mb1B0cik7Ci0gICAgU1ZHTWFya2VyRGF0YSYgbWFya2Vy
RGF0YSA9IGluZm8ubWFya2VyRGF0YSgpOwotICAgIGludCYgZWxlbWVudEluZGV4ID0gaW5mby5l
bGVtZW50SW5kZXgoKTsKLQotICAgIC8vIEZpcnN0IHVwZGF0ZSB0aGUgb3V0c2xvcGUgZm9yIHRo
ZSBwcmV2aW91cyBlbGVtZW50Ci0gICAgbWFya2VyRGF0YS51cGRhdGVPdXRzbG9wZShlbGVtZW50
LT5wb2ludHNbMF0pOwotCi0gICAgLy8gRHJhdyB0aGUgbWFya2VyIGZvciB0aGUgcHJldmlvdXMg
ZWxlbWVudAotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXIgPSBtYXJrZXJEYXRh
Lm1hcmtlcigpOwotICAgIGlmIChlbGVtZW50SW5kZXggPiAwICYmIG1hcmtlcikKLSAgICAgICAg
aW5mby5hZGRMYXlvdXRlZE1hcmtlcihtYXJrZXIsIG1hcmtlckRhdGEub3JpZ2luKCksIG1hcmtl
ckRhdGEuY3VycmVudEFuZ2xlKCkpOwotCi0gICAgLy8gVXBkYXRlIG91ciBtYXJrZXIgZGF0YSBm
b3IgdGhpcyBlbGVtZW50Ci0gICAgbWFya2VyRGF0YS51cGRhdGVNYXJrZXJEYXRhRm9yUGF0aEVs
ZW1lbnQoZWxlbWVudCk7Ci0KLSAgICAvLyBBZnRlciBkcmF3aW5nIHRoZSBzdGFydCBtYXJrZXIs
IHN3aXRjaCB0byBkcmF3aW5nIG1pZCBtYXJrZXJzCi0gICAgaWYgKGVsZW1lbnRJbmRleCA9PSAx
KQotICAgICAgICBtYXJrZXJEYXRhLnVwZGF0ZVR5cGVBbmRNYXJrZXIoU1ZHTWFya2VyRGF0YTo6
TWlkLCBpbmZvLm1pZE1hcmtlcigpKTsKLQotICAgICsrZWxlbWVudEluZGV4OwotfQotCi1GbG9h
dFJlY3QgU1ZHTWFya2VyTGF5b3V0SW5mbzo6Y2FsY3VsYXRlQm91bmRhcmllcyhSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlciogc3RhcnRNYXJrZXIsIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtaWRN
YXJrZXIsIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBlbmRNYXJrZXIsIGZsb2F0IHN0cm9rZVdp
ZHRoLCBjb25zdCBQYXRoJiBwYXRoKQotewotICAgIG1fbGF5b3V0LmNsZWFyKCk7Ci0gICAgbV9t
aWRNYXJrZXIgPSBtaWRNYXJrZXI7Ci0gICAgbV9zdHJva2VXaWR0aCA9IHN0cm9rZVdpZHRoOwot
ICAgIG1fZWxlbWVudEluZGV4ID0gMDsKLSAgICBtX21hcmtlckRhdGEgPSBTVkdNYXJrZXJEYXRh
KFNWR01hcmtlckRhdGE6OlN0YXJ0LCBzdGFydE1hcmtlcik7Ci0gICAgcGF0aC5hcHBseSh0aGlz
LCBwcm9jZXNzU3RhcnRBbmRNaWRNYXJrZXJzKTsKLQotICAgIGlmIChlbmRNYXJrZXIpIHsKLSAg
ICAgICAgbV9tYXJrZXJEYXRhLnVwZGF0ZVR5cGVBbmRNYXJrZXIoU1ZHTWFya2VyRGF0YTo6RW5k
LCBlbmRNYXJrZXIpOwotICAgICAgICBhZGRMYXlvdXRlZE1hcmtlcihlbmRNYXJrZXIsIG1fbWFy
a2VyRGF0YS5vcmlnaW4oKSwgbV9tYXJrZXJEYXRhLmN1cnJlbnRBbmdsZSgpKTsKLSAgICB9Ci0K
LSAgICBpZiAobV9sYXlvdXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7
Ci0KLSAgICBWZWN0b3I8TWFya2VyTGF5b3V0Pjo6aXRlcmF0b3IgaXQgPSBtX2xheW91dC5iZWdp
bigpOwotICAgIFZlY3RvcjxNYXJrZXJMYXlvdXQ+OjppdGVyYXRvciBlbmQgPSBtX2xheW91dC5l
bmQoKTsKLQotICAgIEZsb2F0UmVjdCBib3VuZHM7Ci0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBNYXJrZXJMYXlvdXQmIGxheW91dCA9ICppdDsKLQotICAgICAgICBSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyQ29udGVudCA9IGxheW91dC5tYXJrZXI7Ci0gICAg
ICAgIEFTU0VSVChtYXJrZXJDb250ZW50KTsKLQotICAgICAgICBib3VuZHMudW5pdGUobWFya2Vy
Q29udGVudC0+bWFya2VyQm91bmRhcmllcyhsYXlvdXQubWF0cml4KSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGJvdW5kczsKLX0KLQotdm9pZCBTVkdNYXJrZXJMYXlvdXRJbmZvOjpkcmF3TWFya2Vy
cyhQYWludEluZm8mIHBhaW50SW5mbykKLXsKLSAgICBpZiAobV9sYXlvdXQuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8TWFya2VyTGF5b3V0Pjo6aXRlcmF0b3IgaXQg
PSBtX2xheW91dC5iZWdpbigpOwotICAgIFZlY3RvcjxNYXJrZXJMYXlvdXQ+OjppdGVyYXRvciBl
bmQgPSBtX2xheW91dC5lbmQoKTsKLQotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgTWFya2VyTGF5b3V0JiBsYXlvdXQgPSAqaXQ7Ci0gICAgICAgIGxheW91dC5tYXJrZXIt
PmRyYXcocGFpbnRJbmZvLCBsYXlvdXQubWF0cml4KTsKLSAgICB9Ci19Ci0KLXZvaWQgU1ZHTWFy
a2VyTGF5b3V0SW5mbzo6YWRkTGF5b3V0ZWRNYXJrZXIoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIq
IG1hcmtlciwgY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBhbmdsZSkKLXsKLSAgICBB
U1NFUlQobWFya2VyKTsKLSAgICBtX2xheW91dC5hcHBlbmQoTWFya2VyTGF5b3V0KG1hcmtlciwg
bWFya2VyLT5tYXJrZXJUcmFuc2Zvcm1hdGlvbihvcmlnaW4sIGFuZ2xlLCBtX3N0cm9rZVdpZHRo
KSkpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oCShyZXZpc2lvbiA3NTM0NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdN
YXJrZXJMYXlvdXRJbmZvX2gKLSNkZWZpbmUgU1ZHTWFya2VyTGF5b3V0SW5mb19oCi0KLSNpZiBF
TkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlNWR01hcmtl
ckRhdGEuaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBQYXRoOwotY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI7Ci0KLXN0
cnVjdCBNYXJrZXJMYXlvdXQgewotICAgIE1hcmtlckxheW91dChSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlciogbWFya2VyT2JqID0gMCwgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeE9iaiA9IEFmZmluZVRy
YW5zZm9ybSgpKQotICAgICAgICA6IG1hcmtlcihtYXJrZXJPYmopCi0gICAgICAgICwgbWF0cml4
KG1hdHJpeE9iaikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtYXJrZXIpOwotICAgIH0KLQotICAg
IFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXI7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1h
dHJpeDsKLX07Ci0KLWNsYXNzIFNWR01hcmtlckxheW91dEluZm8gOiBwdWJsaWMgTm9uY29weWFi
bGUgewotcHVibGljOgotICAgIFNWR01hcmtlckxheW91dEluZm8oKTsKLSAgICB+U1ZHTWFya2Vy
TGF5b3V0SW5mbygpOwotCi0gICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIqIHN0YXJ0TWFya2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciog
bWlkTWFya2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogZW5kTWFya2VyLCBmbG9hdCBzdHJv
a2VXaWR0aCwgY29uc3QgUGF0aCYpOwotICAgIHZvaWQgZHJhd01hcmtlcnMoUGFpbnRJbmZvJik7
Ci0KLSAgICAvLyBVc2VkIGJ5IHN0YXRpYyBpbmxpbmUgaGVscGVyIGZ1bmN0aW9ucyBpbiBTVkdN
YXJrZXJMYXlvdXRJbmZvLmNwcAotICAgIFNWR01hcmtlckRhdGEmIG1hcmtlckRhdGEoKSB7IHJl
dHVybiBtX21hcmtlckRhdGE7IH0KLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWlkTWFy
a2VyKCkgY29uc3QgeyByZXR1cm4gbV9taWRNYXJrZXI7IH0KLSAgICBpbnQmIGVsZW1lbnRJbmRl
eCgpIHsgcmV0dXJuIG1fZWxlbWVudEluZGV4OyB9Ci0gICAgdm9pZCBhZGRMYXlvdXRlZE1hcmtl
cihSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciosIGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxv
YXQgYW5nbGUpOwotCi1wcml2YXRlOgotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtX21p
ZE1hcmtlcjsKLQotICAgIC8vIFVzZWQgd2hpbGUgbGF5b3V0aW5nIG1hcmtlcnMKLSAgICBpbnQg
bV9lbGVtZW50SW5kZXg7Ci0gICAgU1ZHTWFya2VyRGF0YSBtX21hcmtlckRhdGE7Ci0gICAgZmxv
YXQgbV9zdHJva2VXaWR0aDsKLQotICAgIC8vIEhvbGRzIHRoZSBmaW5hbCBjb21wdXRlZCByZXN1
bHQKLSAgICBWZWN0b3I8TWFya2VyTGF5b3V0PiBtX2xheW91dDsKLX07Ci0KLX0KLQotI2VuZGlm
Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3Vw
cG9ydC5jcHAJKHJldmlzaW9uIDc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NW
R1JlbmRlclN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNp
bmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0KLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgotI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNl
cy5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1T
dGF0ZS5oIgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLUludFJlY3QgU1ZHUmVuZGVyU3VwcG9ydDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJl
cGFpbnQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyKQotewotICAgIC8vIFJldHVybiBlYXJseSBmb3IgYW55IGNhc2VzIHdoZXJlIHdl
IGRvbid0IGFjdHVhbGx5IHBhaW50Ci0gICAgaWYgKG9iamVjdC0+c3R5bGUoKS0+dmlzaWJpbGl0
eSgpICE9IFZJU0lCTEUgJiYgIW9iamVjdC0+ZW5jbG9zaW5nTGF5ZXIoKS0+aGFzVmlzaWJsZUNv
bnRlbnQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIC8vIFBhc3Mgb3VyIGxv
Y2FsIHBhaW50IHJlY3QgdG8gY29tcHV0ZVJlY3RGb3JSZXBhaW50KCkgd2hpY2ggd2lsbAotICAg
IC8vIG1hcCB0byBwYXJlbnQgY29vcmRzIGFuZCByZWN1cnNlIHVwIHRoZSBwYXJlbnQgY2hhaW4u
Ci0gICAgSW50UmVjdCByZXBhaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qob2JqZWN0LT5yZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBvYmplY3QtPmNvbXB1dGVSZWN0Rm9y
UmVwYWludChyZXBhaW50Q29udGFpbmVyLCByZXBhaW50UmVjdCk7Ci0gICAgcmV0dXJuIHJlcGFp
bnRSZWN0OwotfQotCi12b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVSZWN0Rm9yUmVwYWlu
dChSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250
YWluZXIsIEludFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKQotewotICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAg
ICBpZiAoY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gc3ZnU3R5bGUtPnNoYWRvdygpKQotICAg
ICAgICBzaGFkb3ctPmFkanVzdFJlY3RGb3JTaGFkb3cocmVwYWludFJlY3QpOwotCi0gICAgLy8g
VHJhbnNsYXRlIHRvIGNvb3JkcyBpbiBvdXIgcGFyZW50IHJlbmRlcmVyLCBhbmQgdGhlbiBjYWxs
IGNvbXB1dGVSZWN0Rm9yUmVwYWludCBvbiBvdXIgcGFyZW50Ci0gICAgcmVwYWludFJlY3QgPSBv
YmplY3QtPmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlcGFpbnRSZWN0KTsKLSAg
ICBvYmplY3QtPnBhcmVudCgpLT5jb21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5l
ciwgcmVwYWludFJlY3QsIGZpeGVkKTsKLX0KLQotdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjptYXBM
b2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCAsIGJvb2wgdXNlVHJhbnNmb3Jt
cywgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKQotewotICAgIEFTU0VSVCghZml4ZWQp
OyAvLyBXZSBzaG91bGQgaGF2ZSBubyBmaXhlZCBjb250ZW50IGluIHRoZSBTVkcgcmVuZGVyaW5n
IHRyZWUuCi0gICAgQVNTRVJUKHVzZVRyYW5zZm9ybXMpOyAvLyBNYXBwaW5nIGEgcG9pbnQgdGhy
b3VnaCBTVkcgdy9vIHJlc3BlY3RpbmcgdHJhbnNmb3JtcyBpcyB1c2VsZXNzLgotICAgIHRyYW5z
Zm9ybVN0YXRlLmFwcGx5VHJhbnNmb3JtKG9iamVjdC0+bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgp
KTsKLSAgICBvYmplY3QtPnBhcmVudCgpLT5tYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250
YWluZXIsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0ZSk7Ci19Ci0KLWJvb2wg
U1ZHUmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3Qq
IG9iamVjdCwgUGFpbnRJbmZvJiBwYWludEluZm8pCi17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0K
LSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0gICAgQVNTRVJUKHN0
eWxlKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdT
dHlsZSgpOwotICAgIEFTU0VSVChzdmdTdHlsZSk7Ci0KLSAgICAvLyBTZXR1cCB0cmFuc3BhcmVu
Y3kgbGF5ZXJzIGJlZm9yZSBzZXR0aW5nIHVwIFNWRyByZXNvdXJjZXMhCi0gICAgZmxvYXQgb3Bh
Y2l0eSA9IHN0eWxlLT5vcGFjaXR5KCk7Ci0gICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0g
c3ZnU3R5bGUtPnNoYWRvdygpOwotICAgIGlmIChvcGFjaXR5IDwgMSB8fCBzaGFkb3cpIHsKLSAg
ICAgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gb2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpOwotCi0gICAgICAgIGlmIChvcGFjaXR5IDwgMSkgewotICAgICAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPmNsaXAocmVwYWludFJlY3QpOwotICAgICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoc2hhZG93KSB7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+
Y2xpcChyZXBhaW50UmVjdCk7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U2hh
ZG93KEludFNpemUoc2hhZG93LT54KCksIHNoYWRvdy0+eSgpKSwgc2hhZG93LT5ibHVyKCksIHNo
YWRvdy0+Y29sb3IoKSwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hl
ZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChvYmplY3QpOwotICAgIGlmICghcmVzb3VyY2VzKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciog
bWFza2VyID0gcmVzb3VyY2VzLT5tYXNrZXIoKSkgewotICAgICAgICBpZiAoIW1hc2tlci0+YXBw
bHlSZXNvdXJjZShvYmplY3QsIHN0eWxlLCBwYWludEluZm8uY29udGV4dCwgQXBwbHlUb0RlZmF1
bHRNb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gcmVzb3VyY2VzLT5jbGlwcGVyKCkpIHsK
LSAgICAgICAgaWYgKCFjbGlwcGVyLT5hcHBseVJlc291cmNlKG9iamVjdCwgc3R5bGUsIHBhaW50
SW5mby5jb250ZXh0LCBBcHBseVRvRGVmYXVsdE1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotI2lmIEVOQUJMRShGSUxURVJTKQotICAgIGlmIChSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlciogZmlsdGVyID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkgewotICAgICAgICBpZiAo
IWZpbHRlci0+YXBwbHlSZXNvdXJjZShvYmplY3QsIHN0eWxlLCBwYWludEluZm8uY29udGV4dCwg
QXBwbHlUb0RlZmF1bHRNb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmZp
bmlzaFJlbmRlclNWR0NvbnRlbnQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBHcmFwaGljc0NvbnRleHQqIHNhdmVkQ29udGV4dCkKLXsKLSNpZiAhRU5BQkxFKEZJ
TFRFUlMpCi0gICAgVU5VU0VEX1BBUkFNKHNhdmVkQ29udGV4dCk7Ci0jZW5kaWYKLQotICAgIEFT
U0VSVChvYmplY3QpOwotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5z
dHlsZSgpOwotICAgIEFTU0VSVChzdHlsZSk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSog
c3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICBBU1NFUlQoc3ZnU3R5bGUpOwotCi0j
aWYgRU5BQkxFKEZJTFRFUlMpCi0gICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNv
dXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KG9iamVjdCk7Ci0gICAg
aWYgKHJlc291cmNlcykgewotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZp
bHRlciA9IHJlc291cmNlcy0+ZmlsdGVyKCkpIHsKLSAgICAgICAgICAgIGZpbHRlci0+cG9zdEFw
cGx5UmVzb3VyY2Uob2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgQXBwbHlUb0RlZmF1bHRNb2Rl
LCAvKiBwYXRoICovMCk7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dCA9IHNhdmVkQ29u
dGV4dDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKHN0eWxlLT5vcGFjaXR5
KCkgPCAxKQotICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKLQotICAgIGlmIChzdmdTdHlsZS0+c2hhZG93KCkpCi0gICAgICAgIHBhaW50SW5mby5jb250
ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwotfQotCi12b2lkIFNWR1JlbmRlclN1cHBvcnQ6
OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFp
bmVyLCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94LCBGbG9hdFJlY3QmIHN0cm9rZUJvdW5k
aW5nQm94LCBGbG9hdFJlY3QmIHJlcGFpbnRCb3VuZGluZ0JveCkKLXsKLSAgICBmb3IgKFJlbmRl
ck9iamVjdCogY3VycmVudCA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJy
ZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoY3VycmVudC0+aXNT
VkdIaWRkZW5Db250YWluZXIoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtID0gY3VycmVudC0+bG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpOwotICAgICAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkgewotICAgICAg
ICAgICAgb2JqZWN0Qm91bmRpbmdCb3gudW5pdGUoY3VycmVudC0+b2JqZWN0Qm91bmRpbmdCb3go
KSk7Ci0gICAgICAgICAgICBzdHJva2VCb3VuZGluZ0JveC51bml0ZShjdXJyZW50LT5zdHJva2VC
b3VuZGluZ0JveCgpKTsKLSAgICAgICAgICAgIHJlcGFpbnRCb3VuZGluZ0JveC51bml0ZShjdXJy
ZW50LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIG9iamVjdEJvdW5kaW5nQm94LnVuaXRlKHRyYW5zZm9ybS5tYXBSZWN0KGN1
cnJlbnQtPm9iamVjdEJvdW5kaW5nQm94KCkpKTsKLSAgICAgICAgICAgIHN0cm9rZUJvdW5kaW5n
Qm94LnVuaXRlKHRyYW5zZm9ybS5tYXBSZWN0KGN1cnJlbnQtPnN0cm9rZUJvdW5kaW5nQm94KCkp
KTsKLSAgICAgICAgICAgIHJlcGFpbnRCb3VuZGluZ0JveC51bml0ZSh0cmFuc2Zvcm0ubWFwUmVj
dChjdXJyZW50LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLWJvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1Jl
cGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbG9jYWxSZXBhaW50UmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBsb2NhbFRyYW5zZm9ybSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCi17
Ci0gICAgaWYgKGxvY2FsVHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgcmV0dXJuIGxv
Y2FsUmVwYWludFJlY3QuaW50ZXJzZWN0cyhwYWludEluZm8ucmVjdCk7Ci0KLSAgICByZXR1cm4g
bG9jYWxUcmFuc2Zvcm0ubWFwUmVjdChsb2NhbFJlcGFpbnRSZWN0KS5pbnRlcnNlY3RzKHBhaW50
SW5mby5yZWN0KTsKLX0KLQotY29uc3QgUmVuZGVyU1ZHUm9vdCogU1ZHUmVuZGVyU3VwcG9ydDo6
ZmluZFRyZWVSb290T2JqZWN0KGNvbnN0IFJlbmRlck9iamVjdCogc3RhcnQpCi17Ci0gICAgd2hp
bGUgKHN0YXJ0ICYmICFzdGFydC0+aXNTVkdSb290KCkpCi0gICAgICAgIHN0YXJ0ID0gc3RhcnQt
PnBhcmVudCgpOwotCi0gICAgQVNTRVJUKHN0YXJ0KTsKLSAgICBBU1NFUlQoc3RhcnQtPmlzU1ZH
Um9vdCgpKTsKLSAgICByZXR1cm4gdG9SZW5kZXJTVkdSb290KHN0YXJ0KTsKLX0KLQotc3RhdGlj
IGlubGluZSB2b2lkIGludmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKFJlbmRlck9iamVjdCog
c3RhcnQpCi17Ci0gICAgQVNTRVJUKCFzdGFydC0+bmVlZHNMYXlvdXQoKSk7Ci0gICAgaWYgKFNW
R1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNl
c0ZvclJlbmRlck9iamVjdChzdGFydCkpCi0gICAgICAgIHJlc291cmNlcy0+cmVtb3ZlQ2xpZW50
RnJvbUNhY2hlKHN0YXJ0LCBmYWxzZSk7Ci0KLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQg
PSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkKLSAgICAgICAgaW52YWxpZGF0ZVJlc291cmNlc09mQ2hpbGRyZW4oY2hpbGQpOwotfQotCi12
b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKFJlbmRlck9iamVjdCogc3RhcnQs
IGJvb2wgc2VsZk5lZWRzTGF5b3V0KQotewotICAgIGJvb2wgbGF5b3V0U2l6ZUNoYW5nZWQgPSBm
aW5kVHJlZVJvb3RPYmplY3Qoc3RhcnQpLT5pc0xheW91dFNpemVDaGFuZ2VkKCk7Ci0gICAgSGFz
aFNldDxSZW5kZXJPYmplY3QqPiBub3RsYXlvdXRlZE9iamVjdHM7Ci0KLSAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBib29sIG5lZWRzTGF5b3V0ID0gc2VsZk5lZWRz
TGF5b3V0OwotCi0gICAgICAgIGlmIChsYXlvdXRTaXplQ2hhbmdlZCkgewotICAgICAgICAgICAg
Ly8gV2hlbiBzZWxmTmVlZHNMYXlvdXQgaXMgZmFsc2UgYW5kIHRoZSBsYXlvdXQgc2l6ZSBjaGFu
Z2VkLCB3ZSBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgdGhpcyBjaGlsZCB1c2VzIHJlbGF0aXZlIGxl
bmd0aHMKLSAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBlbGVtZW50ID0gY2hpbGQtPm5vZGUo
KS0+aXNTVkdFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGQtPm5vZGUo
KSkgOiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzU3R5bGVkKCkgJiYgc3Rh
dGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5oYXNSZWxhdGl2ZUxlbmd0aHMo
KSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2Vk
IGFuZCB3aGVuIHVzaW5nIHJlbGF0aXZlIHZhbHVlcyB0ZWxsIHRoZSBSZW5kZXJTVkdQYXRoIHRv
IHVwZGF0ZSBpdHMgUGF0aCBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5p
c1NWR1BhdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyU1ZHUGF0aChjaGls
ZCktPnNldE5lZWRzUGF0aFVwZGF0ZSgpOwotCi0gICAgICAgICAgICAgICAgICAgIG5lZWRzTGF5
b3V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAobmVlZHNMYXlvdXQpIHsKLSAgICAgICAgICAgIGNoaWxkLT5zZXROZWVk
c0xheW91dCh0cnVlLCBmYWxzZSk7Ci0gICAgICAgICAgICBjaGlsZC0+bGF5b3V0KCk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPm5lZWRzTGF5b3V0KCkpCi0gICAg
ICAgICAgICAgICAgY2hpbGQtPmxheW91dCgpOwotICAgICAgICAgICAgZWxzZSBpZiAobGF5b3V0
U2l6ZUNoYW5nZWQpCi0gICAgICAgICAgICAgICAgbm90bGF5b3V0ZWRPYmplY3RzLmFkZChjaGls
ZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoIWNoaWxkLT5uZWVkc0xheW91dCgpKTsK
LSAgICB9Ci0KLSAgICBpZiAoIWxheW91dFNpemVDaGFuZ2VkKSB7Ci0gICAgICAgIEFTU0VSVChu
b3RsYXlvdXRlZE9iamVjdHMuaXNFbXB0eSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIElmIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkLCBpbnZhbGlkYXRlIGFsbCByZXNvdXJj
ZXMgb2YgYWxsIGNoaWxkcmVuIHRoYXQgZGlkbid0IGdvIHRocm91Z2ggdGhlIGxheW91dCgpIGNv
ZGUgcGF0aC4KLSAgICBIYXNoU2V0PFJlbmRlck9iamVjdCo+OjppdGVyYXRvciBlbmQgPSBub3Rs
YXlvdXRlZE9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFJlbmRlck9iamVjdCo+Ojpp
dGVyYXRvciBpdCA9IG5vdGxheW91dGVkT2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIGludmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKCppdCk7Ci19Ci0KLWJvb2wg
U1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbihjb25zdCBSZW5kZXJPYmplY3QqIG9i
amVjdCkKLXsKLSAgICAvLyBTVkcgZG9lc24ndCBzdXBwb3J0IGluZGVwZW5kZW50IHgveSBvdmVy
ZmxvdwotICAgIEFTU0VSVChvYmplY3QtPnN0eWxlKCktPm92ZXJmbG93WCgpID09IG9iamVjdC0+
c3R5bGUoKS0+b3ZlcmZsb3dZKCkpOwotCi0gICAgLy8gT1NDUk9MTCBpcyBuZXZlciBzZXQgZm9y
IFNWRyAtIHNlZSBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZQotICAgIEFTU0VS
VChvYmplY3QtPnN0eWxlKCktPm92ZXJmbG93WCgpICE9IE9TQ1JPTEwpOwotCi0gICAgLy8gUmVu
ZGVyU1ZHUm9vdCBzaG91bGQgbmV2ZXIgcXVlcnkgZm9yIG92ZXJmbG93IHN0YXRlIC0gaXQgc2hv
dWxkIGFsd2F5cyBjbGlwIGl0c2VsZiB0byB0aGUgaW5pdGlhbCB2aWV3cG9ydCBzaXplLgotICAg
IEFTU0VSVCghb2JqZWN0LT5pc1Jvb3QoKSk7Ci0KLSAgICByZXR1cm4gb2JqZWN0LT5zdHlsZSgp
LT5vdmVyZmxvd1goKSA9PSBPSElEREVOOwotfQotCi12b2lkIFNWR1JlbmRlclN1cHBvcnQ6Omlu
dGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyhjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCwgRmxvYXRSZWN0JiByZXBhaW50UmVjdCkKLXsKLSAgICBBU1NFUlQob2JqZWN0KTsKLQotICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKLSAgICBBU1NFUlQoc3R5bGUp
OwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxl
KCk7Ci0gICAgQVNTRVJUKHN2Z1N0eWxlKTsKLQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KG9iamVjdCk7Ci0gICAgU1ZHUmVzb3VyY2VzKiBy
ZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2Jq
ZWN0KHJlbmRlcmVyKTsKLSAgICBpZiAoIXJlc291cmNlcykgewotICAgICAgICBpZiAoY29uc3Qg
U2hhZG93RGF0YSogc2hhZG93ID0gc3ZnU3R5bGUtPnNoYWRvdygpKQotICAgICAgICAgICAgc2hh
ZG93LT5hZGp1c3RSZWN0Rm9yU2hhZG93KHJlcGFpbnRSZWN0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotI2lmIEVOQUJMRShGSUxURVJTKQotICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlciogZmlsdGVyID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkKLSAgICAgICAgcmVwYWludFJlY3Qg
PSBmaWx0ZXItPnJlc291cmNlQm91bmRpbmdCb3gocmVuZGVyZXIpOwotI2VuZGlmCi0KLSAgICBp
ZiAoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gcmVzb3VyY2VzLT5jbGlwcGVy
KCkpCi0gICAgICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChjbGlwcGVyLT5yZXNvdXJjZUJvdW5k
aW5nQm94KHJlbmRlcmVyKSk7Ci0KLSAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqIG1h
c2tlciA9IHJlc291cmNlcy0+bWFza2VyKCkpCi0gICAgICAgIHJlcGFpbnRSZWN0LmludGVyc2Vj
dChtYXNrZXItPnJlc291cmNlQm91bmRpbmdCb3gocmVuZGVyZXIpKTsKLQotICAgIGlmIChjb25z
dCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBzdmdTdHlsZS0+c2hhZG93KCkpCi0gICAgICAgIHNoYWRv
dy0+YWRqdXN0UmVjdEZvclNoYWRvdyhyZXBhaW50UmVjdCk7Ci19Ci0KLWJvb2wgU1ZHUmVuZGVy
U3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0KLSAgICAvLyBXZSBq
dXN0IHRha2UgY2xpcHBlcnMgaW50byBhY2NvdW50IHRvIGRldGVybWluZSBpZiBhIHBvaW50IGlz
IG9uIHRoZSBub2RlLiBUaGUgU3BlY2lmaWNhdGlvbiBtYXkKLSAgICAvLyBjaGFuZ2UgbGF0ZXIg
YW5kIHdlIGFsc28gbmVlZCB0byBjaGVjayBtYXNrZXJzLgotICAgIFNWR1Jlc291cmNlcyogcmVz
b3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVj
dChvYmplY3QpOwotICAgIGlmICghcmVzb3VyY2VzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSByZXNvdXJjZXMtPmNs
aXBwZXIoKSkKLSAgICAgICAgcmV0dXJuIGNsaXBwZXItPmhpdFRlc3RDbGlwQ29udGVudChvYmpl
Y3QtPm9iamVjdEJvdW5kaW5nQm94KCksIHBvaW50KTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0KQotewotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBBU1NFUlQoc3R5
bGUpOwotICAgIEFTU0VSVChvYmplY3QpOwotICAgIEFTU0VSVChvYmplY3QtPm5vZGUoKSk7Ci0g
ICAgQVNTRVJUKG9iamVjdC0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7Ci0KLSAgICBjb25zdCBT
VkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICBBU1NFUlQo
c3ZnU3R5bGUpOwotCi0gICAgU1ZHRWxlbWVudCogbGVuZ3RoQ29udGV4dCA9IHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihvYmplY3QtPm5vZGUoKSk7Ci0gICAgY29udGV4dC0+c2V0U3Ryb2tlVGhp
Y2tuZXNzKHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKGxlbmd0aENvbnRleHQpKTsKLSAg
ICBjb250ZXh0LT5zZXRMaW5lQ2FwKHN2Z1N0eWxlLT5jYXBTdHlsZSgpKTsKLSAgICBjb250ZXh0
LT5zZXRMaW5lSm9pbihzdmdTdHlsZS0+am9pblN0eWxlKCkpOwotICAgIGlmIChzdmdTdHlsZS0+
am9pblN0eWxlKCkgPT0gTWl0ZXJKb2luKQotICAgICAgICBjb250ZXh0LT5zZXRNaXRlckxpbWl0
KHN2Z1N0eWxlLT5zdHJva2VNaXRlckxpbWl0KCkpOwotCi0gICAgY29uc3QgVmVjdG9yPFNWR0xl
bmd0aD4mIGRhc2hlcyA9IHN2Z1N0eWxlLT5zdHJva2VEYXNoQXJyYXkoKTsKLSAgICBpZiAoZGFz
aGVzLmlzRW1wdHkoKSkKLSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJv
a2UpOwotICAgIGVsc2UgewotICAgICAgICBEYXNoQXJyYXkgZGFzaEFycmF5OwotICAgICAgICBj
b25zdCBWZWN0b3I8U1ZHTGVuZ3RoPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGFzaGVzLmVuZCgp
OwotICAgICAgICBmb3IgKFZlY3RvcjxTVkdMZW5ndGg+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRh
c2hlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBkYXNoQXJyYXkuYXBw
ZW5kKCgqaXQpLnZhbHVlKGxlbmd0aENvbnRleHQpKTsKLQotICAgICAgICBjb250ZXh0LT5zZXRM
aW5lRGFzaChkYXNoQXJyYXksIHN2Z1N0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCkudmFsdWUobGVu
Z3RoQ29udGV4dCkpOwotICAgIH0KLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaAkocmV2aXNpb24gNzUzNDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDgzICswLDAgQEAKLS8qKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHUmVuZGVyU3VwcG9ydF9o
Ci0jZGVmaW5lIFNWR1JlbmRlclN1cHBvcnRfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRl
ICJQYWludEluZm8uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFBvaW50
OwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFzcyBSZW5kZXJCb3hN
b2RlbE9iamVjdDsKLWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclN0eWxlOwotY2xh
c3MgUmVuZGVyU1ZHUm9vdDsKLWNsYXNzIFRyYW5zZm9ybVN0YXRlOwotCi0vLyBTVkdSZW5kZXJl
clN1cHBvcnQgaXMgYSBoZWxwZXIgY2xhc3Mgc2hhcmluZyBjb2RlIGJldHdlZW4gYWxsIFNWRyBy
ZW5kZXJlcnMuCi1jbGFzcyBTVkdSZW5kZXJTdXBwb3J0IHsKLXB1YmxpYzoKLSAgICAvLyBVc2Vk
IGJ5IGFsbCBTVkcgcmVuZGVyZXJzIHdobyBhcHBseSBjbGlwL2ZpbHRlci9ldGMuIHJlc291cmNl
cyB0byB0aGUgcmVuZGVyZXIgY29udGVudAotICAgIHN0YXRpYyBib29sIHByZXBhcmVUb1JlbmRl
clNWR0NvbnRlbnQoUmVuZGVyT2JqZWN0KiwgUGFpbnRJbmZvJik7Ci0gICAgc3RhdGljIHZvaWQg
ZmluaXNoUmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqLCBQYWludEluZm8mLCBHcmFwaGlj
c0NvbnRleHQqIHNhdmVkQ29udGV4dCk7Ci0KLSAgICAvLyBTaGFyZXMgY2hpbGQgbGF5b3V0aW5n
IGNvZGUgYmV0d2VlbiBSZW5kZXJTVkdSb290L1JlbmRlclNWRyhIaWRkZW4pQ29udGFpbmVyCi0g
ICAgc3RhdGljIHZvaWQgbGF5b3V0Q2hpbGRyZW4oUmVuZGVyT2JqZWN0KiwgYm9vbCBzZWxmTmVl
ZHNMYXlvdXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGRldGVybWluaW5nIHdoZXRlciBv
dmVyZmxvdyBpcyBoaWRkZW4KLSAgICBzdGF0aWMgYm9vbCBpc092ZXJmbG93SGlkZGVuKGNvbnN0
IFJlbmRlck9iamVjdCopOwotCi0gICAgLy8gQ2FsY3VsYXRlcyB0aGUgcmVwYWludFJlY3QgaW4g
Y29tYmluYXRpb24gd2l0aCBmaWx0ZXIsIGNsaXBwZXIgYW5kIG1hc2tlciBpbiBsb2NhbCBjb29y
ZGluYXRlcy4KLSAgICBzdGF0aWMgdm9pZCBpbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJj
ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiwgRmxvYXRSZWN0Jik7Ci0KLSAgICAvLyBEZXRlcm1pbmVz
IHdoZXRoZXIgdGhlIHBhc3NlZCBwb2ludCBsaWVzIGluIGEgY2xpcHBpbmcgYXJlYQotICAgIHN0
YXRpYyBib29sIHBvaW50SW5DbGlwcGluZ0FyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgRmxvYXRQ
b2ludCYpOwotCi0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMo
Y29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdC
b3gsIEZsb2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5k
aW5nQm94KTsKLSAgICBzdGF0aWMgYm9vbCBwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiBsb2NhbFJlcGFpbnRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGxvY2FsVHJhbnNmb3JtLCBjb25zdCBQYWludEluZm8mKTsKLQotICAgIC8vIEltcG9ydGFudCBm
dW5jdGlvbnMgdXNlZCBieSBuZWFybHkgYWxsIFNWRyByZW5kZXJlcnMgY2VudHJhbGl6aW5nIGNv
b3JkaW5hdGUgdHJhbnNmb3JtYXRpb25zIC8gcmVwYWludCByZWN0IGNhbGN1bGF0aW9ucwotICAg
IHN0YXRpYyBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlck9iamVj
dCosIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKLSAgICBzdGF0aWMg
dm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmLCBib29sIGZpeGVkKTsKLSAgICBzdGF0
aWMgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCosIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIHVzZVRyYW5zZm9ybXMsIGJvb2wg
Zml4ZWQsIFRyYW5zZm9ybVN0YXRlJik7Ci0KLSAgICAvLyBTaGFyZWQgYmV0d2VlbiBTVkcgcmVu
ZGVyZXJzIGFuZCByZXNvdXJjZXMuCi0gICAgc3RhdGljIHZvaWQgYXBwbHlTdHJva2VTdHlsZVRv
Q29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
ck9iamVjdCopOwotCi0gICAgLy8gRklYTUU6IFRoZXNlIG1ldGhvZHMgZG8gbm90IGJlbG9uZyBo
ZXJlLgotICAgIHN0YXRpYyBjb25zdCBSZW5kZXJTVkdSb290KiBmaW5kVHJlZVJvb3RPYmplY3Qo
Y29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0KLXByaXZhdGU6Ci0gICAgLy8gVGhpcyBjbGFzcyBpcyBu
b3QgY29uc3RydWN0YWJsZS4KLSAgICBTVkdSZW5kZXJTdXBwb3J0KCk7Ci0gICAgflNWR1JlbmRl
clN1cHBvcnQoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShTVkcpCi0jZW5kaWYgLy8gU1ZHUmVuZGVyU3VwcG9ydF9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA3
NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw3NDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiAgICAgICAgICAgKEMpIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqICAgICAgICAg
ICAoQykgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgotICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5j
bHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5o
IgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKLSNp
bmNsdWRlICJMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJOb2RlUmVuZGVy
U3R5bGUuaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSAiUGF0dGVybkF0dHJpYnV0ZXMu
aCIKLSNpbmNsdWRlICJSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJSZW5k
ZXJJbWFnZS5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgotI2luY2x1ZGUgIlJl
bmRlclNWR0dyYWRpZW50U3RvcC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0ltYWdlLmgiCi0jaW5j
bHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIK
LSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
aCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIgotI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCi0jaW5j
bHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNp
bmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRWxsaXBzZUVsZW1lbnQu
aCIKLSNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAiU1ZHTGluZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHUGF0
aFBhcnNlckZhY3RvcnkuaCIKLSNpbmNsdWRlICJTVkdQYXR0ZXJuRWxlbWVudC5oIgotI2luY2x1
ZGUgIlNWR1BvaW50TGlzdC5oIgotI2luY2x1ZGUgIlNWR1BvbHlFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHUmVjdEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCi0jaW5jbHVkZSAiU1ZHU3RvcEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0KLSNpbmNsdWRlIDxtYXRoLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLyoqIGNsYXNzICsgaW9tYW5pcCB0byBoZWxwIHN0
cmVhbWluZyBsaXN0IHNlcGFyYXRvcnMsIGkuZS4gIiwgIiBpbiBzdHJpbmcgImEsIGIsIGMsIGQi
Ci0gKiBDYW4gYmUgdXNlZCBpbiBjYXNlcyB3aGVyZSB5b3UgZG9uJ3Qga25vdyB3aGljaCBpdGVt
IGluIHRoZSBsaXN0IGlzIHRoZSBmaXJzdAotICogb25lIHRvIGJlIHByaW50ZWQsIGJ1dCBzdGls
bCB3YW50IHRvIGF2b2lkIHN0cmluZ3MgbGlrZSAiLCBiLCBjIi4KLSAqLwotY2xhc3MgVGV4dFN0
cmVhbVNlcGFyYXRvciB7Ci1wdWJsaWM6Ci0gICAgVGV4dFN0cmVhbVNlcGFyYXRvcihjb25zdCBT
dHJpbmcmIHMpCi0gICAgICAgIDogbV9zZXBhcmF0b3IocykKLSAgICAgICAgLCBtX25lZWRUb1Nl
cGFyYXRlKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIFRleHRTdHJlYW1TZXBhcmF0b3ImKTsKLQot
ICAgIFN0cmluZyBtX3NlcGFyYXRvcjsKLSAgICBib29sIG1fbmVlZFRvU2VwYXJhdGU7Ci19Owot
Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUZXh0U3RyZWFtU2VwYXJh
dG9yJiBzZXApCi17Ci0gICAgaWYgKHNlcC5tX25lZWRUb1NlcGFyYXRlKQotICAgICAgICB0cyA8
PCBzZXAubV9zZXBhcmF0b3I7Ci0gICAgZWxzZQotICAgICAgICBzZXAubV9uZWVkVG9TZXBhcmF0
ZSA9IHRydWU7Ci0gICAgcmV0dXJuIHRzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5
cGU+Ci1zdGF0aWMgdm9pZCB3cml0ZU5hbWVWYWx1ZVBhaXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IGNoYXIqIG5hbWUsIFZhbHVlVHlwZSB2YWx1ZSkKLXsKLSAgICB0cyA8PCAiIFsiIDw8IG5hbWUg
PDwgIj0iIDw8IHZhbHVlIDw8ICJdIjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBl
Pgotc3RhdGljIHZvaWQgd3JpdGVOYW1lQW5kUXVvdGVkVmFsdWUoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IGNoYXIqIG5hbWUsIFZhbHVlVHlwZSB2YWx1ZSkKLXsKLSAgICB0cyA8PCAiIFsiIDw8IG5h
bWUgPDwgIj1cIiIgPDwgdmFsdWUgPDwgIlwiXSI7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlSWZO
b3RFbXB0eShUZXh0U3RyZWFtJiB0cywgY29uc3QgY2hhciogbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgd3JpdGVOYW1lVmFs
dWVQYWlyKHRzLCBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlw
ZT4KLXN0YXRpYyB2b2lkIHdyaXRlSWZOb3REZWZhdWx0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBj
aGFyKiBuYW1lLCBWYWx1ZVR5cGUgdmFsdWUsIFZhbHVlVHlwZSBkZWZhdWx0VmFsdWUpCi17Ci0g
ICAgaWYgKHZhbHVlICE9IGRlZmF1bHRWYWx1ZSkKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWly
KHRzLCBuYW1lLCB2YWx1ZSk7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IEZsb2F0UmVjdCAmcikKLXsKLSAgICB0cyA8PCAiYXQgKCI7IAotICAgIGlm
IChoYXNGcmFjdGlvbnMoci54KCkpKSAKLSAgICAgICAgdHMgPDwgci54KCk7Ci0gICAgZWxzZSAK
LSAgICAgICAgdHMgPDwgaW50KHIueCgpKTsKLSAgICB0cyA8PCAiLCI7Ci0gICAgaWYgKGhhc0Zy
YWN0aW9ucyhyLnkoKSkpIAotICAgICAgICB0cyA8PCByLnkoKTsKLSAgICBlbHNlIAotICAgICAg
ICB0cyA8PCBpbnQoci55KCkpOwotICAgIHRzIDw8ICIpIHNpemUgIjsKLSAgICBpZiAoaGFzRnJh
Y3Rpb25zKHIud2lkdGgoKSkpIAotICAgICAgICB0cyA8PCByLndpZHRoKCk7IAotICAgIGVsc2Ug
Ci0gICAgICAgIHRzIDw8IGludChyLndpZHRoKCkpOyAKLSAgICB0cyA8PCAieCI7Ci0gICAgaWYg
KGhhc0ZyYWN0aW9ucyhyLmhlaWdodCgpKSkgCi0gICAgICAgIHRzIDw8IHIuaGVpZ2h0KCk7Ci0g
ICAgZWxzZSAKLSAgICAgICAgdHMgPDwgaW50KHIuaGVpZ2h0KCkpOwotICAgIHJldHVybiB0czsK
LX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5KCkp
Ci0gICAgICAgIHRzIDw8ICJpZGVudGl0eSI7Ci0gICAgZWxzZQotICAgICAgICB0cyA8PCAie209
KCgiCi0gICAgICAgICAgIDw8IHRyYW5zZm9ybS5hKCkgPDwgIiwiIDw8IHRyYW5zZm9ybS5iKCkK
LSAgICAgICAgICAgPDwgIikoIgotICAgICAgICAgICA8PCB0cmFuc2Zvcm0uYygpIDw8ICIsIiA8
PCB0cmFuc2Zvcm0uZCgpCi0gICAgICAgICAgIDw8ICIpKSB0PSgiCi0gICAgICAgICAgIDw8IHRy
YW5zZm9ybS5lKCkgPDwgIiwiIDw8IHRyYW5zZm9ybS5mKCkKLSAgICAgICAgICAgPDwgIil9IjsK
LQotICAgIHJldHVybiB0czsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFdpbmRSdWxlIHJ1bGUpCi17Ci0gICAgc3dpdGNoIChydWxlKSB7
Ci0gICAgY2FzZSBSVUxFX05PTlpFUk86Ci0gICAgICAgIHRzIDw8ICJOT04tWkVSTyI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgUlVMRV9FVkVOT0REOgotICAgICAgICB0cyA8PCAiRVZFTi1P
REQiOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTVkdVbml0VHlw
ZXM6OlNWR1VuaXRUeXBlJiB1bml0VHlwZSkKLXsKLSAgICBzd2l0Y2ggKHVuaXRUeXBlKSB7Ci0g
ICAgY2FzZSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfVU5LTk9XTjoKLSAgICAgICAgdHMg
PDwgInVua25vd24iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR1VuaXRUeXBlczo6U1ZH
X1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRToKLSAgICAgICAgdHMgPDwgInVzZXJTcGFjZU9uVXNl
IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVf
T0JKRUNUQk9VTkRJTkdCT1g6Ci0gICAgICAgIHRzIDw8ICJvYmplY3RCb3VuZGluZ0JveCI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0czsKLX0KLQotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNWR01hcmtlckVsZW1lbnQ6
OlNWR01hcmtlclVuaXRzVHlwZSYgbWFya2VyVW5pdCkKLXsKLSAgICBzd2l0Y2ggKG1hcmtlclVu
aXQpIHsKLSAgICBjYXNlIFNWR01hcmtlckVsZW1lbnQ6OlNWR19NQVJLRVJVTklUU19VTktOT1dO
OgotICAgICAgICB0cyA8PCAidW5rbm93biI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZH
TWFya2VyRWxlbWVudDo6U1ZHX01BUktFUlVOSVRTX1VTRVJTUEFDRU9OVVNFOgotICAgICAgICB0
cyA8PCAidXNlclNwYWNlT25Vc2UiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR01hcmtl
ckVsZW1lbnQ6OlNWR19NQVJLRVJVTklUU19TVFJPS0VXSURUSDoKLSAgICAgICAgdHMgPDwgInN0
cm9rZVdpZHRoIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRzOwotfQot
Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgYykK
LXsKLSAgICByZXR1cm4gdHMgPDwgYy5uYW1lKCk7Ci19Ci0KLS8vIEZJWE1FOiBNYXliZSB0aGlz
IHNob3VsZCBiZSBpbiBLQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCi1zdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRGFzaEFycmF5JiBhKQotewotICAg
IHRzIDw8ICJ7IjsKLSAgICBEYXNoQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGEuZW5kKCk7
Ci0gICAgZm9yIChEYXNoQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0ICE9IGEuYmVnaW4oKSkKLSAgICAgICAgICAg
IHRzIDw8ICIsICI7Ci0gICAgICAgIHRzIDw8ICppdDsKLSAgICB9Ci0gICAgdHMgPDwgIn0iOwot
ICAgIHJldHVybiB0czsKLX0KLQotLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIEdy
YXBoaWNzVHlwZXMuY3BwCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgTGluZUNhcCBzdHlsZSkKLXsKLSAgICBzd2l0Y2ggKHN0eWxlKSB7Ci0gICAgY2FzZSBC
dXR0Q2FwOgotICAgICAgICB0cyA8PCAiQlVUVCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Um91bmRDYXA6Ci0gICAgICAgIHRzIDw8ICJST1VORCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU3F1YXJlQ2FwOgotICAgICAgICB0cyA8PCAiU1FVQVJFIjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIHJldHVybiB0czsKLX0KLQotLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJl
IGluIEdyYXBoaWNzVHlwZXMuY3BwCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgTGluZUpvaW4gc3R5bGUpCi17Ci0gICAgc3dpdGNoIChzdHlsZSkgewotICAg
IGNhc2UgTWl0ZXJKb2luOgotICAgICAgICB0cyA8PCAiTUlURVIiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFJvdW5kSm9pbjoKLSAgICAgICAgdHMgPDwgIlJPVU5EIjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBCZXZlbEpvaW46Ci0gICAgICAgIHRzIDw8ICJCRVZFTCI7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLS8vIEZJWE1FOiBNYXliZSB0aGlz
IHNob3VsZCBiZSBpbiBHcmFkaWVudC5jcHAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBtb2RlKQotewotICAgIHN3aXRj
aCAobW9kZSkgewotICAgIGNhc2UgU3ByZWFkTWV0aG9kUGFkOgotICAgICAgICB0cyA8PCAiUEFE
IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6Ci0gICAgICAg
IHRzIDw8ICJSRVBFQVQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNwcmVhZE1ldGhvZFJl
ZmxlY3Q6Ci0gICAgICAgIHRzIDw8ICJSRUZMRUNUIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRzOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZVNWR1BhaW50aW5nUmVzb3Vy
Y2UoVGV4dFN0cmVhbSYgdHMsIFJlbmRlclNWR1Jlc291cmNlKiByZXNvdXJjZSkKLXsKLSAgICBp
ZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IFNvbGlkQ29sb3JSZXNvdXJjZVR5cGUpIHsK
LSAgICAgICAgdHMgPDwgIlt0eXBlPVNPTElEXSBbY29sb3I9IiA8PCBzdGF0aWNfY2FzdDxSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqPihyZXNvdXJjZSktPmNvbG9yKCkgPDwgIl0iOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWxsIG90aGVyIHJlc291cmNlcyBkZXJpdmUg
ZnJvbSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcgotICAgIFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyKiBjb250YWluZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
cio+KHJlc291cmNlKTsKLSAgICBOb2RlKiBub2RlID0gY29udGFpbmVyLT5ub2RlKCk7Ci0gICAg
QVNTRVJUKG5vZGUpOwotICAgIEFTU0VSVChub2RlLT5pc1NWR0VsZW1lbnQoKSk7Ci0KLSAgICBp
ZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IFBhdHRlcm5SZXNvdXJjZVR5cGUpCi0gICAg
ICAgIHRzIDw8ICJbdHlwZT1QQVRURVJOXSI7Ci0gICAgZWxzZSBpZiAocmVzb3VyY2UtPnJlc291
cmNlVHlwZSgpID09IExpbmVhckdyYWRpZW50UmVzb3VyY2VUeXBlKQotICAgICAgICB0cyA8PCAi
W3R5cGU9TElORUFSLUdSQURJRU5UXSI7Ci0gICAgZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNl
VHlwZSgpID09IFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBlKQotICAgICAgICB0cyA8PCAiW3R5
cGU9UkFESUFMLUdSQURJRU5UXSI7Ci0KLSAgICB0cyA8PCAiIFtpZD1cIiIgPDwgc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KG5vZGUpLT5nZXRJZEF0dHJpYnV0ZSgpIDw8ICJcIl0iOwotfQotCi1z
dGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3Qm
IG9iamVjdCkKLXsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3Quc3R5bGUo
KTsKLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUo
KTsKLQotICAgIGlmICghb2JqZWN0LmxvY2FsVHJhbnNmb3JtKCkuaXNJZGVudGl0eSgpKQotICAg
ICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ0cmFuc2Zvcm0iLCBvYmplY3QubG9jYWxUcmFu
c2Zvcm0oKSk7Ci0gICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJpbWFnZSByZW5kZXJpbmciLCBz
dmdTdHlsZS0+aW1hZ2VSZW5kZXJpbmcoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJl
bmRlcmluZygpKTsKLSAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBzdHlsZS0+
b3BhY2l0eSgpLCBSZW5kZXJTdHlsZTo6aW5pdGlhbE9wYWNpdHkoKSk7Ci0gICAgaWYgKG9iamVj
dC5pc1NWR1BhdGgoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUGF0aCY+KG9iamVjdCk7Ci0gICAgICAgIEFTU0VSVChw
YXRoLm5vZGUoKSk7Ci0gICAgICAgIEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkp
OwotCi0gICAgICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdS
ZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJv
a2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0
aC5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkgewotICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFy
YXRvciBzKCIgIik7Ci0gICAgICAgICAgICB0cyA8PCAiIFtzdHJva2U9eyIgPDwgczsKLSAgICAg
ICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgc3Ryb2tlUGFpbnRpbmdSZXNvdXJj
ZSk7Ci0KLSAgICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4ocGF0aC5ub2RlKCkpOwotICAgICAgICAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBz
dmdTdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgpLnZhbHVlKGVsZW1lbnQpOwotICAgICAgICAgICAg
ZG91YmxlIHN0cm9rZVdpZHRoID0gc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUoZWxlbWVu
dCk7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHTGVuZ3RoPiYgZGFzaGVzID0gc3ZnU3R5
bGUtPnN0cm9rZURhc2hBcnJheSgpOwotCi0gICAgICAgICAgICBEYXNoQXJyYXkgZGFzaEFycmF5
OwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGRhc2hlcy5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoVmVjdG9yPFNWR0xlbmd0aD46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gZGFzaGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgICAgICAgICBkYXNoQXJyYXkuYXBwZW5kKCgqaXQpLnZhbHVlKGVsZW1lbnQpKTsKLQotICAg
ICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3ZnU3R5bGUtPnN0cm9r
ZU9wYWNpdHkoKSwgMS4wZik7Ci0gICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgInN0
cm9rZSB3aWR0aCIsIHN0cm9rZVdpZHRoLCAxLjApOwotICAgICAgICAgICAgd3JpdGVJZk5vdERl
ZmF1bHQodHMsICJtaXRlciBsaW1pdCIsIHN2Z1N0eWxlLT5zdHJva2VNaXRlckxpbWl0KCksIDQu
MGYpOwotICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJsaW5lIGNhcCIsIHN2Z1N0
eWxlLT5jYXBTdHlsZSgpLCBCdXR0Q2FwKTsKLSAgICAgICAgICAgIHdyaXRlSWZOb3REZWZhdWx0
KHRzLCAibGluZSBqb2luIiwgc3ZnU3R5bGUtPmpvaW5TdHlsZSgpLCBNaXRlckpvaW4pOwotICAg
ICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJkYXNoIG9mZnNldCIsIGRhc2hPZmZzZXQs
IDAuMCk7Ci0gICAgICAgICAgICBpZiAoIWRhc2hBcnJheS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiZGFzaCBhcnJheSIsIGRhc2hBcnJheSk7Ci0K
LSAgICAgICAgICAgIHRzIDw8ICJ9XSI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoUmVuZGVy
U1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZp
bGxQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0
aC5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkgewotICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFy
YXRvciBzKCIgIik7Ci0gICAgICAgICAgICB0cyA8PCAiIFtmaWxsPXsiIDw8IHM7Ci0gICAgICAg
ICAgICB3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UodHMsIGZpbGxQYWludGluZ1Jlc291cmNlKTsK
LQotICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3ZnU3R5bGUt
PmZpbGxPcGFjaXR5KCksIDEuMGYpOwotICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMs
ICJmaWxsIHJ1bGUiLCBzdmdTdHlsZS0+ZmlsbFJ1bGUoKSwgUlVMRV9OT05aRVJPKTsKLSAgICAg
ICAgICAgIHRzIDw8ICJ9XSI7Ci0gICAgICAgIH0KLSAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQo
dHMsICJjbGlwIHJ1bGUiLCBzdmdTdHlsZS0+Y2xpcFJ1bGUoKSwgUlVMRV9OT05aRVJPKTsKLSAg
ICB9Ci0KLSAgICB3cml0ZUlmTm90RW1wdHkodHMsICJzdGFydCBtYXJrZXIiLCBzdmdTdHlsZS0+
bWFya2VyU3RhcnRSZXNvdXJjZSgpKTsKLSAgICB3cml0ZUlmTm90RW1wdHkodHMsICJtaWRkbGUg
bWFya2VyIiwgc3ZnU3R5bGUtPm1hcmtlck1pZFJlc291cmNlKCkpOwotICAgIHdyaXRlSWZOb3RF
bXB0eSh0cywgImVuZCBtYXJrZXIiLCBzdmdTdHlsZS0+bWFya2VyRW5kUmVzb3VyY2UoKSk7Ci19
Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9uQW5kU3R5bGUoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQotewotICAgIHRzIDw8ICIgIiA8PCBjb25z
dF9jYXN0PFJlbmRlck9iamVjdCY+KG9iamVjdCkuYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0
KCk7Ci0gICAgd3JpdGVTdHlsZSh0cywgb2JqZWN0KTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJT
VkdQYXRoJiBwYXRoKQotewotICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywgcGF0aCk7Ci0K
LSAgICBBU1NFUlQocGF0aC5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKLSAgICBTVkdFbGVtZW50
KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhdGgubm9kZSgpKTsKLQot
ICAgIGlmIChzdmdFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpyZWN0VGFnKSkgewotICAg
ICAgICBTVkdSZWN0RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50
Kj4oc3ZnRWxlbWVudCk7Ci0gICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgIngiLCBlbGVt
ZW50LT54KCkudmFsdWUoZWxlbWVudCkpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMs
ICJ5IiwgZWxlbWVudC0+eSgpLnZhbHVlKGVsZW1lbnQpKTsKLSAgICAgICAgd3JpdGVOYW1lVmFs
dWVQYWlyKHRzLCAid2lkdGgiLCBlbGVtZW50LT53aWR0aCgpLnZhbHVlKGVsZW1lbnQpKTsKLSAg
ICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiaGVpZ2h0IiwgZWxlbWVudC0+aGVpZ2h0KCku
dmFsdWUoZWxlbWVudCkpOwotICAgIH0gZWxzZSBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShT
VkdOYW1lczo6bGluZVRhZykpIHsKLSAgICAgICAgU1ZHTGluZUVsZW1lbnQqIGVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdMaW5lRWxlbWVudCo+KHN2Z0VsZW1lbnQpOwotICAgICAgICB3cml0ZU5h
bWVWYWx1ZVBhaXIodHMsICJ4MSIsIGVsZW1lbnQtPngxKCkudmFsdWUoZWxlbWVudCkpOwotICAg
ICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ5MSIsIGVsZW1lbnQtPnkxKCkudmFsdWUoZWxl
bWVudCkpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ4MiIsIGVsZW1lbnQtPngy
KCkudmFsdWUoZWxlbWVudCkpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ5MiIs
IGVsZW1lbnQtPnkyKCkudmFsdWUoZWxlbWVudCkpOwotICAgIH0gZWxzZSBpZiAoc3ZnRWxlbWVu
dC0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZWxsaXBzZVRhZykpIHsKLSAgICAgICAgU1ZHRWxsaXBz
ZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGxpcHNlRWxlbWVudCo+KHN2Z0Vs
ZW1lbnQpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJjeCIsIGVsZW1lbnQtPmN4
KCkudmFsdWUoZWxlbWVudCkpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJjeSIs
IGVsZW1lbnQtPmN5KCkudmFsdWUoZWxlbWVudCkpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBh
aXIodHMsICJyeCIsIGVsZW1lbnQtPnJ4KCkudmFsdWUoZWxlbWVudCkpOwotICAgICAgICB3cml0
ZU5hbWVWYWx1ZVBhaXIodHMsICJyeSIsIGVsZW1lbnQtPnJ5KCkudmFsdWUoZWxlbWVudCkpOwot
ICAgIH0gZWxzZSBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6Y2lyY2xlVGFn
KSkgewotICAgICAgICBTVkdDaXJjbGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
Q2lyY2xlRWxlbWVudCo+KHN2Z0VsZW1lbnQpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIo
dHMsICJjeCIsIGVsZW1lbnQtPmN4KCkudmFsdWUoZWxlbWVudCkpOwotICAgICAgICB3cml0ZU5h
bWVWYWx1ZVBhaXIodHMsICJjeSIsIGVsZW1lbnQtPmN5KCkudmFsdWUoZWxlbWVudCkpOwotICAg
ICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJyIiwgZWxlbWVudC0+cigpLnZhbHVlKGVsZW1l
bnQpKTsKLSAgICB9IGVsc2UgaWYgKHN2Z0VsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnBv
bHlnb25UYWcpIHx8IHN2Z0VsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnBvbHlsaW5lVGFn
KSkgewotICAgICAgICBTVkdQb2x5RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1Bv
bHlFbGVtZW50Kj4oc3ZnRWxlbWVudCk7Ci0gICAgICAgIHdyaXRlTmFtZUFuZFF1b3RlZFZhbHVl
KHRzLCAicG9pbnRzIiwgZWxlbWVudC0+cG9pbnRMaXN0KCkudmFsdWVBc1N0cmluZygpKTsKLSAg
ICB9IGVsc2UgaWYgKHN2Z0VsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnBhdGhUYWcpKSB7
Ci0gICAgICAgIFNWR1BhdGhFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aEVs
ZW1lbnQqPihzdmdFbGVtZW50KTsKLSAgICAgICAgU3RyaW5nIHBhdGhTdHJpbmc7Ci0gICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgc3dpdGNoIHRvIFVuYWx0ZXJlZFBhcnNpbmcgaGVyZSAtIHRo
aXMgd2lsbCBhZmZlY3QgdGhlIHBhdGggZHVtcGluZyBvdXRwdXQgb2YgZG96ZW5zIG9mIHRlc3Rz
LgotICAgICAgICBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpLT5idWlsZFN0cmluZ0Zyb21C
eXRlU3RyZWFtKGVsZW1lbnQtPnBhdGhCeXRlU3RyZWFtKCksIHBhdGhTdHJpbmcsIE5vcm1hbGl6
ZWRQYXJzaW5nKTsKLSAgICAgICAgd3JpdGVOYW1lQW5kUXVvdGVkVmFsdWUodHMsICJkYXRhIiwg
cGF0aFN0cmluZyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiB0czsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jvb3QmIHJvb3QpCi17Ci0gICAgcmV0dXJuIHdyaXRl
UG9zaXRpb25BbmRTdHlsZSh0cywgcm9vdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlUmVuZGVy
U1ZHVGV4dEJveChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyQmxvY2smIHRleHQpCi17Ci0g
ICAgU1ZHUm9vdElubGluZUJveCogYm94ID0gc3RhdGljX2Nhc3Q8U1ZHUm9vdElubGluZUJveCo+
KHRleHQuZmlyc3RSb290Qm94KCkpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0K
LSAgICB0cyA8PCAiIGF0ICgiIDw8IHRleHQueCgpIDw8ICIsIiA8PCB0ZXh0LnkoKSA8PCAiKSBz
aXplICIgPDwgYm94LT5sb2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgYm94LT5sb2dpY2FsSGVpZ2h0
KCk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGhhY2ssIG9uY2UgdGhlIG5ldyB0
ZXh0IGxheW91dCBlbmdpbmUgaXMgY29tcGxldGx5IGxhbmRlZC4gV2Ugd2FudCB0byBwcmVzZXJ2
ZSB0aGUgb2xkIGxheW91dCB0ZXN0IHJlc3VsdHMgZm9yIG5vdy4KLSAgICB0cyA8PCAiIGNvbnRh
aW5zIDEgY2h1bmsocykiOwotCi0gICAgaWYgKHRleHQucGFyZW50KCkgJiYgKHRleHQucGFyZW50
KCktPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSB0
ZXh0LnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkpCi0g
ICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImNvbG9yIiwgdGV4dC5zdHlsZSgpLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikubmFtZSgpKTsKLX0KLQotc3RhdGlj
IGlubGluZSB2b2lkIHdyaXRlU1ZHSW5saW5lVGV4dEJveChUZXh0U3RyZWFtJiB0cywgU1ZHSW5s
aW5lVGV4dEJveCogdGV4dEJveCwgaW50IGluZGVudCkKLXsKLSAgICBWZWN0b3I8U1ZHVGV4dEZy
YWdtZW50PiYgZnJhZ21lbnRzID0gdGV4dEJveC0+dGV4dEZyYWdtZW50cygpOwotICAgIGlmIChm
cmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJTVkdJbmxp
bmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQodGV4dEJveC0+dGV4
dFJlbmRlcmVyKCkpOwotICAgIEFTU0VSVCh0ZXh0UmVuZGVyZXIpOwotCi0gICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gdGV4dFJlbmRlcmVyLT5zdHlsZSgpLT5zdmdTdHlsZSgp
OwotICAgIFN0cmluZyB0ZXh0ID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPnRleHQoKTsKLQot
ICAgIHVuc2lnbmVkIGZyYWdtZW50c1NpemUgPSBmcmFnbWVudHMuc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmcmFnbWVudHNTaXplOyArK2kpIHsKLSAgICAgICAgU1ZHVGV4
dEZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKLSAgICAgICAgd3JpdGVJbmRl
bnQodHMsIGluZGVudCArIDEpOwotCi0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gZnJh
Z21lbnQucG9zaXRpb25MaXN0T2Zmc2V0OwotICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBm
cmFnbWVudC5wb3NpdGlvbkxpc3RPZmZzZXQgKyBmcmFnbWVudC5sZW5ndGg7Ci0KLSAgICAgICAg
Ly8gRklYTUU6IFJlbW92ZSB0aGlzIGhhY2ssIG9uY2UgdGhlIG5ldyB0ZXh0IGxheW91dCBlbmdp
bmUgaXMgY29tcGxldGx5IGxhbmRlZC4gV2Ugd2FudCB0byBwcmVzZXJ2ZSB0aGUgb2xkIGxheW91
dCB0ZXN0IHJlc3VsdHMgZm9yIG5vdy4KLSAgICAgICAgdHMgPDwgImNodW5rIDEgIjsKLSAgICAg
ICAgRVRleHRBbmNob3IgYW5jaG9yID0gc3ZnU3R5bGUtPnRleHRBbmNob3IoKTsKLSAgICAgICAg
Ym9vbCBpc1ZlcnRpY2FsVGV4dCA9IHN2Z1N0eWxlLT5pc1ZlcnRpY2FsV3JpdGluZ01vZGUoKTsK
LSAgICAgICAgaWYgKGFuY2hvciA9PSBUQV9NSURETEUpIHsKLSAgICAgICAgICAgIHRzIDw8ICIo
bWlkZGxlIGFuY2hvciI7Ci0gICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAg
ICAgICAgICAgdHMgPDwgIiwgdmVydGljYWwiOwotICAgICAgICAgICAgdHMgPDwgIikgIjsKLSAg
ICAgICAgfSBlbHNlIGlmIChhbmNob3IgPT0gVEFfRU5EKSB7Ci0gICAgICAgICAgICB0cyA8PCAi
KGVuZCBhbmNob3IiOwotICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAg
ICAgICAgIHRzIDw8ICIsIHZlcnRpY2FsIjsKLSAgICAgICAgICAgIHRzIDw8ICIpICI7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICB0cyA8PCAiKHZlcnRp
Y2FsKSAiOwotICAgICAgICBzdGFydE9mZnNldCAtPSB0ZXh0Qm94LT5zdGFydCgpOwotICAgICAg
ICBlbmRPZmZzZXQgLT0gdGV4dEJveC0+c3RhcnQoKTsKLSAgICAgICAgLy8gPC9oYWNrPgotCi0g
ICAgICAgIHRzIDw8ICJ0ZXh0IHJ1biAiIDw8IGkgKyAxIDw8ICIgYXQgKCIgPDwgZnJhZ21lbnQu
eCA8PCAiLCIgPDwgZnJhZ21lbnQueSA8PCAiKSI7Ci0gICAgICAgIHRzIDw8ICIgc3RhcnRPZmZz
ZXQgIiA8PCBzdGFydE9mZnNldCA8PCAiIGVuZE9mZnNldCAiIDw8IGVuZE9mZnNldDsKLSAgICAg
ICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgdHMgPDwgIiBoZWlnaHQgIiA8PCBm
cmFnbWVudC5oZWlnaHQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRzIDw8ICIgd2lkdGgg
IiA8PCBmcmFnbWVudC53aWR0aDsKLQotICAgICAgICBpZiAoIXRleHRCb3gtPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSB8fCB0ZXh0Qm94LT5tX2Rpck92ZXJyaWRlKSB7Ci0gICAgICAgICAgICB0
cyA8PCAodGV4dEJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gIiBMVFIiIDogIiBSVEwi
KTsKLSAgICAgICAgICAgIGlmICh0ZXh0Qm94LT5tX2Rpck92ZXJyaWRlKQotICAgICAgICAgICAg
ICAgIHRzIDw8ICIgb3ZlcnJpZGUiOwotICAgICAgICB9Ci0KLSAgICAgICAgdHMgPDwgIjogIiA8
PCBxdW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXModGV4dC5zdWJzdHJpbmcoZnJhZ21lbnQucG9z
aXRpb25MaXN0T2Zmc2V0LCBmcmFnbWVudC5sZW5ndGgpKSA8PCAiXG4iOwotICAgIH0KLX0KLQot
c3RhdGljIGlubGluZSB2b2lkIHdyaXRlU1ZHSW5saW5lVGV4dEJveGVzKFRleHRTdHJlYW0mIHRz
LCBjb25zdCBSZW5kZXJUZXh0JiB0ZXh0LCBpbnQgaW5kZW50KQotewotICAgIGZvciAoSW5saW5l
VGV4dEJveCogYm94ID0gdGV4dC5maXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRU
ZXh0Qm94KCkpCi0gICAgICAgIHdyaXRlU1ZHSW5saW5lVGV4dEJveCh0cywgc3RhdGljX2Nhc3Q8
U1ZHSW5saW5lVGV4dEJveCo+KGJveCksIGluZGVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRl
U3RhbmRhcmRQcmVmaXgoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0
LCBpbnQgaW5kZW50KQotewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8
IG9iamVjdC5yZW5kZXJOYW1lKCk7Ci0KLSAgICBpZiAob2JqZWN0Lm5vZGUoKSkKLSAgICAgICAg
dHMgPDwgIiB7IiA8PCBvYmplY3Qubm9kZSgpLT5ub2RlTmFtZSgpIDw8ICJ9IjsKLX0KLQotc3Rh
dGljIHZvaWQgd3JpdGVDaGlsZHJlbihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0
JiBvYmplY3QsIGludCBpbmRlbnQpCi17Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0g
b2JqZWN0LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
Ci0gICAgICAgIHdyaXRlKHRzLCAqY2hpbGQsIGluZGVudCArIDEpOwotfQotCi1zdGF0aWMgaW5s
aW5lIFN0cmluZyBib3VuZGluZ0JveE1vZGVTdHJpbmcoYm9vbCBib3VuZGluZ0JveE1vZGUpCi17
Ci0gICAgcmV0dXJuIGJvdW5kaW5nQm94TW9kZSA/ICJvYmplY3RCb3VuZGluZ0JveCIgOiAidXNl
clNwYWNlT25Vc2UiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVDb21tb25HcmFkaWVu
dFByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1l
dGhvZCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFRyYW5zZm9ybSwgYm9vbCBib3Vu
ZGluZ0JveE1vZGUpCi17Ci0gICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiZ3JhZGllbnRVbml0
cyIsIGJvdW5kaW5nQm94TW9kZVN0cmluZyhib3VuZGluZ0JveE1vZGUpKTsKLQotICAgIGlmIChz
cHJlYWRNZXRob2QgIT0gU3ByZWFkTWV0aG9kUGFkKQotICAgICAgICB0cyA8PCAiIFtzcHJlYWRN
ZXRob2Q9IiA8PCBzcHJlYWRNZXRob2QgPDwgIl0iOwotCi0gICAgaWYgKCFncmFkaWVudFRyYW5z
Zm9ybS5pc0lkZW50aXR5KCkpCi0gICAgICAgIHRzIDw8ICIgW2dyYWRpZW50VHJhbnNmb3JtPSIg
PDwgZ3JhZGllbnRUcmFuc2Zvcm0gPDwgIl0iOwotfQotCi12b2lkIHdyaXRlU1ZHUmVzb3VyY2VD
b250YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBpbnQg
aW5kZW50KQotewotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIG9iamVjdCwgaW5kZW50KTsK
LQotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ob2JqZWN0Lm5v
ZGUoKSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZCA9IGVsZW1lbnQtPmdldElkQXR0cmli
dXRlKCk7Ci0gICAgd3JpdGVOYW1lQW5kUXVvdGVkVmFsdWUodHMsICJpZCIsIGlkKTsgICAgCi0K
LSAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVzb3VyY2UgPSBjb25zdF9jYXN0PFJl
bmRlck9iamVjdCY+KG9iamVjdCkudG9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcigpOwotICAg
IEFTU0VSVChyZXNvdXJjZSk7Ci0KLSAgICBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09
IE1hc2tlclJlc291cmNlVHlwZSkgewotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciog
bWFza2VyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqPihyZXNvdXJjZSk7
Ci0gICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgIm1hc2tVbml0cyIsIG1hc2tlci0+bWFz
a1VuaXRzKCkpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJtYXNrQ29udGVudFVu
aXRzIiwgbWFza2VyLT5tYXNrQ29udGVudFVuaXRzKCkpOwotICAgICAgICB0cyA8PCAiXG4iOwot
I2lmIEVOQUJMRShGSUxURVJTKQotICAgIH0gZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlw
ZSgpID09IEZpbHRlclJlc291cmNlVHlwZSkgewotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlciogZmlsdGVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqPihyZXNv
dXJjZSk7Ci0gICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImZpbHRlclVuaXRzIiwgZmls
dGVyLT5maWx0ZXJVbml0cygpKTsKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAicHJp
bWl0aXZlVW5pdHMiLCBmaWx0ZXItPnByaW1pdGl2ZVVuaXRzKCkpOwotICAgICAgICB0cyA8PCAi
XG4iOwotICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNlaG9sZGVyIGZpbHRlciB3aGljaCBpcyBw
YXNzZWQgdG8gdGhlIGJ1aWxkZXIuCi0gICAgICAgIEZsb2F0UmVjdCBkdW1teVJlY3Q7Ci0gICAg
ICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoQWZm
aW5lVHJhbnNmb3JtKCksIGR1bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIHRydWUpOwot
ICAgICAgICBpZiAoUmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+IGJ1aWxkZXIgPSBmaWx0ZXItPmJ1
aWxkUHJpbWl0aXZlcyhkdW1teUZpbHRlci5nZXQoKSkpIHsKLSAgICAgICAgICAgIGlmIChGaWx0
ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBidWlsZGVyLT5sYXN0RWZmZWN0KCkpCi0gICAgICAgICAg
ICAgICAgbGFzdEVmZmVjdC0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7
Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0gZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlw
ZSgpID09IENsaXBwZXJSZXNvdXJjZVR5cGUpIHsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyKiBjbGlwcGVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKj4o
cmVzb3VyY2UpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJjbGlwUGF0aFVuaXRz
IiwgY2xpcHBlci0+Y2xpcFBhdGhVbml0cygpKTsKLSAgICAgICAgdHMgPDwgIlxuIjsKLSAgICB9
IGVsc2UgaWYgKHJlc291cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBNYXJrZXJSZXNvdXJjZVR5cGUp
IHsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlciA9IHN0YXRpY19jYXN0
PFJlbmRlclNWR1Jlc291cmNlTWFya2VyKj4ocmVzb3VyY2UpOwotICAgICAgICB3cml0ZU5hbWVW
YWx1ZVBhaXIodHMsICJtYXJrZXJVbml0cyIsIG1hcmtlci0+bWFya2VyVW5pdHMoKSk7Ci0gICAg
ICAgIHRzIDw8ICIgW3JlZiBhdCAiIDw8IG1hcmtlci0+cmVmZXJlbmNlUG9pbnQoKSA8PCAiXSI7
Ci0gICAgICAgIHRzIDw8ICIgW2FuZ2xlPSI7Ci0gICAgICAgIGlmIChtYXJrZXItPmFuZ2xlKCkg
PT0gLTEpCi0gICAgICAgICAgICB0cyA8PCAiYXV0byIgPDwgIl1cbiI7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHRzIDw8IG1hcmtlci0+YW5nbGUoKSA8PCAiXVxuIjsKLSAgICB9IGVsc2Ug
aWYgKHJlc291cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBQYXR0ZXJuUmVzb3VyY2VUeXBlKSB7Ci0g
ICAgICAgIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybiogcGF0dGVybiA9IHN0YXRpY19jYXN0PFJl
bmRlclNWR1Jlc291cmNlUGF0dGVybio+KHJlc291cmNlKTsKLQotICAgICAgICAvLyBEdW1wIGZp
bmFsIHJlc3VsdHMgdGhhdCBhcmUgdXNlZCBmb3IgcmVuZGVyaW5nLiBObyB1c2UgaW4gYXNraW5n
IFNWR1BhdHRlcm5FbGVtZW50IGZvciBpdHMgcGF0dGVyblVuaXRzKCksIGFzIGl0IG1heQotICAg
ICAgICAvLyBsaW5rIHRvIG90aGVyIHBhdHRlcm5zIHVzaW5nIHhsaW5rOmhyZWYsIHdlIG5lZWQg
dG8gYnVpbGQgdGhlIGZ1bGwgaW5oZXJpdGFuY2UgY2hhaW4sIGFrYS4gY29sbGVjdFBhdHRlcm5Q
cm9wZXJ0aWVzKCkKLSAgICAgICAgUGF0dGVybkF0dHJpYnV0ZXMgYXR0cmlidXRlczsKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQqPihwYXR0ZXJuLT5ub2RlKCkpLT5jb2xs
ZWN0UGF0dGVybkF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7Ci0KLSAgICAgICAgd3JpdGVOYW1lVmFs
dWVQYWlyKHRzLCAicGF0dGVyblVuaXRzIiwgYm91bmRpbmdCb3hNb2RlU3RyaW5nKGF0dHJpYnV0
ZXMuYm91bmRpbmdCb3hNb2RlKCkpKTsKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAi
cGF0dGVybkNvbnRlbnRVbml0cyIsIGJvdW5kaW5nQm94TW9kZVN0cmluZyhhdHRyaWJ1dGVzLmJv
dW5kaW5nQm94TW9kZUNvbnRlbnQoKSkpOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm0gPSBhdHRyaWJ1dGVzLnBhdHRlcm5UcmFuc2Zvcm0oKTsKLSAgICAgICAgaWYgKCF0cmFu
c2Zvcm0uaXNJZGVudGl0eSgpKQotICAgICAgICAgICAgdHMgPDwgIiBbcGF0dGVyblRyYW5zZm9y
bT0iIDw8IHRyYW5zZm9ybSA8PCAiXSI7Ci0gICAgICAgIHRzIDw8ICJcbiI7Ci0gICAgfSBlbHNl
IGlmIChyZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5
cGUpIHsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudCogZ3JhZGllbnQg
PSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50Kj4ocmVzb3VyY2Up
OwotCi0gICAgICAgIC8vIER1bXAgZmluYWwgcmVzdWx0cyB0aGF0IGFyZSB1c2VkIGZvciByZW5k
ZXJpbmcuIE5vIHVzZSBpbiBhc2tpbmcgU1ZHR3JhZGllbnRFbGVtZW50IGZvciBpdHMgZ3JhZGll
bnRVbml0cygpLCBhcyBpdCBtYXkKLSAgICAgICAgLy8gbGluayB0byBvdGhlciBncmFkaWVudHMg
dXNpbmcgeGxpbms6aHJlZiwgd2UgbmVlZCB0byBidWlsZCB0aGUgZnVsbCBpbmhlcml0YW5jZSBj
aGFpbiwgYWthLiBjb2xsZWN0R3JhZGllbnRQcm9wZXJ0aWVzKCkKLSAgICAgICAgU1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50KiBsaW5lYXJHcmFkaWVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdM
aW5lYXJHcmFkaWVudEVsZW1lbnQqPihncmFkaWVudC0+bm9kZSgpKTsKLQotICAgICAgICBMaW5l
YXJHcmFkaWVudEF0dHJpYnV0ZXMgYXR0cmlidXRlczsKLSAgICAgICAgbGluZWFyR3JhZGllbnRF
bGVtZW50LT5jb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgICAgICB3
cml0ZUNvbW1vbkdyYWRpZW50UHJvcGVydGllcyh0cywgYXR0cmlidXRlcy5zcHJlYWRNZXRob2Qo
KSwgYXR0cmlidXRlcy5ncmFkaWVudFRyYW5zZm9ybSgpLCBhdHRyaWJ1dGVzLmJvdW5kaW5nQm94
TW9kZSgpKTsKLQotICAgICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQ7Ci0gICAgICAgIEZsb2F0
UG9pbnQgZW5kUG9pbnQ7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50RWxlbWVudC0+Y2FsY3VsYXRl
U3RhcnRFbmRQb2ludHMoYXR0cmlidXRlcywgc3RhcnRQb2ludCwgZW5kUG9pbnQpOwotCi0gICAg
ICAgIHRzIDw8ICIgW3N0YXJ0PSIgPDwgc3RhcnRQb2ludCA8PCAiXSBbZW5kPSIgPDwgZW5kUG9p
bnQgPDwgIl1cbiI7Ci0gICAgfSAgZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09
IFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBlKSB7Ci0gICAgICAgIFJlbmRlclNWR1Jlc291cmNl
UmFkaWFsR3JhZGllbnQqIGdyYWRpZW50ID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VS
YWRpYWxHcmFkaWVudCo+KHJlc291cmNlKTsKLQotICAgICAgICAvLyBEdW1wIGZpbmFsIHJlc3Vs
dHMgdGhhdCBhcmUgdXNlZCBmb3IgcmVuZGVyaW5nLiBObyB1c2UgaW4gYXNraW5nIFNWR0dyYWRp
ZW50RWxlbWVudCBmb3IgaXRzIGdyYWRpZW50VW5pdHMoKSwgYXMgaXQgbWF5Ci0gICAgICAgIC8v
IGxpbmsgdG8gb3RoZXIgZ3JhZGllbnRzIHVzaW5nIHhsaW5rOmhyZWYsIHdlIG5lZWQgdG8gYnVp
bGQgdGhlIGZ1bGwgaW5oZXJpdGFuY2UgY2hhaW4sIGFrYS4gY29sbGVjdEdyYWRpZW50UHJvcGVy
dGllcygpCi0gICAgICAgIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCogcmFkaWFsR3JhZGllbnRF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnQt
Pm5vZGUoKSk7Ci0KLSAgICAgICAgUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7
Ci0gICAgICAgIHJhZGlhbEdyYWRpZW50RWxlbWVudC0+Y29sbGVjdEdyYWRpZW50QXR0cmlidXRl
cyhhdHRyaWJ1dGVzKTsKLSAgICAgICAgd3JpdGVDb21tb25HcmFkaWVudFByb3BlcnRpZXModHMs
IGF0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCksIGF0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0o
KSwgYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSk7Ci0KLSAgICAgICAgRmxvYXRQb2ludCBm
b2NhbFBvaW50OwotICAgICAgICBGbG9hdFBvaW50IGNlbnRlclBvaW50OwotICAgICAgICBmbG9h
dCByYWRpdXM7Ci0gICAgICAgIHJhZGlhbEdyYWRpZW50RWxlbWVudC0+Y2FsY3VsYXRlRm9jYWxD
ZW50ZXJQb2ludHNBbmRSYWRpdXMoYXR0cmlidXRlcywgZm9jYWxQb2ludCwgY2VudGVyUG9pbnQs
IHJhZGl1cyk7Ci0KLSAgICAgICAgdHMgPDwgIiBbY2VudGVyPSIgPDwgY2VudGVyUG9pbnQgPDwg
Il0gW2ZvY2FsPSIgPDwgZm9jYWxQb2ludCA8PCAiXSBbcmFkaXVzPSIgPDwgcmFkaXVzIDw8ICJd
XG4iOwotICAgIH0gZWxzZQotICAgICAgICB0cyA8PCAiXG4iOwotICAgIHdyaXRlQ2hpbGRyZW4o
dHMsIG9iamVjdCwgaW5kZW50KTsKLX0KLQotdm9pZCB3cml0ZVNWR0NvbnRhaW5lcihUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBjb250YWluZXIsIGludCBpbmRlbnQpCi17Ci0g
ICAgLy8gQ3VycmVudGx5IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlIGhhcyBubyBt
ZWFuaW5nZnVsIG91dHB1dC4KLSAgICBpZiAoY29udGFpbmVyLmlzU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMs
IGNvbnRhaW5lciwgaW5kZW50KTsKLSAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMsIGNvbnRh
aW5lcik7Ci0gICAgdHMgPDwgIlxuIjsKLSAgICB3cml0ZVJlc291cmNlcyh0cywgY29udGFpbmVy
LCBpbmRlbnQpOwotICAgIHdyaXRlQ2hpbGRyZW4odHMsIGNvbnRhaW5lciwgaW5kZW50KTsKLX0K
LQotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUm9vdCYgcm9vdCwg
aW50IGluZGVudCkKLXsKLSAgICB3cml0ZVN0YW5kYXJkUHJlZml4KHRzLCByb290LCBpbmRlbnQp
OwotICAgIHRzIDw8IHJvb3QgPDwgIlxuIjsKLSAgICB3cml0ZUNoaWxkcmVuKHRzLCByb290LCBp
bmRlbnQpOwotfQotCi12b2lkIHdyaXRlU1ZHVGV4dChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyQmxvY2smIHRleHQsIGludCBpbmRlbnQpCi17Ci0gICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0
cywgdGV4dCwgaW5kZW50KTsKLSAgICB3cml0ZVJlbmRlclNWR1RleHRCb3godHMsIHRleHQpOwot
ICAgIHRzIDw8ICJcbiI7Ci0gICAgd3JpdGVSZXNvdXJjZXModHMsIHRleHQsIGluZGVudCk7Ci0g
ICAgd3JpdGVDaGlsZHJlbih0cywgdGV4dCwgaW5kZW50KTsKLX0KLQotdm9pZCB3cml0ZVNWR0lu
bGluZVRleHQoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIHRleHQsIGludCBpbmRl
bnQpCi17Ci0gICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgdGV4dCwgaW5kZW50KTsKLQotICAg
IC8vIFdoeSBub3QganVzdCBsaW5lc0JvdW5kaW5nQm94KCk/Ci0gICAgdHMgPDwgIiAiIDw8IEZs
b2F0UmVjdCh0ZXh0LmZpcnN0UnVuT3JpZ2luKCksIHRleHQubGluZXNCb3VuZGluZ0JveCgpLnNp
emUoKSkgPDwgIlxuIjsKLSAgICB3cml0ZVJlc291cmNlcyh0cywgdGV4dCwgaW5kZW50KTsKLSAg
ICB3cml0ZVNWR0lubGluZVRleHRCb3hlcyh0cywgdGV4dCwgaW5kZW50KTsKLX0KLQotdm9pZCB3
cml0ZVNWR0ltYWdlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2Us
IGludCBpbmRlbnQpCi17Ci0gICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgaW1hZ2UsIGluZGVu
dCk7Ci0gICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCBpbWFnZSk7Ci0gICAgdHMgPDwgIlxu
IjsKLSAgICB3cml0ZVJlc291cmNlcyh0cywgaW1hZ2UsIGluZGVudCk7Ci19Ci0KLXZvaWQgd3Jp
dGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1BhdGgmIHBhdGgsIGludCBpbmRlbnQp
Ci17Ci0gICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgcGF0aCwgaW5kZW50KTsKLSAgICB0cyA8
PCBwYXRoIDw8ICJcbiI7Ci0gICAgd3JpdGVSZXNvdXJjZXModHMsIHBhdGgsIGluZGVudCk7Ci19
Ci0KLXZvaWQgd3JpdGVTVkdHcmFkaWVudFN0b3AoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRl
clNWR0dyYWRpZW50U3RvcCYgc3RvcCwgaW50IGluZGVudCkKLXsKLSAgICB3cml0ZVN0YW5kYXJk
UHJlZml4KHRzLCBzdG9wLCBpbmRlbnQpOwotCi0gICAgU1ZHU3RvcEVsZW1lbnQqIHN0b3BFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3RvcEVsZW1lbnQqPihzdG9wLm5vZGUoKSk7Ci0gICAgQVNT
RVJUKHN0b3BFbGVtZW50KTsKLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0b3Auc3R5bGUo
KTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0cyA8PCAiIFtvZmZz
ZXQ9IiA8PCBzdG9wRWxlbWVudC0+b2Zmc2V0KCkgPDwgIl0gW2NvbG9yPSIgPDwgc3RvcEVsZW1l
bnQtPnN0b3BDb2xvckluY2x1ZGluZ09wYWNpdHkoKSA8PCAiXVxuIjsKLX0KLQotdm9pZCB3cml0
ZVJlc291cmNlcyhUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGlu
dCBpbmRlbnQpCi17Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LnN0eWxl
KCk7Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxl
KCk7Ci0KLSAgICAvLyBGSVhNRTogV2Ugd2FudCB0byB1c2UgU1ZHUmVzb3VyY2VzQ2FjaGUgdG8g
ZGV0ZXJtaW5lIHdoaWNoIHJlc291cmNlcyBhcmUgcHJlc2VudCwgaW5zdGVhZCBvZiBxdWVyaW5n
IHRoZSByZXNvdXJjZSA8LT4gaWQgY2FjaGUuCi0gICAgLy8gRm9yIG5vdyBsZWF2ZSB0aGUgRFJU
IG91dHB1dCBhcyBpcywgYnV0IGxhdGVyIG9uIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBzbyBjeWNs
ZXMgYXJlIHByb3Blcmx5IGlnbm9yZWQgaW4gdGhlIERSVCBvdXRwdXQuCi0gICAgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJlciA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4ob2JqZWN0KTsKLSAgICBp
ZiAoIXN2Z1N0eWxlLT5tYXNrZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAo
UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJ
ZDxSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcj4ob2JqZWN0LmRvY3VtZW50KCksIHN2Z1N0eWxlLT5t
YXNrZXJSZXNvdXJjZSgpKSkgewotICAgICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7
Ci0gICAgICAgICAgICB0cyA8PCAiICI7Ci0gICAgICAgICAgICB3cml0ZU5hbWVBbmRRdW90ZWRW
YWx1ZSh0cywgIm1hc2tlciIsIHN2Z1N0eWxlLT5tYXNrZXJSZXNvdXJjZSgpKTsKLSAgICAgICAg
ICAgIHRzIDw8ICIgIjsKLSAgICAgICAgICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsICptYXNr
ZXIsIDApOwotICAgICAgICAgICAgdHMgPDwgIiAiIDw8IG1hc2tlci0+cmVzb3VyY2VCb3VuZGlu
Z0JveCgmcmVuZGVyZXIpIDw8ICJcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFzdmdT
dHlsZS0+Y2xpcHBlclJlc291cmNlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyPihvYmplY3QuZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmNsaXBw
ZXJSZXNvdXJjZSgpKSkgewotICAgICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0g
ICAgICAgICAgICB0cyA8PCAiICI7Ci0gICAgICAgICAgICB3cml0ZU5hbWVBbmRRdW90ZWRWYWx1
ZSh0cywgImNsaXBQYXRoIiwgc3ZnU3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgpKTsKLSAgICAgICAg
ICAgIHRzIDw8ICIgIjsKLSAgICAgICAgICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsICpjbGlw
cGVyLCAwKTsKLSAgICAgICAgICAgIHRzIDw8ICIgIiA8PCBjbGlwcGVyLT5yZXNvdXJjZUJvdW5k
aW5nQm94KCZyZW5kZXJlcikgPDwgIlxuIjsKLSAgICAgICAgfQotICAgIH0KLSNpZiBFTkFCTEUo
RklMVEVSUykKLSAgICBpZiAoIXN2Z1N0eWxlLT5maWx0ZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkg
ewotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IGdldFJlbmRl
clNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcj4ob2JqZWN0LmRvY3VtZW50
KCksIHN2Z1N0eWxlLT5maWx0ZXJSZXNvdXJjZSgpKSkgewotICAgICAgICAgICAgd3JpdGVJbmRl
bnQodHMsIGluZGVudCk7Ci0gICAgICAgICAgICB0cyA8PCAiICI7Ci0gICAgICAgICAgICB3cml0
ZU5hbWVBbmRRdW90ZWRWYWx1ZSh0cywgImZpbHRlciIsIHN2Z1N0eWxlLT5maWx0ZXJSZXNvdXJj
ZSgpKTsKLSAgICAgICAgICAgIHRzIDw8ICIgIjsKLSAgICAgICAgICAgIHdyaXRlU3RhbmRhcmRQ
cmVmaXgodHMsICpmaWx0ZXIsIDApOwotICAgICAgICAgICAgdHMgPDwgIiAiIDw8IGZpbHRlci0+
cmVzb3VyY2VCb3VuZGluZ0JveCgmcmVuZGVyZXIpIDw8ICJcbiI7Ci0gICAgICAgIH0KLSAgICB9
Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVB
c1RleHQuaAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
UmVuZGVyVHJlZUFzVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgU1ZHUmVuZGVyVHJlZUFzVGV4dF9oCi0jZGVmaW5lIFNW
R1JlbmRlclRyZWVBc1RleHRfaAotCi0jaWYgRU5BQkxFKFNWRykKLQotI2luY2x1ZGUgIlRleHRT
dHJlYW0uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDb2xvcjsKLWNsYXNzIEZs
b2F0UmVjdDsKLWNsYXNzIEZsb2F0U2l6ZTsKLWNsYXNzIE5vZGU7Ci1jbGFzcyBSZW5kZXJCbG9j
azsKLWNsYXNzIFJlbmRlckltYWdlOwotY2xhc3MgUmVuZGVyT2JqZWN0OwotY2xhc3MgUmVuZGVy
U1ZHR3JhZGllbnRTdG9wOwotY2xhc3MgUmVuZGVyU1ZHSW1hZ2U7Ci1jbGFzcyBSZW5kZXJTVkdQ
YXRoOwotY2xhc3MgUmVuZGVyU1ZHUm9vdDsKLWNsYXNzIFJlbmRlclRleHQ7Ci1jbGFzcyBBZmZp
bmVUcmFuc2Zvcm07Ci1jbGFzcyBTVkdVbml0VHlwZXM7Ci0KLS8vIGZ1bmN0aW9ucyB1c2VkIGJ5
IHRoZSBtYWluIFJlbmRlclRyZWVBc1RleHQgY29kZQotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwg
Y29uc3QgUmVuZGVyU1ZHUGF0aCYsIGludCBpbmRlbnQpOwotdm9pZCB3cml0ZShUZXh0U3RyZWFt
JiwgY29uc3QgUmVuZGVyU1ZHUm9vdCYsIGludCBpbmRlbnQpOwotdm9pZCB3cml0ZVNWR0dyYWRp
ZW50U3RvcChUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHR3JhZGllbnRTdG9wJiwgaW50IGlu
ZGVudCk7Ci12b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYsIGNvbnN0
IFJlbmRlck9iamVjdCYsIGludCBpbmRlbnQpOwotdm9pZCB3cml0ZVNWR0NvbnRhaW5lcihUZXh0
U3RyZWFtJiwgY29uc3QgUmVuZGVyT2JqZWN0JiwgaW50IGluZGVudCk7Ci12b2lkIHdyaXRlU1ZH
SW1hZ2UoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0ltYWdlJiwgaW50IGluZGVudCk7Ci12
b2lkIHdyaXRlU1ZHSW5saW5lVGV4dChUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyVGV4dCYsIGlu
dCBpbmRlbnQpOwotdm9pZCB3cml0ZVNWR1RleHQoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlckJs
b2NrJiwgaW50IGluZGVudCk7Ci12b2lkIHdyaXRlUmVzb3VyY2VzKFRleHRTdHJlYW0mLCBjb25z
dCBSZW5kZXJPYmplY3QmLCBpbnQgaW5kZW50KTsKLQotLy8gaGVscGVyIG9wZXJhdG9ycyBkZWZp
bmVkIHVzZWQgaW4gdmFyaW91cyBjbGFzc2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0cmVlLgotVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7
Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBDb2xvciYpOwotVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0KLS8v
IGhlbHBlciBvcGVyYXRvcnMgc3BlY2lmaWMgdG8gZHVtcGluZyB0aGUgcmVuZGVyIHRyZWUuIHRo
ZXNlIGFyZSB1c2VkIGluIHZhcmlvdXMgY2xhc3NlcyB0byBkdW1wIHRoZSByZW5kZXIgdHJlZQot
Ly8gdGhlc2UgY291bGQgYmUgZGVmaW5lZCBpbiBzZXBhcmF0ZSBuYW1lc3BhY2UgdG8gYXZvaWQg
bWF0Y2hpbmcgdGhlc2UgZ2VuZXJpYyBzaWduYXR1cmVzIHVuaW50ZW50aW9uYWxseS4KLQotdGVt
cGxhdGU8dHlwZW5hbWUgSXRlbT4KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFZlY3RvcjxJdGVtKj4mIHYpCi17Ci0gICAgdHMgPDwgIlsiOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgdHMgPDwgKnZb
aV07Ci0gICAgICAgIGlmIChpIDwgdi5zaXplKCkgLSAxKQotICAgICAgICAgICAgdHMgPDwgIiwg
IjsKLSAgICB9Ci0KLSAgICB0cyA8PCAiXSI7Ci0gICAgcmV0dXJuIHRzOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBQb2ludGVyPgotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgUG9pbnRlciogdCkKLXsKLSAgICB0cyA8PCByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
KTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShTVkcpCi0KLSNlbmRpZiAvLyBTVkdSZW5kZXJUcmVlQXNUZXh0X2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuY3BwCShyZXZpc2lvbiA3NTM0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDY4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKLSNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdO
YW1lcy5oIgotI2luY2x1ZGUgIlNWR1BhaW50LmgiCi0jaW5jbHVkZSAiU1ZHUGF0dGVybkVsZW1l
bnQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVy
ZW5jZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNWR1Jlc291cmNlczo6U1ZHUmVzb3Vy
Y2VzKCkKLSAgICA6IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEoMCkKLSAgICAsIG1fbWFya2Vy
RGF0YSgwKQotICAgICwgbV9maWxsU3Ryb2tlRGF0YSgwKQotICAgICwgbV9saW5rZWRSZXNvdXJj
ZSgwKQotewotfQotCi1zdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsaXBwZXJG
aWx0ZXJNYXNrZXJUYWdzKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8QXRv
bWljU3RyaW5nSW1wbCo+LCBzX3RhZ0xpc3QsICgpKTsKLSAgICBpZiAoc190YWdMaXN0LmlzRW1w
dHkoKSkgewotICAgICAgICAvLyAiY29udGFpbmVyIGVsZW1lbnRzIjogaHR0cDovL3d3dy53My5v
cmcvVFIvU1ZHMTEvaW50cm8uaHRtbCNUZXJtQ29udGFpbmVyRWxlbWVudAotICAgICAgICAvLyAi
Z3JhcGhpY3MgZWxlbWVudHMiIDogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8uaHRt
bCNUZXJtR3JhcGhpY3NFbGVtZW50Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmFU
YWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6
Y2lyY2xlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZH
TmFtZXM6OmVsbGlwc2VUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0
LmFkZChTVkdOYW1lczo6Z2x5cGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190
YWdMaXN0LmFkZChTVkdOYW1lczo6Z1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBz
X3RhZ0xpc3QuYWRkKFNWR05hbWVzOjppbWFnZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAg
ICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7
Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6Om1hcmtlclRhZy5sb2NhbE5hbWUoKS5p
bXBsKCkpOwotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjptYXNrVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6Om1pc3NpbmdfZ2x5
cGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1l
czo6cGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNW
R05hbWVzOjpwb2x5Z29uVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlz
dC5hZGQoU1ZHTmFtZXM6OnBvbHlsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAg
IHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnJlY3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAg
ICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6c3ZnVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7
Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnRleHRUYWcubG9jYWxOYW1lKCkuaW1w
bCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6dXNlVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7Ci0KLSAgICAgICAgLy8gTm90IGxpc3RlZCBpbiB0aGUgZGVmaW5pdGlvbnMgaXMg
dGhlIGNsaXBQYXRoIGVsZW1lbnQsIHRoZSBTVkcgc3BlYyBzYXlzIHRob3VnaDoKLSAgICAgICAg
Ly8gVGhlICJjbGlwUGF0aCIgZWxlbWVudCBvciBhbnkgb2YgaXRzIGNoaWxkcmVuIGNhbiBzcGVj
aWZ5IHByb3BlcnR5ICJjbGlwLXBhdGgiLgotICAgICAgICAvLyBTbyB3ZSBoYXZlIHRvIGFkZCBj
bGlwUGF0aFRhZyBoZXJlLCBvdGhlcndoaXNlIGNsaXAtcGF0aCBvbiBjbGlwUGF0aCB3aWxsIGZh
aWwuCi0gICAgICAgIC8vIChBbHJlYWR5IG1haWxlZCBTVkcgV0csIHdhaXRpbmcgZm9yIGEgc29s
dXRpb24pCi0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmNsaXBQYXRoVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSk7Ci0KLSAgICAgICAgLy8gTm90IGxpc3RlZCBpbiB0aGUgZGVmaW5pdGlv
bnMgYXJlIHRoZSB0ZXh0IGNvbnRlbnQgZWxlbWVudHMsIHRob3VnaCBmaWx0ZXIvY2xpcHBlci9t
YXNrZXIgb24gdHNwYW4vdGV4dC8uLiBpcyBhbGxvd2VkLgotICAgICAgICAvLyAoQWxyZWFkeSBt
YWlsZWQgU1ZHIFdHLCB3YWl0aW5nIGZvciBhIHNvbHV0aW9uKQotICAgICAgICBzX3RhZ0xpc3Qu
YWRkKFNWR05hbWVzOjphbHRHbHlwaFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBz
X3RhZ0xpc3QuYWRkKFNWR05hbWVzOjp0ZXh0UGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwot
ICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjp0cmVmVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnRzcGFuVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7Ci0KLSAgICAgICAgLy8gRWxlbWVudHMgdGhhdCB3ZSBpZ25vcmUsIGFzIGl0IGRv
ZXNuJ3QgbWFrZSBhbnkgc2Vuc2UuCi0gICAgICAgIC8vIGRlZnMsIHBhdHRlcm4sIHN3aXRjaCAo
RklYTUU6IE1haWwgU1ZHIFdHIGFib3V0IHRoZXNlKQotICAgICAgICAvLyBzeW1ib2wgKGlzIGNv
bnZlcnRlZCB0byBhIHN2ZyBlbGVtZW50LCB3aGVuIHJlZmVyZW5jZWQgYnkgdXNlLCB3ZSBjYW4g
c2FmZWx5IGlnbm9yZSBpdC4pCi0gICAgfQotCi0gICAgcmV0dXJuIHNfdGFnTGlzdDsKLX0KLQot
c3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBtYXJrZXJUYWdzKCkKLXsKLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+LCBzX3RhZ0xpc3Qs
ICgpKTsKLSAgICBpZiAoc190YWdMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBzX3RhZ0xpc3Qu
YWRkKFNWR05hbWVzOjpsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFn
TGlzdC5hZGQoU1ZHTmFtZXM6OnBhdGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAg
c190YWdMaXN0LmFkZChTVkdOYW1lczo6cG9seWdvblRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwot
ICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpwb2x5bGluZVRhZy5sb2NhbE5hbWUoKS5p
bXBsKCkpOwotICAgIH0KLQotICAgIHJldHVybiBzX3RhZ0xpc3Q7Ci19Ci0KLXN0YXRpYyBIYXNo
U2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgZmlsbEFuZFN0cm9rZVRhZ3MoKQotewotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4sIHNfdGFnTGlzdCwgKCkp
OwotICAgIGlmIChzX3RhZ0xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQo
U1ZHTmFtZXM6OmFsdEdseXBoVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFn
TGlzdC5hZGQoU1ZHTmFtZXM6OmNpcmNsZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAg
ICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjplbGxpcHNlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7
Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmxpbmVUYWcubG9jYWxOYW1lKCkuaW1w
bCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6cGF0aFRhZy5sb2NhbE5hbWUo
KS5pbXBsKCkpOwotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpwb2x5Z29uVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnBvbHls
aW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFt
ZXM6OnJlY3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChT
VkdOYW1lczo6dGV4dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBzX3RhZ0xpc3Qu
YWRkKFNWR05hbWVzOjp0ZXh0UGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBz
X3RhZ0xpc3QuYWRkKFNWR05hbWVzOjp0cmVmVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAg
ICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnRzcGFuVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHNfdGFnTGlzdDsKLX0KLQotc3RhdGljIEhhc2hTZXQ8QXRv
bWljU3RyaW5nSW1wbCo+JiBjaGFpbmFibGVSZXNvdXJjZVRhZ3MoKQotewotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4sIHNfdGFnTGlzdCwgKCkpOwot
ICAgIGlmIChzX3RhZ0xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZH
TmFtZXM6OmxpbmVhckdyYWRpZW50VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNf
dGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmZpbHRlclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAg
ICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpwYXR0ZXJuVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnJhZGlhbEdyYWRpZW50VGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNfdGFnTGlzdDsKLX0KLQot
c3RhdGljIGlubGluZSBTdHJpbmcgdGFyZ2V0UmVmZXJlbmNlRnJvbVJlc291cmNlKFNWR0VsZW1l
bnQqIGVsZW1lbnQpCi17Ci0gICAgU3RyaW5nIHRhcmdldDsKLSAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShTVkdOYW1lczo6cGF0dGVyblRhZykpCi0gICAgICAgIHRhcmdldCA9IHN0YXRpY19j
YXN0PFNWR1BhdHRlcm5FbGVtZW50Kj4oZWxlbWVudCktPmhyZWYoKTsKLSAgICBlbHNlIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpsaW5lYXJHcmFkaWVudFRhZykgfHwgZWxlbWVu
dC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cmFkaWFsR3JhZGllbnRUYWcpKQotICAgICAgICB0YXJn
ZXQgPSBzdGF0aWNfY2FzdDxTVkdHcmFkaWVudEVsZW1lbnQqPihlbGVtZW50KS0+aHJlZigpOwot
I2lmIEVOQUJMRShGSUxURVJTKQotICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZH
TmFtZXM6OmZpbHRlclRhZykpCi0gICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRl
ckVsZW1lbnQqPihlbGVtZW50KS0+aHJlZigpOwotI2VuZGlmCi0gICAgZWxzZQotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIHJldHVybiBTVkdVUklSZWZlcmVuY2U6OmdldFRh
cmdldCh0YXJnZXQpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyKiBwYWludGluZ1Jlc291cmNlRnJvbVNWR1BhaW50KERvY3VtZW50KiBkb2N1bWVudCwgU1ZH
UGFpbnQqIHBhaW50LCBBdG9taWNTdHJpbmcmIGlkLCBib29sJiBoYXNQZW5kaW5nUmVzb3VyY2Up
Ci17Ci0gICAgQVNTRVJUKHBhaW50KTsKLQotICAgIFNWR1BhaW50OjpTVkdQYWludFR5cGUgcGFp
bnRUeXBlID0gcGFpbnQtPnBhaW50VHlwZSgpOwotICAgIGlmIChwYWludFR5cGUgIT0gU1ZHUGFp
bnQ6OlNWR19QQUlOVFRZUEVfVVJJICYmIHBhaW50VHlwZSAhPSBTVkdQYWludDo6U1ZHX1BBSU5U
VFlQRV9VUklfUkdCQ09MT1IpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWQgPSBTVkdVUklS
ZWZlcmVuY2U6OmdldFRhcmdldChwYWludC0+dXJpKCkpOwotICAgIFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyKiBjb250YWluZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lckJ5SWQo
ZG9jdW1lbnQsIGlkKTsKLSAgICBpZiAoIWNvbnRhaW5lcikgewotICAgICAgICBoYXNQZW5kaW5n
UmVzb3VyY2UgPSB0cnVlOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZW5kZXJT
VkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlID0gY29udGFpbmVyLT5yZXNvdXJjZVR5cGUoKTsK
LSAgICBpZiAocmVzb3VyY2VUeXBlICE9IFBhdHRlcm5SZXNvdXJjZVR5cGUgJiYgcmVzb3VyY2VU
eXBlICE9IExpbmVhckdyYWRpZW50UmVzb3VyY2VUeXBlICYmIHJlc291cmNlVHlwZSAhPSBSYWRp
YWxHcmFkaWVudFJlc291cmNlVHlwZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4g
Y29udGFpbmVyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJQZW5kaW5nUmVzb3Vy
Y2UoU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25zLCBjb25zdCBBdG9taWNTdHJpbmcm
IGlkLCBTVkdFbGVtZW50KiBlbGVtZW50KQotewotICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBp
ZiAoIWVsZW1lbnQtPmlzU3R5bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGV4dGVuc2lv
bnMtPmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+
KGVsZW1lbnQpKTsKLX0KLQotYm9vbCBTVkdSZXNvdXJjZXM6OmJ1aWxkQ2FjaGVkUmVzb3VyY2Vz
KGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUp
Ci17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAgIE5vZGUq
IG5vZGUgPSBvYmplY3QtPm5vZGUoKTsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5v
ZGUtPmlzU1ZHRWxlbWVudCgpKTsKLQotICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdFbGVtZW50Kj4obm9kZSk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBvYmplY3QtPmRvY3VtZW50KCk7
Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLQotICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0
ZW5zaW9ucyA9IGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7Ci0gICAgQVNTRVJUKGV4
dGVuc2lvbnMpOwotCi0gICAgQXRvbWljU3RyaW5nSW1wbCogdGFnTmFtZUltcGwgPSBlbGVtZW50
LT50YWdRTmFtZSgpLmxvY2FsTmFtZSgpLmltcGwoKTsKLSAgICBpZiAoIXRhZ05hbWVJbXBsKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGZvdW5kUmVzb3VyY2VzID0gZmFsc2U7
Ci0gICAgaWYgKGNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkuY29udGFpbnModGFnTmFtZUltcGwp
KSB7Ci0gICAgICAgIGlmIChzdHlsZS0+aGFzQ2xpcHBlcigpKSB7Ci0gICAgICAgICAgICBBdG9t
aWNTdHJpbmcgaWQoc3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgpKTsKLSAgICAgICAgICAgIGlmIChz
ZXRDbGlwcGVyKGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXI+KGRvY3VtZW50LCBpZCkpKQotICAgICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1
ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNv
dXJjZShleHRlbnNpb25zLCBpZCwgZWxlbWVudCk7Ci0gICAgICAgIH0KLQotI2lmIEVOQUJMRShG
SUxURVJTKQotICAgICAgICBpZiAoc3R5bGUtPmhhc0ZpbHRlcigpKSB7Ci0gICAgICAgICAgICBB
dG9taWNTdHJpbmcgaWQoc3R5bGUtPmZpbHRlclJlc291cmNlKCkpOwotICAgICAgICAgICAgaWYg
KHNldEZpbHRlcihnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI+KGRvY3VtZW50LCBpZCkpKQotICAgICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1
ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNv
dXJjZShleHRlbnNpb25zLCBpZCwgZWxlbWVudCk7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAg
ICAgIGlmIChzdHlsZS0+aGFzTWFza2VyKCkpIHsKLSAgICAgICAgICAgIEF0b21pY1N0cmluZyBp
ZChzdHlsZS0+bWFza2VyUmVzb3VyY2UoKSk7Ci0gICAgICAgICAgICBpZiAoc2V0TWFza2VyKGdl
dFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcj4oZG9jdW1lbnQs
IGlkKSkpCi0gICAgICAgICAgICAgICAgZm91bmRSZXNvdXJjZXMgPSB0cnVlOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKGV4dGVuc2lv
bnMsIGlkLCBlbGVtZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtYXJrZXJUYWdz
KCkuY29udGFpbnModGFnTmFtZUltcGwpICYmIHN0eWxlLT5oYXNNYXJrZXJzKCkpIHsKLSAgICAg
ICAgQXRvbWljU3RyaW5nIG1hcmtlclN0YXJ0SWQoc3R5bGUtPm1hcmtlclN0YXJ0UmVzb3VyY2Uo
KSk7Ci0gICAgICAgIGlmIChzZXRNYXJrZXJTdGFydChnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI+KGRvY3VtZW50LCBtYXJrZXJTdGFydElkKSkpCi0gICAg
ICAgICAgICBmb3VuZFJlc291cmNlcyA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKGV4dGVuc2lvbnMsIG1hcmtlclN0YXJ0SWQsIGVsZW1l
bnQpOwotCi0gICAgICAgIEF0b21pY1N0cmluZyBtYXJrZXJNaWRJZChzdHlsZS0+bWFya2VyTWlk
UmVzb3VyY2UoKSk7Ci0gICAgICAgIGlmIChzZXRNYXJrZXJNaWQoZ2V0UmVuZGVyU1ZHUmVzb3Vy
Y2VCeUlkPFJlbmRlclNWR1Jlc291cmNlTWFya2VyPihkb2N1bWVudCwgbWFya2VyTWlkSWQpKSkK
LSAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UoZXh0ZW5zaW9ucywgbWFya2VyTWlkSWQsIGVs
ZW1lbnQpOwotCi0gICAgICAgIEF0b21pY1N0cmluZyBtYXJrZXJFbmRJZChzdHlsZS0+bWFya2Vy
RW5kUmVzb3VyY2UoKSk7Ci0gICAgICAgIGlmIChzZXRNYXJrZXJFbmQoZ2V0UmVuZGVyU1ZHUmVz
b3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlTWFya2VyPihkb2N1bWVudCwgbWFya2VyRW5kSWQp
KSkKLSAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UoZXh0ZW5zaW9ucywgbWFya2VyRW5kSWQs
IGVsZW1lbnQpOwotICAgIH0KLQotICAgIGlmIChmaWxsQW5kU3Ryb2tlVGFncygpLmNvbnRhaW5z
KHRhZ05hbWVJbXBsKSkgewotICAgICAgICBpZiAoc3R5bGUtPmhhc0ZpbGwoKSkgewotICAgICAg
ICAgICAgYm9vbCBoYXNQZW5kaW5nUmVzb3VyY2UgPSBmYWxzZTsKLSAgICAgICAgICAgIEF0b21p
Y1N0cmluZyBpZDsKLSAgICAgICAgICAgIGlmIChzZXRGaWxsKHBhaW50aW5nUmVzb3VyY2VGcm9t
U1ZHUGFpbnQoZG9jdW1lbnQsIHN0eWxlLT5maWxsUGFpbnQoKSwgaWQsIGhhc1BlbmRpbmdSZXNv
dXJjZSkpKQotICAgICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKGhhc1BlbmRpbmdSZXNvdXJjZSkKLSAgICAgICAgICAgICAgICByZWdpc3Rl
clBlbmRpbmdSZXNvdXJjZShleHRlbnNpb25zLCBpZCwgZWxlbWVudCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoc3R5bGUtPmhhc1N0cm9rZSgpKSB7Ci0gICAgICAgICAgICBib29sIGhhc1Bl
bmRpbmdSZXNvdXJjZSA9IGZhbHNlOwotICAgICAgICAgICAgQXRvbWljU3RyaW5nIGlkOwotICAg
ICAgICAgICAgaWYgKHNldFN0cm9rZShwYWludGluZ1Jlc291cmNlRnJvbVNWR1BhaW50KGRvY3Vt
ZW50LCBzdHlsZS0+c3Ryb2tlUGFpbnQoKSwgaWQsIGhhc1BlbmRpbmdSZXNvdXJjZSkpKQotICAg
ICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KGhhc1BlbmRpbmdSZXNvdXJjZSkKLSAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNv
dXJjZShleHRlbnNpb25zLCBpZCwgZWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAoY2hhaW5hYmxlUmVzb3VyY2VUYWdzKCkuY29udGFpbnModGFnTmFtZUltcGwpKSB7Ci0gICAg
ICAgIEF0b21pY1N0cmluZyBpZCh0YXJnZXRSZWZlcmVuY2VGcm9tUmVzb3VyY2UoZWxlbWVudCkp
OwotICAgICAgICBpZiAoc2V0TGlua2VkUmVzb3VyY2UoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXJCeUlkKGRvY3VtZW50LCBpZCkpKQotICAgICAgICAgICAgZm91bmRSZXNvdXJjZXMgPSB0
cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShl
eHRlbnNpb25zLCBpZCwgZWxlbWVudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvdW5kUmVzb3Vy
Y2VzOwotfQotCi12b2lkIFNWR1Jlc291cmNlczo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhICYmICFtX21hcmtlckRhdGEgJiYgIW1fZmls
bFN0cm9rZURhdGEgJiYgIW1fbGlua2VkUmVzb3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2xpbmtlZFJlc291cmNlKSB7Ci0gICAgICAgIEFTU0VSVCghbV9jbGlwcGVyRmlsdGVy
TWFza2VyRGF0YSk7Ci0gICAgICAgIEFTU0VSVCghbV9tYXJrZXJEYXRhKTsKLSAgICAgICAgQVNT
RVJUKCFtX2ZpbGxTdHJva2VEYXRhKTsKLSAgICAgICAgbV9saW5rZWRSZXNvdXJjZS0+cmVtb3Zl
Q2xpZW50RnJvbUNhY2hlKG9iamVjdCwgbWFya0ZvckludmFsaWRhdGlvbik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSkgewotICAg
ICAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlcikKLSAgICAgICAgICAg
IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmNsaXBwZXItPnJlbW92ZUNsaWVudEZyb21DYWNo
ZShvYmplY3QsIG1hcmtGb3JJbnZhbGlkYXRpb24pOwotI2lmIEVOQUJMRShGSUxURVJTKQotICAg
ICAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyKQotICAgICAgICAgICAg
bV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUo
b2JqZWN0LCBtYXJrRm9ySW52YWxpZGF0aW9uKTsKLSNlbmRpZgotICAgICAgICBpZiAobV9jbGlw
cGVyRmlsdGVyTWFza2VyRGF0YS0+bWFza2VyKQotICAgICAgICAgICAgbV9jbGlwcGVyRmlsdGVy
TWFza2VyRGF0YS0+bWFza2VyLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0LCBtYXJrRm9y
SW52YWxpZGF0aW9uKTsKLSAgICB9Ci0KLSAgICBpZiAobV9tYXJrZXJEYXRhKSB7Ci0gICAgICAg
IGlmIChtX21hcmtlckRhdGEtPm1hcmtlclN0YXJ0KQotICAgICAgICAgICAgbV9tYXJrZXJEYXRh
LT5tYXJrZXJTdGFydC0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKG9iamVjdCwgbWFya0ZvckludmFs
aWRhdGlvbik7Ci0gICAgICAgIGlmIChtX21hcmtlckRhdGEtPm1hcmtlck1pZCkKLSAgICAgICAg
ICAgIG1fbWFya2VyRGF0YS0+bWFya2VyTWlkLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0
LCBtYXJrRm9ySW52YWxpZGF0aW9uKTsKLSAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2Vy
RW5kKQotICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQtPnJlbW92ZUNsaWVudEZy
b21DYWNoZShvYmplY3QsIG1hcmtGb3JJbnZhbGlkYXRpb24pOwotICAgIH0KLQotICAgIGlmICht
X2ZpbGxTdHJva2VEYXRhKSB7Ci0gICAgICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhLT5maWxsKQot
ICAgICAgICAgICAgbV9maWxsU3Ryb2tlRGF0YS0+ZmlsbC0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hl
KG9iamVjdCwgbWFya0ZvckludmFsaWRhdGlvbik7Ci0gICAgICAgIGlmIChtX2ZpbGxTdHJva2VE
YXRhLT5zdHJva2UpCi0gICAgICAgICAgICBtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UtPnJlbW92
ZUNsaWVudEZyb21DYWNoZShvYmplY3QsIG1hcmtGb3JJbnZhbGlkYXRpb24pOwotICAgIH0KLX0K
LQotdm9pZCBTVkdSZXNvdXJjZXM6OnJlc291cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyKiByZXNvdXJjZSkKLXsKLSAgICBBU1NFUlQocmVzb3VyY2UpOwotICAgIGlmICgh
bV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSAmJiAhbV9tYXJrZXJEYXRhICYmICFtX2ZpbGxTdHJv
a2VEYXRhICYmICFtX2xpbmtlZFJlc291cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9saW5rZWRSZXNvdXJjZSA9PSByZXNvdXJjZSkgewotICAgICAgICBBU1NFUlQoIW1fY2xpcHBl
ckZpbHRlck1hc2tlckRhdGEpOwotICAgICAgICBBU1NFUlQoIW1fbWFya2VyRGF0YSk7Ci0gICAg
ICAgIEFTU0VSVCghbV9maWxsU3Ryb2tlRGF0YSk7Ci0gICAgICAgIG1fbGlua2VkUmVzb3VyY2Ut
PnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoKTsKLSAgICAgICAgbV9saW5rZWRSZXNvdXJjZSA9
IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHJlc291cmNlLT5yZXNv
dXJjZVR5cGUoKSkgewotICAgIGNhc2UgTWFza2VyUmVzb3VyY2VUeXBlOgotICAgICAgICBpZiAo
IW1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
aWYgKG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tlciA9PSByZXNvdXJjZSkgewotICAg
ICAgICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+bWFza2VyLT5yZW1vdmVBbGxDbGll
bnRzRnJvbUNhY2hlKCk7Ci0gICAgICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5t
YXNrZXIgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWFya2VyUmVz
b3VyY2VUeXBlOgotICAgICAgICBpZiAoIW1fbWFya2VyRGF0YSkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBpZiAobV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydCA9PSByZXNvdXJjZSkgewot
ICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydC0+cmVtb3ZlQWxsQ2xpZW50c0Zy
b21DYWNoZSgpOwotICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydCA9IDA7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2VyTWlkID09IHJlc291cmNl
KSB7Ci0gICAgICAgICAgICBtX21hcmtlckRhdGEtPm1hcmtlck1pZC0+cmVtb3ZlQWxsQ2xpZW50
c0Zyb21DYWNoZSgpOwotICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJNaWQgPSAwOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChtX21hcmtlckRhdGEtPm1hcmtlckVuZCA9PSByZXNvdXJj
ZSkgewotICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQtPnJlbW92ZUFsbENsaWVu
dHNGcm9tQ2FjaGUoKTsKLSAgICAgICAgICAgIG1fbWFya2VyRGF0YS0+bWFya2VyRW5kID0gMDsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBhdHRlcm5SZXNvdXJjZVR5cGU6
Ci0gICAgY2FzZSBMaW5lYXJHcmFkaWVudFJlc291cmNlVHlwZToKLSAgICBjYXNlIFJhZGlhbEdy
YWRpZW50UmVzb3VyY2VUeXBlOgotICAgICAgICBpZiAoIW1fZmlsbFN0cm9rZURhdGEpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKG1fZmlsbFN0cm9rZURhdGEtPmZpbGwgPT0gcmVz
b3VyY2UpIHsKLSAgICAgICAgICAgIG1fZmlsbFN0cm9rZURhdGEtPmZpbGwtPnJlbW92ZUFsbENs
aWVudHNGcm9tQ2FjaGUoKTsKLSAgICAgICAgICAgIG1fZmlsbFN0cm9rZURhdGEtPmZpbGwgPSAw
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UgPT0gcmVz
b3VyY2UpIHsKLSAgICAgICAgICAgIG1fZmlsbFN0cm9rZURhdGEtPnN0cm9rZS0+cmVtb3ZlQWxs
Q2xpZW50c0Zyb21DYWNoZSgpOwotICAgICAgICAgICAgbV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tl
ID0gMDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlclJlc291cmNl
VHlwZToKLSNpZiBFTkFCTEUoRklMVEVSUykKLSAgICAgICAgaWYgKCFtX2NsaXBwZXJGaWx0ZXJN
YXNrZXJEYXRhKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChtX2NsaXBwZXJGaWx0
ZXJNYXNrZXJEYXRhLT5maWx0ZXIgPT0gcmVzb3VyY2UpIHsKLSAgICAgICAgICAgIG1fY2xpcHBl
ckZpbHRlck1hc2tlckRhdGEtPmZpbHRlci0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOwot
ICAgICAgICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyID0gMDsKLSAgICAg
ICAgfQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDbGlwcGVyUmVzb3VyY2VUeXBlOgotICAgICAgICBpZiAoIW1f
Y2xpcHBlckZpbHRlck1hc2tlckRhdGEpCi0gICAgICAgICAgICBicmVhazsgCi0gICAgICAgIGlm
IChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyID09IHJlc291cmNlKSB7Ci0gICAg
ICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyLT5yZW1vdmVBbGxDbGll
bnRzRnJvbUNhY2hlKCk7Ci0gICAgICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5j
bGlwcGVyID0gMDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNvbGlkQ29s
b3JSZXNvdXJjZVR5cGU6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0K
LQotdm9pZCBTVkdSZXNvdXJjZXM6OmJ1aWxkU2V0T2ZSZXNvdXJjZXMoSGFzaFNldDxSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcio+JiBzZXQpCi17Ci0gICAgaWYgKCFtX2NsaXBwZXJGaWx0ZXJN
YXNrZXJEYXRhICYmICFtX21hcmtlckRhdGEgJiYgIW1fZmlsbFN0cm9rZURhdGEgJiYgIW1fbGlu
a2VkUmVzb3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2xpbmtlZFJlc291cmNl
KSB7Ci0gICAgICAgIEFTU0VSVCghbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSk7Ci0gICAgICAg
IEFTU0VSVCghbV9tYXJrZXJEYXRhKTsKLSAgICAgICAgQVNTRVJUKCFtX2ZpbGxTdHJva2VEYXRh
KTsKLSAgICAgICAgc2V0LmFkZChtX2xpbmtlZFJlc291cmNlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKSB7Ci0gICAgICAgIGlm
IChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyKQotICAgICAgICAgICAgc2V0LmFk
ZChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyKTsKLSNpZiBFTkFCTEUoRklMVEVS
UykKLSAgICAgICAgaWYgKG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlcikKLSAgICAg
ICAgICAgIHNldC5hZGQobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyKTsKLSNlbmRp
ZgotICAgICAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+bWFza2VyKQotICAgICAg
ICAgICAgc2V0LmFkZChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXIpOwotICAgIH0K
LQotICAgIGlmIChtX21hcmtlckRhdGEpIHsKLSAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFy
a2VyU3RhcnQpCi0gICAgICAgICAgICBzZXQuYWRkKG1fbWFya2VyRGF0YS0+bWFya2VyU3RhcnQp
OwotICAgICAgICBpZiAobV9tYXJrZXJEYXRhLT5tYXJrZXJNaWQpCi0gICAgICAgICAgICBzZXQu
YWRkKG1fbWFya2VyRGF0YS0+bWFya2VyTWlkKTsKLSAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+
bWFya2VyRW5kKQotICAgICAgICAgICAgc2V0LmFkZChtX21hcmtlckRhdGEtPm1hcmtlckVuZCk7
Ci0gICAgfQotCi0gICAgaWYgKG1fZmlsbFN0cm9rZURhdGEpIHsKLSAgICAgICAgaWYgKG1fZmls
bFN0cm9rZURhdGEtPmZpbGwpCi0gICAgICAgICAgICBzZXQuYWRkKG1fZmlsbFN0cm9rZURhdGEt
PmZpbGwpOwotICAgICAgICBpZiAobV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlKQotICAgICAgICAg
ICAgc2V0LmFkZChtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UpOwotICAgIH0KLX0KLQotYm9vbCBT
VkdSZXNvdXJjZXM6OnNldENsaXBwZXIoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVy
KQotewotICAgIGlmICghY2xpcHBlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNT
RVJUKGNsaXBwZXItPnJlc291cmNlVHlwZSgpID09IENsaXBwZXJSZXNvdXJjZVR5cGUpOwotCi0g
ICAgaWYgKCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKQotICAgICAgICBtX2NsaXBwZXJGaWx0
ZXJNYXNrZXJEYXRhID0gQ2xpcHBlckZpbHRlck1hc2tlckRhdGE6OmNyZWF0ZSgpOwotCi0gICAg
bV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlciA9IGNsaXBwZXI7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgU1ZHUmVzb3VyY2VzOjpyZXNldENsaXBwZXIoKQotewotICAgIEFT
U0VSVChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKTsKLSAgICBBU1NFUlQobV9jbGlwcGVyRmls
dGVyTWFza2VyRGF0YS0+Y2xpcHBlcik7Ci0gICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+
Y2xpcHBlciA9IDA7Ci19Ci0KLSNpZiBFTkFCTEUoRklMVEVSUykKLWJvb2wgU1ZHUmVzb3VyY2Vz
OjpzZXRGaWx0ZXIoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBpZiAo
IWZpbHRlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKGZpbHRlci0+cmVz
b3VyY2VUeXBlKCkgPT0gRmlsdGVyUmVzb3VyY2VUeXBlKTsKLQotICAgIGlmICghbV9jbGlwcGVy
RmlsdGVyTWFza2VyRGF0YSkKLSAgICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSA9IENs
aXBwZXJGaWx0ZXJNYXNrZXJEYXRhOjpjcmVhdGUoKTsKLQotICAgIG1fY2xpcHBlckZpbHRlck1h
c2tlckRhdGEtPmZpbHRlciA9IGZpbHRlcjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBT
VkdSZXNvdXJjZXM6OnJlc2V0RmlsdGVyKCkKLXsKLSAgICBBU1NFUlQobV9jbGlwcGVyRmlsdGVy
TWFza2VyRGF0YSk7Ci0gICAgQVNTRVJUKG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRl
cik7Ci0gICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyID0gMDsKLX0KLSNlbmRp
ZgotCi1ib29sIFNWR1Jlc291cmNlczo6c2V0TWFya2VyU3RhcnQoUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIqIG1hcmtlclN0YXJ0KQotewotICAgIGlmICghbWFya2VyU3RhcnQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChtYXJrZXJTdGFydC0+cmVzb3VyY2VUeXBlKCkgPT0g
TWFya2VyUmVzb3VyY2VUeXBlKTsKLQotICAgIGlmICghbV9tYXJrZXJEYXRhKQotICAgICAgICBt
X21hcmtlckRhdGEgPSBNYXJrZXJEYXRhOjpjcmVhdGUoKTsKLQotICAgIG1fbWFya2VyRGF0YS0+
bWFya2VyU3RhcnQgPSBtYXJrZXJTdGFydDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBT
VkdSZXNvdXJjZXM6OnJlc2V0TWFya2VyU3RhcnQoKQotewotICAgIEFTU0VSVChtX21hcmtlckRh
dGEpOwotICAgIEFTU0VSVChtX21hcmtlckRhdGEtPm1hcmtlclN0YXJ0KTsKLSAgICBtX21hcmtl
ckRhdGEtPm1hcmtlclN0YXJ0ID0gMDsKLX0KLQotYm9vbCBTVkdSZXNvdXJjZXM6OnNldE1hcmtl
ck1pZChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkKQotewotICAgIGlmICghbWFy
a2VyTWlkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQobWFya2VyTWlkLT5y
ZXNvdXJjZVR5cGUoKSA9PSBNYXJrZXJSZXNvdXJjZVR5cGUpOwotCi0gICAgaWYgKCFtX21hcmtl
ckRhdGEpCi0gICAgICAgIG1fbWFya2VyRGF0YSA9IE1hcmtlckRhdGE6OmNyZWF0ZSgpOwotCi0g
ICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJNaWQgPSBtYXJrZXJNaWQ7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgU1ZHUmVzb3VyY2VzOjpyZXNldE1hcmtlck1pZCgpCi17Ci0gICAgQVNTRVJU
KG1fbWFya2VyRGF0YSk7Ci0gICAgQVNTRVJUKG1fbWFya2VyRGF0YS0+bWFya2VyTWlkKTsKLSAg
ICBtX21hcmtlckRhdGEtPm1hcmtlck1pZCA9IDA7Ci19Ci0KLWJvb2wgU1ZHUmVzb3VyY2VzOjpz
ZXRNYXJrZXJFbmQoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCkKLXsKLSAgICBp
ZiAoIW1hcmtlckVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKG1hcmtl
ckVuZC0+cmVzb3VyY2VUeXBlKCkgPT0gTWFya2VyUmVzb3VyY2VUeXBlKTsKLQotICAgIGlmICgh
bV9tYXJrZXJEYXRhKQotICAgICAgICBtX21hcmtlckRhdGEgPSBNYXJrZXJEYXRhOjpjcmVhdGUo
KTsKLQotICAgIG1fbWFya2VyRGF0YS0+bWFya2VyRW5kID0gbWFya2VyRW5kOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFNWR1Jlc291cmNlczo6cmVzZXRNYXJrZXJFbmQoKQotewotICAg
IEFTU0VSVChtX21hcmtlckRhdGEpOwotICAgIEFTU0VSVChtX21hcmtlckRhdGEtPm1hcmtlckVu
ZCk7Ci0gICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQgPSAwOwotfQotCi1ib29sIFNWR1Jlc291
cmNlczo6c2V0TWFza2VyKFJlbmRlclNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIpCi17Ci0gICAg
aWYgKCFtYXNrZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChtYXNrZXIt
PnJlc291cmNlVHlwZSgpID09IE1hc2tlclJlc291cmNlVHlwZSk7Ci0KLSAgICBpZiAoIW1fY2xp
cHBlckZpbHRlck1hc2tlckRhdGEpCi0gICAgICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEg
PSBDbGlwcGVyRmlsdGVyTWFza2VyRGF0YTo6Y3JlYXRlKCk7Ci0KLSAgICBtX2NsaXBwZXJGaWx0
ZXJNYXNrZXJEYXRhLT5tYXNrZXIgPSBtYXNrZXI7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgU1ZHUmVzb3VyY2VzOjpyZXNldE1hc2tlcigpCi17Ci0gICAgQVNTRVJUKG1fY2xpcHBlckZp
bHRlck1hc2tlckRhdGEpOwotICAgIEFTU0VSVChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5t
YXNrZXIpOwotICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tlciA9IDA7Ci19Ci0K
LWJvb2wgU1ZHUmVzb3VyY2VzOjpzZXRGaWxsKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBm
aWxsKQotewotICAgIGlmICghZmlsbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNT
RVJUKGZpbGwtPnJlc291cmNlVHlwZSgpID09IFBhdHRlcm5SZXNvdXJjZVR5cGUKLSAgICAgICAg
ICAgfHwgZmlsbC0+cmVzb3VyY2VUeXBlKCkgPT0gTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGUK
LSAgICAgICAgICAgfHwgZmlsbC0+cmVzb3VyY2VUeXBlKCkgPT0gUmFkaWFsR3JhZGllbnRSZXNv
dXJjZVR5cGUpOwotCi0gICAgaWYgKCFtX2ZpbGxTdHJva2VEYXRhKQotICAgICAgICBtX2ZpbGxT
dHJva2VEYXRhID0gRmlsbFN0cm9rZURhdGE6OmNyZWF0ZSgpOwotCi0gICAgbV9maWxsU3Ryb2tl
RGF0YS0+ZmlsbCA9IGZpbGw7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZHUmVzb3Vy
Y2VzOjpyZXNldEZpbGwoKQotewotICAgIEFTU0VSVChtX2ZpbGxTdHJva2VEYXRhKTsKLSAgICBB
U1NFUlQobV9maWxsU3Ryb2tlRGF0YS0+ZmlsbCk7Ci0gICAgbV9maWxsU3Ryb2tlRGF0YS0+Zmls
bCA9IDA7Ci19Ci0KLWJvb2wgU1ZHUmVzb3VyY2VzOjpzZXRTdHJva2UoUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIqIHN0cm9rZSkKLXsKLSAgICBpZiAoIXN0cm9rZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgQVNTRVJUKHN0cm9rZS0+cmVzb3VyY2VUeXBlKCkgPT0gUGF0dGVyblJl
c291cmNlVHlwZQotICAgICAgICAgICB8fCBzdHJva2UtPnJlc291cmNlVHlwZSgpID09IExpbmVh
ckdyYWRpZW50UmVzb3VyY2VUeXBlCi0gICAgICAgICAgIHx8IHN0cm9rZS0+cmVzb3VyY2VUeXBl
KCkgPT0gUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGUpOwotCi0gICAgaWYgKCFtX2ZpbGxTdHJv
a2VEYXRhKQotICAgICAgICBtX2ZpbGxTdHJva2VEYXRhID0gRmlsbFN0cm9rZURhdGE6OmNyZWF0
ZSgpOwotCi0gICAgbV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlID0gc3Ryb2tlOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIFNWR1Jlc291cmNlczo6cmVzZXRTdHJva2UoKQotewotICAgIEFT
U0VSVChtX2ZpbGxTdHJva2VEYXRhKTsKLSAgICBBU1NFUlQobV9maWxsU3Ryb2tlRGF0YS0+c3Ry
b2tlKTsKLSAgICBtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UgPSAwOwotfQotCi1ib29sIFNWR1Jl
c291cmNlczo6c2V0TGlua2VkUmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGxp
bmtlZFJlc291cmNlKQotewotICAgIGlmICghbGlua2VkUmVzb3VyY2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1fbGlua2VkUmVzb3VyY2UgPSBsaW5rZWRSZXNvdXJjZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXM6OnJlc2V0TGlua2VkUmVzb3VyY2Uo
KQotewotICAgIEFTU0VSVChtX2xpbmtlZFJlc291cmNlKTsKLSAgICBtX2xpbmtlZFJlc291cmNl
ID0gMDsKLX0KLQotI2lmbmRlZiBOREVCVUcKLXZvaWQgU1ZHUmVzb3VyY2VzOjpkdW1wKGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIEFTU0VSVChvYmplY3QpOwotICAgIEFTU0VS
VChvYmplY3QtPm5vZGUoKSk7Ci0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIi0+IHRoaXM9JXAsIFNW
R1Jlc291cmNlcyhyZW5kZXJlcj0lcCwgbm9kZT0lcClcbiIsIHRoaXMsIG9iamVjdCwgb2JqZWN0
LT5ub2RlKCkpOwotICAgIGZwcmludGYoc3RkZXJyLCAiIHwgRE9NIFRyZWU6XG4iKTsKLSAgICBv
YmplY3QtPm5vZGUoKS0+c2hvd1RyZWVGb3JUaGlzKCk7Ci0KLSAgICBmcHJpbnRmKHN0ZGVyciwg
IlxuIHwgTGlzdCBvZiByZXNvdXJjZXM6XG4iKTsKLSAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFz
a2VyRGF0YSkgewotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVy
ID0gbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlcikKLSAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiIHwtPiBDbGlwcGVyICAgIDogJXAgKG5vZGU9JXApXG4iLCBjbGlwcGVyLCBj
bGlwcGVyLT5ub2RlKCkpOwotI2lmIEVOQUJMRShGSUxURVJTKQotICAgICAgICBpZiAoUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZp
bHRlcikKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHwtPiBGaWx0ZXIgICAgIDogJXAg
KG5vZGU9JXApXG4iLCBmaWx0ZXIsIGZpbHRlci0+bm9kZSgpKTsKLSNlbmRpZgotICAgICAgICBp
ZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9IG1fY2xpcHBlckZpbHRlck1hc2tl
ckRhdGEtPm1hc2tlcikKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHwtPiBNYXNrZXIg
ICAgIDogJXAgKG5vZGU9JXApXG4iLCBtYXNrZXIsIG1hc2tlci0+bm9kZSgpKTsKLSAgICB9Ci0K
LSAgICBpZiAobV9tYXJrZXJEYXRhKSB7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlciogbWFya2VyU3RhcnQgPSBtX21hcmtlckRhdGEtPm1hcmtlclN0YXJ0KQotICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIgfC0+IE1hcmtlclN0YXJ0OiAlcCAobm9kZT0lcClcbiIsIG1h
cmtlclN0YXJ0LCBtYXJrZXJTdGFydC0+bm9kZSgpKTsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jl
c291cmNlTWFya2VyKiBtYXJrZXJNaWQgPSBtX21hcmtlckRhdGEtPm1hcmtlck1pZCkKLSAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHwtPiBNYXJrZXJNaWQgIDogJXAgKG5vZGU9JXApXG4i
LCBtYXJrZXJNaWQsIG1hcmtlck1pZC0+bm9kZSgpKTsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jl
c291cmNlTWFya2VyKiBtYXJrZXJFbmQgPSBtX21hcmtlckRhdGEtPm1hcmtlckVuZCkKLSAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHwtPiBNYXJrZXJFbmQgIDogJXAgKG5vZGU9JXApXG4i
LCBtYXJrZXJFbmQsIG1hcmtlckVuZC0+bm9kZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9maWxs
U3Ryb2tlRGF0YSkgewotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGZp
bGwgPSBtX2ZpbGxTdHJva2VEYXRhLT5maWxsKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgfC0+IEZpbGwgICAgICAgOiAlcCAobm9kZT0lcClcbiIsIGZpbGwsIGZpbGwtPm5vZGUoKSk7
Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogc3Ryb2tlID0gbV9maWxs
U3Ryb2tlRGF0YS0+c3Ryb2tlKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfC0+IFN0
cm9rZSAgICAgOiAlcCAobm9kZT0lcClcbiIsIHN0cm9rZSwgc3Ryb2tlLT5ub2RlKCkpOwotICAg
IH0KLQotICAgIGlmIChtX2xpbmtlZFJlc291cmNlKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IiB8LT4geGxpbms6aHJlZiA6ICVwIChub2RlPSVwKVxuIiwgbV9saW5rZWRSZXNvdXJjZSwgbV9s
aW5rZWRSZXNvdXJjZS0+bm9kZSgpKTsKLX0KLSNlbmRpZgotCi19Ci0KLSNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuaAkocmV2aXNpb24gNzUzNDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHUmVzb3VyY2Vz
X2gKLSNkZWZpbmUgU1ZHUmVzb3VyY2VzX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjsKLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
OwotY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI7Ci1jbGFzcyBSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlcjsKLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOwotY2xhc3MgU1ZHUmVuZGVy
U3R5bGU7Ci0KLS8vIEhvbGRzIGEgc2V0IG9mIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBS
ZW5kZXJPYmplY3QKLWNsYXNzIFNWR1Jlc291cmNlcyA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1w
dWJsaWM6Ci0gICAgU1ZHUmVzb3VyY2VzKCk7Ci0KLSAgICBib29sIGJ1aWxkQ2FjaGVkUmVzb3Vy
Y2VzKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFNWR1JlbmRlclN0eWxlKik7Ci0KLSAgICAv
LyBPcmRpbmFyeSByZXNvdXJjZXMKLSAgICBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBw
ZXIoKSBjb25zdCB7IHJldHVybiBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhID8gbV9jbGlwcGVy
RmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlciA6IDA7IH0KLSNpZiBFTkFCTEUoRklMVEVSUykKLSAg
ICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9jbGlw
cGVyRmlsdGVyTWFza2VyRGF0YSA/IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlciA6
IDA7IH0KLSNlbmRpZgotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWFya2VyRGF0YSA/IG1fbWFya2VyRGF0YS0+bWFya2VyU3RhcnQg
OiAwOyB9Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck1pZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFya2VyRGF0YSA/IG1fbWFya2VyRGF0YS0+bWFya2VyTWlkIDogMDsgfQotICAg
IFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQoKSBjb25zdCB7IHJldHVybiBtX21h
cmtlckRhdGEgPyBtX21hcmtlckRhdGEtPm1hcmtlckVuZCA6IDA7IH0KLSAgICBSZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlciogbWFza2VyKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwcGVyRmlsdGVyTWFz
a2VyRGF0YSA/IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tlciA6IDA7IH0KLQotICAg
IC8vIFBhaW50IHNlcnZlcnMKLSAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogZmlsbCgp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsbFN0cm9rZURhdGEgPyBtX2ZpbGxTdHJva2VEYXRhLT5maWxs
IDogMDsgfQotICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBzdHJva2UoKSBjb25zdCB7
IHJldHVybiBtX2ZpbGxTdHJva2VEYXRhID8gbV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlIDogMDsg
fQotCi0gICAgLy8gQ2hhaW5hYmxlIHJlc291cmNlcyAtIGxpbmtlZCB0aHJvdWdoIHhsaW5rOmhy
ZWYKLSAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogbGlua2VkUmVzb3VyY2UoKSBjb25z
dCB7IHJldHVybiBtX2xpbmtlZFJlc291cmNlOyB9Ci0KLSAgICB2b2lkIGJ1aWxkU2V0T2ZSZXNv
dXJjZXMoSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+Jik7Ci0KLSAgICAvLyBN
ZXRob2RzIG9wZXJhdGluZyBvbiBhbGwgY2FjaGVkIHJlc291cmNlcwotICAgIHZvaWQgcmVtb3Zl
Q2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9
IHRydWUpIGNvbnN0OwotICAgIHZvaWQgcmVzb3VyY2VEZXN0cm95ZWQoUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIqKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICB2b2lkIGR1bXAoY29uc3QgUmVu
ZGVyT2JqZWN0Kik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgU1ZHUmVz
b3VyY2VzQ3ljbGVTb2x2ZXI7Ci0KLSAgICAvLyBPbmx5IHVzZWQgYnkgU1ZHUmVzb3VyY2VzQ2Fj
aGUgY3ljbGUgZGV0ZWN0aW9uIGxvZ2ljCi0gICAgdm9pZCByZXNldENsaXBwZXIoKTsKLSNpZiBF
TkFCTEUoRklMVEVSUykKLSAgICB2b2lkIHJlc2V0RmlsdGVyKCk7Ci0jZW5kaWYKLSAgICB2b2lk
IHJlc2V0TWFya2VyU3RhcnQoKTsKLSAgICB2b2lkIHJlc2V0TWFya2VyTWlkKCk7Ci0gICAgdm9p
ZCByZXNldE1hcmtlckVuZCgpOwotICAgIHZvaWQgcmVzZXRNYXNrZXIoKTsKLSAgICB2b2lkIHJl
c2V0RmlsbCgpOwotICAgIHZvaWQgcmVzZXRTdHJva2UoKTsKLSAgICB2b2lkIHJlc2V0TGlua2Vk
UmVzb3VyY2UoKTsKLQotcHJpdmF0ZToKLSAgICBib29sIHNldENsaXBwZXIoUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyKik7Ci0jaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAgYm9vbCBzZXRGaWx0ZXIo
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqKTsKLSNlbmRpZgotICAgIGJvb2wgc2V0TWFya2VyU3Rh
cnQoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqKTsKLSAgICBib29sIHNldE1hcmtlck1pZChSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlciopOwotICAgIGJvb2wgc2V0TWFya2VyRW5kKFJlbmRlclNWR1Jl
c291cmNlTWFya2VyKik7Ci0gICAgYm9vbCBzZXRNYXNrZXIoUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXIqKTsKLSAgICBib29sIHNldEZpbGwoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqKTsKLSAg
ICBib29sIHNldFN0cm9rZShSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciopOwotICAgIGJvb2wg
c2V0TGlua2VkUmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqKTsKLQotICAgIC8v
IEZyb20gU1ZHIDEuMSAybmQgRWRpdGlvbgotICAgIC8vIGNsaXBwZXI6ICdjb250YWluZXIgZWxl
bWVudHMnIGFuZCAnZ3JhcGhpY3MgZWxlbWVudHMnCi0gICAgLy8gZmlsdGVyOiAgJ2NvbnRhaW5l
ciBlbGVtZW50cycgYW5kICdncmFwaGljcyBlbGVtZW50cycKLSAgICAvLyBtYXNrZXI6ICAnY29u
dGFpbmVyIGVsZW1lbnRzJyBhbmQgJ2dyYXBoaWNzIGVsZW1lbnRzJwotICAgIC8vIC0+IGEsIGNp
cmNsZSwgZGVmcywgZWxsaXBzZSwgZ2x5cGgsIGcsIGltYWdlLCBsaW5lLCBtYXJrZXIsIG1hc2ss
IG1pc3NpbmctZ2x5cGgsIHBhdGgsIHBhdHRlcm4sIHBvbHlnb24sIHBvbHlsaW5lLCByZWN0LCBz
dmcsIHN3aXRjaCwgc3ltYm9sLCB0ZXh0LCB1c2UKLSAgICBzdHJ1Y3QgQ2xpcHBlckZpbHRlck1h
c2tlckRhdGEgewotICAgICAgICBDbGlwcGVyRmlsdGVyTWFza2VyRGF0YSgpCi0gICAgICAgICAg
ICA6IGNsaXBwZXIoMCkKLSNpZiBFTkFCTEUoRklMVEVSUykKLSAgICAgICAgICAgICwgZmlsdGVy
KDApCi0jZW5kaWYKLSAgICAgICAgICAgICwgbWFza2VyKDApCi0gICAgICAgIHsKLSAgICAgICAg
fQotCi0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPENsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhPiBj
cmVhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENsaXBwZXJGaWx0ZXJN
YXNrZXJEYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
KiBjbGlwcGVyOwotI2lmIEVOQUJMRShGSUxURVJTKQotICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlciogZmlsdGVyOwotI2VuZGlmCi0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlTWFza2Vy
KiBtYXNrZXI7Ci0gICAgfTsKLQotICAgIC8vIEZyb20gU1ZHIDEuMSAybmQgRWRpdGlvbgotICAg
IC8vIG1hcmtlcjogbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUKLSAgICBzdHJ1Y3QgTWFy
a2VyRGF0YSB7Ci0gICAgICAgIE1hcmtlckRhdGEoKQotICAgICAgICAgICAgOiBtYXJrZXJTdGFy
dCgwKQotICAgICAgICAgICAgLCBtYXJrZXJNaWQoMCkKLSAgICAgICAgICAgICwgbWFya2VyRW5k
KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPE1h
cmtlckRhdGE+IGNyZWF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWFy
a2VyRGF0YTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBt
YXJrZXJTdGFydDsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck1pZDsK
LSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZDsKLSAgICB9OwotCi0g
ICAgLy8gRnJvbSBTVkcgMS4xIDJuZCBFZGl0aW9uCi0gICAgLy8gZmlsbDogICAgICAgJ3NoYXBl
cycgYW5kICd0ZXh0IGNvbnRlbnQgZWxlbWVudHMnCi0gICAgLy8gc3Ryb2tlOiAgICAgJ3NoYXBl
cycgYW5kICd0ZXh0IGNvbnRlbnQgZWxlbWVudHMnCi0gICAgLy8gLT4gYWx0R2x5cGgsIGNpcmNs
ZSwgZWxsaXBzZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQsIHRl
eHRQYXRoLCB0cmVmLCB0c3BhbgotICAgIHN0cnVjdCBGaWxsU3Ryb2tlRGF0YSB7Ci0gICAgICAg
IEZpbGxTdHJva2VEYXRhKCkKLSAgICAgICAgICAgIDogZmlsbCgwKQotICAgICAgICAgICAgLCBz
dHJva2UoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIFBhc3NPd25Q
dHI8RmlsbFN0cm9rZURhdGE+IGNyZWF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBuZXcgRmlsbFN0cm9rZURhdGE7Ci0gICAgICAgIH0KLQotICAgICAgICBSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lciogZmlsbDsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIq
IHN0cm9rZTsKLSAgICB9OwotCi0gICAgT3duUHRyPENsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhPiBt
X2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhOwotICAgIE93blB0cjxNYXJrZXJEYXRhPiBtX21hcmtl
ckRhdGE7Ci0gICAgT3duUHRyPEZpbGxTdHJva2VEYXRhPiBtX2ZpbGxTdHJva2VEYXRhOwotICAg
IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBtX2xpbmtlZFJlc291cmNlOwotfTsKLQotfQot
Ci0jZW5kaWYKLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291
cmNlc0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
UmVzb3VyY2VzQ2FjaGUuY3BwCShyZXZpc2lvbiA3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTY1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
VkdSZXNvdXJjZXNDYWNoZS5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5o
IgotI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlc0N5Y2xl
U29sdmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU1ZHUmVzb3VyY2VzQ2FjaGU6OlNW
R1Jlc291cmNlc0NhY2hlKCkKLXsKLX0KLQotU1ZHUmVzb3VyY2VzQ2FjaGU6On5TVkdSZXNvdXJj
ZXNDYWNoZSgpCi17Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1fY2FjaGUpOwotfQotCi12b2lkIFNW
R1Jlc291cmNlc0NhY2hlOjphZGRSZXNvdXJjZXNGcm9tUmVuZGVyT2JqZWN0KFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgQVNTRVJUKG9iamVj
dCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLSAgICBBU1NFUlQoIW1fY2FjaGUuY29udGFpbnMob2Jq
ZWN0KSk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3Zn
U3R5bGUoKTsKLSAgICBBU1NFUlQoc3ZnU3R5bGUpOwotCi0gICAgLy8gQnVpbGQgYSBsaXN0IG9m
IGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXNzZWQgUmVuZGVyT2JqZWN0Ci0g
ICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBuZXcgU1ZHUmVzb3VyY2VzOwotICAgIGlmICgh
cmVzb3VyY2VzLT5idWlsZENhY2hlZFJlc291cmNlcyhvYmplY3QsIHN2Z1N0eWxlKSkgewotICAg
ICAgICBkZWxldGUgcmVzb3VyY2VzOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
UHV0IG9iamVjdCBpbiBjYWNoZS4KLSAgICBtX2NhY2hlLnNldChvYmplY3QsIHJlc291cmNlcyk7
Ci0KLSAgICAvLyBSdW4gY3ljbGUtZGV0ZWN0aW9uIF9hZnRlcndhcmRzXywgc28gc2VsZi1yZWZl
cmVuY2VzIGNhbiBiZSBjYXVnaHQgYXMgd2VsbC4KLSAgICBTVkdSZXNvdXJjZXNDeWNsZVNvbHZl
ciBzb2x2ZXIob2JqZWN0LCByZXNvdXJjZXMpOwotICAgIHNvbHZlci5yZXNvbHZlQ3ljbGVzKCk7
Ci0KLSAgICAvLyBXYWxrIHJlc291cmNlcyBhbmQgcmVnaXN0ZXIgdGhlIHJlbmRlciBvYmplY3Qg
YXQgZWFjaCByZXNvdXJjZXMuCi0gICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
cio+IHJlc291cmNlU2V0OwotICAgIHJlc291cmNlcy0+YnVpbGRTZXRPZlJlc291cmNlcyhyZXNv
dXJjZVNldCk7Ci0KLSAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0
ZXJhdG9yIGVuZCA9IHJlc291cmNlU2V0LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IHJlc291cmNlU2V0LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmFkZENsaWVudChvYmplY3QpOwotfQot
Ci12b2lkIFNWR1Jlc291cmNlc0NhY2hlOjpyZW1vdmVSZXNvdXJjZXNGcm9tUmVuZGVyT2JqZWN0
KFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIGlmICghbV9jYWNoZS5jb250YWlucyhvYmpl
Y3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IG1f
Y2FjaGUuZ2V0KG9iamVjdCk7Ci0KLSAgICAvLyBXYWxrIHJlc291cmNlcyBhbmQgcmVnaXN0ZXIg
dGhlIHJlbmRlciBvYmplY3QgYXQgZWFjaCByZXNvdXJjZXMuCi0gICAgSGFzaFNldDxSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcio+IHJlc291cmNlU2V0OwotICAgIHJlc291cmNlcy0+YnVpbGRT
ZXRPZlJlc291cmNlcyhyZXNvdXJjZVNldCk7Ci0KLSAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGVuZCA9IHJlc291cmNlU2V0LmVuZCgpOwotICAgIGZv
ciAoSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IHJl
c291cmNlU2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnJlbW92
ZUNsaWVudChvYmplY3QpOwotCi0gICAgZGVsZXRlIG1fY2FjaGUudGFrZShvYmplY3QpOwotfQot
Ci1zdGF0aWMgaW5saW5lIFNWR1Jlc291cmNlc0NhY2hlKiByZXNvdXJjZXNDYWNoZUZyb21SZW5k
ZXJPYmplY3QoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLXsKLSAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSByZW5kZXJlci0+ZG9jdW1lbnQoKTsKLSAgICBBU1NFUlQoZG9jdW1lbnQpOwotCi0gICAg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25zID0gZG9jdW1lbnQtPmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKTsKLSAgICBBU1NFUlQoZXh0ZW5zaW9ucyk7Ci0KLSAgICBTVkdSZXNvdXJjZXND
YWNoZSogY2FjaGUgPSBleHRlbnNpb25zLT5yZXNvdXJjZXNDYWNoZSgpOwotICAgIEFTU0VSVChj
YWNoZSk7Ci0KLSAgICByZXR1cm4gY2FjaGU7Ci19Ci0KLVNWR1Jlc291cmNlcyogU1ZHUmVzb3Vy
Y2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQotewotICAgIEFTU0VSVChyZW5kZXJlcik7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGUq
IGNhY2hlID0gcmVzb3VyY2VzQ2FjaGVGcm9tUmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKLSAgICBp
ZiAoIWNhY2hlLT5tX2NhY2hlLmNvbnRhaW5zKHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gY2FjaGUtPm1fY2FjaGUuZ2V0KHJlbmRlcmVyKTsKLX0KLQotdm9pZCBT
VkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVj
dCkKLXsKLSAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpj
YWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3Qob2JqZWN0KTsKLSAgICBpZiAoIXJlc291cmNl
cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVzb3VyY2VzLT5yZW1vdmVDbGllbnRGcm9tQ2Fj
aGUob2JqZWN0KTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFu
Z2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBS
ZW5kZXJTdHlsZSogbmV3U3R5bGUpCi17Ci0gICAgQVNTRVJUKHJlbmRlcmVyKTsKLSAgICBpZiAo
ZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VFcXVhbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xp
ZW50VXBkYXRlZEZyb21FbGVtZW50KHJlbmRlcmVyLCBuZXdTdHlsZSk7Ci0gICAgUmVuZGVyU1ZH
UmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5k
ZXJlciwgZmFsc2UpOwotfQotIAotdm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50VXBkYXRl
ZEZyb21FbGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBu
ZXdTdHlsZSkKLXsKLSAgICBBU1NFUlQocmVuZGVyZXIpOwotICAgIEFTU0VSVChyZW5kZXJlci0+
cGFyZW50KCkpOwotCi0gICAgU1ZHUmVzb3VyY2VzQ2FjaGUqIGNhY2hlID0gcmVzb3VyY2VzQ2Fj
aGVGcm9tUmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKLSAgICBjYWNoZS0+cmVtb3ZlUmVzb3VyY2Vz
RnJvbVJlbmRlck9iamVjdChyZW5kZXJlcik7Ci0gICAgY2FjaGUtPmFkZFJlc291cmNlc0Zyb21S
ZW5kZXJPYmplY3QocmVuZGVyZXIsIG5ld1N0eWxlKTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXND
YWNoZTo6Y2xpZW50RGVzdHJveWVkKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17Ci0gICAgQVNT
RVJUKHJlbmRlcmVyKTsKLSAgICBTVkdSZXNvdXJjZXNDYWNoZSogY2FjaGUgPSByZXNvdXJjZXND
YWNoZUZyb21SZW5kZXJPYmplY3QocmVuZGVyZXIpOwotICAgIGNhY2hlLT5yZW1vdmVSZXNvdXJj
ZXNGcm9tUmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXNDYWNo
ZTo6cmVzb3VyY2VEZXN0cm95ZWQoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHJlc291cmNl
KQotewotICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGUqIGNhY2hl
ID0gcmVzb3VyY2VzQ2FjaGVGcm9tUmVuZGVyT2JqZWN0KHJlc291cmNlKTsKLQotICAgIC8vIFRo
ZSByZXNvdXJjZSBpdHNlbGYgbWF5IGhhdmUgY2xpZW50cywgdGhhdCBuZWVkIHRvIGJlIG5vdGlm
aWVkLgotICAgIGNhY2hlLT5yZW1vdmVSZXNvdXJjZXNGcm9tUmVuZGVyT2JqZWN0KHJlc291cmNl
KTsKLQotICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9y
IGVuZCA9IGNhY2hlLT5tX2NhY2hlLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxSZW5kZXJPYmpl
Y3QqLCBTVkdSZXNvdXJjZXMqPjo6aXRlcmF0b3IgaXQgPSBjYWNoZS0+bV9jYWNoZS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnJlc291cmNlRGVzdHJveWVk
KHJlc291cmNlKTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TVkdSZXNvdXJjZXNDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5oCShyZXZpc2lvbiA3NTM0NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHUmVzb3VyY2VzQ2FjaGVf
aAotI2RlZmluZSBTVkdSZXNvdXJjZXNDYWNoZV9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1
ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBSZW5kZXJT
dHlsZTsKLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOwotY2xhc3MgU1ZHUmVzb3Vy
Y2VzOwotCi1jbGFzcyBTVkdSZXNvdXJjZXNDYWNoZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1w
dWJsaWM6Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGUoKTsKLSAgICB+U1ZHUmVzb3VyY2VzQ2FjaGUo
KTsKLQotICAgIHZvaWQgYWRkUmVzb3VyY2VzRnJvbVJlbmRlck9iamVjdChSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJTdHlsZSopOwotICAgIHZvaWQgcmVtb3ZlUmVzb3VyY2VzRnJvbVJlbmRl
ck9iamVjdChSZW5kZXJPYmplY3QqKTsKLSAgICBzdGF0aWMgU1ZHUmVzb3VyY2VzKiBjYWNoZWRS
ZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0Kik7Ci0KLSAgICAvLyBDYWxsZWQg
ZnJvbSBhbGwgU1ZHIHJlbmRlcmVycyBkZXN0cm95KCkgbWV0aG9kcyAtIGV4Y2VwdCBmb3IgUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuCi0gICAgc3RhdGljIHZvaWQgY2xpZW50RGVzdHJveWVk
KFJlbmRlck9iamVjdCopOwotCi0gICAgLy8gQ2FsbGVkIGZyb20gYWxsIFNWRyByZW5kZXJlcnMg
bGF5b3V0KCkgbWV0aG9kcy4KLSAgICBzdGF0aWMgdm9pZCBjbGllbnRMYXlvdXRDaGFuZ2VkKFJl
bmRlck9iamVjdCopOwotCi0gICAgLy8gQ2FsbGVkIGZyb20gYWxsIFNWRyByZW5kZXJlcnMgc3R5
bGVEaWRDaGFuZ2UoKSBtZXRob2RzLgotICAgIHN0YXRpYyB2b2lkIGNsaWVudFN0eWxlQ2hhbmdl
ZChSZW5kZXJPYmplY3QqLCBTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdT
dHlsZSk7Ci0KLSAgICAvLyBDYWxsZWQgZnJvbSBhbGwgU1ZHIHJlbmRlcmVycyB1cGRhdGVGcm9t
RWxlbWVudCgpIG1ldGhvZHMuCi0gICAgc3RhdGljIHZvaWQgY2xpZW50VXBkYXRlZEZyb21FbGVt
ZW50KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7Ci0KLSAgICAv
LyBDYWxsZWQgZnJvbSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6ZGVzdHJveSgpLgotICAg
IHN0YXRpYyB2b2lkIHJlc291cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
Kik7Ci0KLXByaXZhdGU6Ci0gICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBTVkdSZXNvdXJjZXMq
PiBtX2NhY2hlOwotfTsKLQotfQotCi0jZW5kaWYKLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwCShyZXZp
c2lvbiA3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXNDeWNs
ZVNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjEzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXNDeWNsZVNv
bHZlci5oIgotCi0vLyBTZXQgdG8gYSB2YWx1ZSA+IDAsIHRvIGRlYnVnIHRoZSByZXNvdXJjZSBj
YWNoZS4KLSNkZWZpbmUgREVCVUdfQ1lDTEVfREVURUNUSU9OIDAKLQotI2lmIEVOQUJMRShTVkcp
Ci0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5o
IgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2VyLmgiCi0jaW5jbHVkZSAiU1ZHRmls
dGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgotI2luY2x1ZGUg
IlNWR1BhdHRlcm5FbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVk
ZSAiU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TVkdSZXNv
dXJjZXNDeWNsZVNvbHZlcjo6U1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMpCi0gICAgOiBtX3JlbmRlcmVyKHJlbmRl
cmVyKQotICAgICwgbV9yZXNvdXJjZXMocmVzb3VyY2VzKQotewotICAgIEFTU0VSVChtX3JlbmRl
cmVyKTsKLSAgICBBU1NFUlQobV9yZXNvdXJjZXMpOwotfQotCi1TVkdSZXNvdXJjZXNDeWNsZVNv
bHZlcjo6flNWR1Jlc291cmNlc0N5Y2xlU29sdmVyKCkKLXsKLX0KLQotYm9vbCBTVkdSZXNvdXJj
ZXNDeWNsZVNvbHZlcjo6cmVzb3VyY2VDb250YWluc0N5Y2xlcyhSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJlcik7Ci0KLSAgICAvLyBGaXJzdCBvcGVy
YXRlIG9uIHRoZSByZXNvdXJjZXMgb2YgdGhlIGdpdmVuIHJlbmRlcmVyLgotICAgIC8vIDxtYXJr
ZXIgaWQ9ImEiPiA8cGF0aCBtYXJrZXItc3RhcnQ9InVybCgjYikiLz4gLi4uCi0gICAgLy8gPG1h
cmtlciBpZD0iYiIgbWFya2VyLXN0YXJ0PSJ1cmwoI2EpIi8+Ci0gICAgaWYgKFNWR1Jlc291cmNl
cyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRl
ck9iamVjdChyZW5kZXJlcikpIHsKLSAgICAgICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lcio+IHJlc291cmNlU2V0OwotICAgICAgICByZXNvdXJjZXMtPmJ1aWxkU2V0T2ZSZXNv
dXJjZXMocmVzb3VyY2VTZXQpOwotCi0gICAgICAgIC8vIFdhbGsgYWxsIHJlc291cmNlcyBhbmQg
Y2hlY2sgd2hldGVyIHRoZXkgcmVmZXJlbmNlIGFueSByZXNvdXJjZSBjb250YWluZWQgaW4gdGhl
IHJlc291cmNlcyBzZXQuCi0gICAgICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIqPjo6aXRlcmF0b3IgZW5kID0gcmVzb3VyY2VTZXQuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFz
aFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IHJlc291cmNl
U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKG1fYWxsUmVz
b3VyY2VzLmNvbnRhaW5zKCppdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGVuIG9wZXJhdGUgb24gdGhlIGNoaWxkIHJlc291cmNl
cyBvZiB0aGUgZ2l2ZW4gcmVuZGVyZXIuCi0gICAgLy8gPG1hcmtlciBpZD0iYSI+IDxwYXRoIG1h
cmtlci1zdGFydD0idXJsKCNiKSIvPiAuLi4KLSAgICAvLyA8bWFya2VyIGlkPSJiIj4gPHBhdGgg
bWFya2VyLXN0YXJ0PSJ1cmwoI2EpIi8+IC4uLgotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IHJlbmRlcmVyLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgIFNWR1Jlc291cmNlcyogY2hpbGRSZXNvdXJjZXMgPSBTVkdSZXNv
dXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KGNoaWxkKTsKLSAgICAg
ICAgaWYgKCFjaGlsZFJlc291cmNlcykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAK
LSAgICAgICAgLy8gQSBjaGlsZCBvZiB0aGUgZ2l2ZW4gJ3Jlc291cmNlJyBjb250YWlucyByZXNv
dXJjZXMuIAotICAgICAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj4gY2hp
bGRTZXQ7Ci0gICAgICAgIGNoaWxkUmVzb3VyY2VzLT5idWlsZFNldE9mUmVzb3VyY2VzKGNoaWxk
U2V0KTsKLQotICAgICAgICAvLyBXYWxrIGFsbCBjaGlsZCByZXNvdXJjZXMgYW5kIGNoZWNrIHdo
ZXRlciB0aGV5IHJlZmVyZW5jZSBhbnkgcmVzb3VyY2UgY29udGFpbmVkIGluIHRoZSByZXNvdXJj
ZXMgc2V0LgotICAgICAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0
ZXJhdG9yIGVuZCA9IGNoaWxkU2V0LmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8UmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIqPjo6aXRlcmF0b3IgaXQgPSBjaGlsZFNldC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtX2FsbFJlc291cmNlcy5jb250YWlu
cygqaXQpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gV2FsayBjaGlsZHJlbiByZWN1cnNpdmVseSwgc3RvcCBpbW1lZGlhdGVseSBpZiB3ZSBm
b3VuZCBhIGN5Y2xlCi0gICAgICAgIGlmIChyZXNvdXJjZUNvbnRhaW5zQ3ljbGVzKGNoaWxkKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlcjo6cmVzb2x2ZUN5Y2xlcygpCi17Ci0gICAg
QVNTRVJUKG1fYWxsUmVzb3VyY2VzLmlzRW1wdHkoKSk7Ci0KLSNpZiBERUJVR19DWUNMRV9ERVRF
Q1RJT04gPiAwCi0gICAgZnByaW50ZihzdGRlcnIsICJcbkJlZm9yZSBjeWNsZSBkZXRlY3Rpb246
XG4iKTsKLSAgICBtX3Jlc291cmNlcy0+ZHVtcChtX3JlbmRlcmVyKTsKLSNlbmRpZgotCi0gICAg
Ly8gU3Rhc2ggYWxsIHJlc291cmNlcyBpbnRvIGEgSGFzaFNldCBmb3IgdGhlIGVhc2Ugb2YgdHJh
dmVyc2luZy4KLSAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj4gbG9jYWxS
ZXNvdXJjZXM7Ci0gICAgbV9yZXNvdXJjZXMtPmJ1aWxkU2V0T2ZSZXNvdXJjZXMobG9jYWxSZXNv
dXJjZXMpOwotICAgIEFTU0VSVCghbG9jYWxSZXNvdXJjZXMuaXNFbXB0eSgpKTsKLQotICAgIC8v
IEFkZCBhbGwgcGFyZW50IHJlc291cmNlIGNvbnRhaW5lcnMgdG8gdGhlIEhhc2hTZXQuCi0gICAg
SGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+IHBhcmVudFJlc291cmNlczsKLSAg
ICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IG1fcmVuZGVyZXItPnBhcmVudCgpOwotICAgIHdoaWxl
IChwYXJlbnQpIHsKLSAgICAgICAgaWYgKHBhcmVudC0+aXNTVkdSZXNvdXJjZUNvbnRhaW5lcigp
KQotICAgICAgICAgICAgcGFyZW50UmVzb3VyY2VzLmFkZChwYXJlbnQtPnRvUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIoKSk7Ci0gICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50KCk7Ci0g
ICAgfQotCi0jaWYgREVCVUdfQ1lDTEVfREVURUNUSU9OID4gMAotICAgIGZwcmludGYoc3RkZXJy
LCAiXG5EZXRlY3Rpbmcgd2hldGVyIGFueSByZXNvdXJjZXMgcmVmZXJlbmNlcyBhbnkgb2YgZm9s
bG93aW5nIG9iamVjdHM6XG4iKTsKLSAgICB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiTG9j
YWwgcmVzb3VyY2VzOlxuIik7Ci0gICAgICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIqPjo6aXRlcmF0b3IgZW5kID0gbG9jYWxSZXNvdXJjZXMuZW5kKCk7Ci0gICAgICAgIGZv
ciAoSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IGxv
Y2FsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAifD4gJXM6IG9iamVjdD0lcCAobm9kZT0lcClcbiIsICgqaXQpLT5yZW5kZXJO
YW1lKCksICppdCwgKCppdCktPm5vZGUoKSk7Ci0KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJQ
YXJlbnQgcmVzb3VyY2VzOlxuIik7Ci0gICAgICAgIGVuZCA9IHBhcmVudFJlc291cmNlcy5lbmQo
KTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0
ZXJhdG9yIGl0ID0gcGFyZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAifD4gJXM6IG9iamVjdD0lcCAobm9kZT0lcClcbiIs
ICgqaXQpLT5yZW5kZXJOYW1lKCksICppdCwgKCppdCktPm5vZGUoKSk7Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICAvLyBCdWlsZCBjb21iaW5lZCBzZXQgb2YgbG9jYWwgYW5kIHBhcmVudCByZXNvdXJj
ZXMuCi0gICAgbV9hbGxSZXNvdXJjZXMgPSBsb2NhbFJlc291cmNlczsKLSAgICBIYXNoU2V0PFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGVuZCA9IHBhcmVudFJlc291cmNl
cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPjo6
aXRlcmF0b3IgaXQgPSBwYXJlbnRSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBtX2FsbFJlc291cmNlcy5hZGQoKml0KTsKLQotICAgIC8vIElmIHdlJ3JlIGEgcmVz
b3VyY2UsIGFkZCBvdXJzZWx2ZXMgdG8gdGhlIEhhc2hTZXQuCi0gICAgaWYgKG1fcmVuZGVyZXIt
PmlzU1ZHUmVzb3VyY2VDb250YWluZXIoKSkKLSAgICAgICAgbV9hbGxSZXNvdXJjZXMuYWRkKG1f
cmVuZGVyZXItPnRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoKSk7Ci0KLSAgICBBU1NFUlQo
IW1fYWxsUmVzb3VyY2VzLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBUaGUgam9iIG9mIHRoaXMgZnVu
Y3Rpb24gaXMgdG8gZGV0ZXJtaW5lIHdoZXRlciBhbnkgb2YgdGhlICdyZXNvdXJjZXMnIGFzc29j
aWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gJ3JlbmRlcmVyJwotICAgIC8vIHJlZmVyZW5jZXMgdXMgKG9y
IHdoZXRlciBhbnkgb2YgaXRzIGtpZHMgcmVmZXJlbmNlcyB1cykgLT4gdGhhdCdzIGEgY3ljbGUs
IHdlIG5lZWQgdG8gZmluZCBhbmQgYnJlYWsgaXQuCi0gICAgZW5kID0gbG9jYWxSZXNvdXJjZXMu
ZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0
ZXJhdG9yIGl0ID0gbG9jYWxSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSA9ICppdDsKLSAgICAg
ICAgaWYgKHBhcmVudFJlc291cmNlcy5jb250YWlucyhyZXNvdXJjZSkgfHwgcmVzb3VyY2VDb250
YWluc0N5Y2xlcyhyZXNvdXJjZSkpCi0gICAgICAgICAgICBicmVha0N5Y2xlKHJlc291cmNlKTsK
LSAgICB9Ci0KLSNpZiBERUJVR19DWUNMRV9ERVRFQ1RJT04gPiAwCi0gICAgZnByaW50ZihzdGRl
cnIsICJcbkFmdGVyIGN5Y2xlIGRldGVjdGlvbjpcbiIpOwotICAgIG1fcmVzb3VyY2VzLT5kdW1w
KG1fcmVuZGVyZXIpOwotI2VuZGlmCi0KLSAgICBtX2FsbFJlc291cmNlcy5jbGVhcigpOwotfQot
Ci12b2lkIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyOjpicmVha0N5Y2xlKFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyKiByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlKQotewotICAgIEFTU0VSVChyZXNv
dXJjZUxlYWRpbmdUb0N5Y2xlKTsKLSAgICBpZiAocmVzb3VyY2VMZWFkaW5nVG9DeWNsZSA9PSBt
X3Jlc291cmNlcy0+bGlua2VkUmVzb3VyY2UoKSkgewotICAgICAgICBtX3Jlc291cmNlcy0+cmVz
ZXRMaW5rZWRSZXNvdXJjZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3dpdGNo
IChyZXNvdXJjZUxlYWRpbmdUb0N5Y2xlLT5yZXNvdXJjZVR5cGUoKSkgewotICAgIGNhc2UgTWFz
a2VyUmVzb3VyY2VUeXBlOgotICAgICAgICBBU1NFUlQocmVzb3VyY2VMZWFkaW5nVG9DeWNsZSA9
PSBtX3Jlc291cmNlcy0+bWFza2VyKCkpOwotICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRNYXNr
ZXIoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNYXJrZXJSZXNvdXJjZVR5cGU6Ci0gICAg
ICAgIEFTU0VSVChyZXNvdXJjZUxlYWRpbmdUb0N5Y2xlID09IG1fcmVzb3VyY2VzLT5tYXJrZXJT
dGFydCgpIHx8IHJlc291cmNlTGVhZGluZ1RvQ3ljbGUgPT0gbV9yZXNvdXJjZXMtPm1hcmtlck1p
ZCgpIHx8IHJlc291cmNlTGVhZGluZ1RvQ3ljbGUgPT0gbV9yZXNvdXJjZXMtPm1hcmtlckVuZCgp
KTsKLSAgICAgICAgaWYgKG1fcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpID09IHJlc291cmNlTGVh
ZGluZ1RvQ3ljbGUpCi0gICAgICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRNYXJrZXJTdGFydCgp
OwotICAgICAgICBpZiAobV9yZXNvdXJjZXMtPm1hcmtlck1pZCgpID09IHJlc291cmNlTGVhZGlu
Z1RvQ3ljbGUpCi0gICAgICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRNYXJrZXJNaWQoKTsKLSAg
ICAgICAgaWYgKG1fcmVzb3VyY2VzLT5tYXJrZXJFbmQoKSA9PSByZXNvdXJjZUxlYWRpbmdUb0N5
Y2xlKQotICAgICAgICAgICAgbV9yZXNvdXJjZXMtPnJlc2V0TWFya2VyRW5kKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgUGF0dGVyblJlc291cmNlVHlwZToKLSAgICBjYXNlIExpbmVhckdy
YWRpZW50UmVzb3VyY2VUeXBlOgotICAgIGNhc2UgUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGU6
Ci0gICAgICAgIEFTU0VSVChyZXNvdXJjZUxlYWRpbmdUb0N5Y2xlID09IG1fcmVzb3VyY2VzLT5m
aWxsKCkgfHwgcmVzb3VyY2VMZWFkaW5nVG9DeWNsZSA9PSBtX3Jlc291cmNlcy0+c3Ryb2tlKCkp
OwotICAgICAgICBpZiAobV9yZXNvdXJjZXMtPmZpbGwoKSA9PSByZXNvdXJjZUxlYWRpbmdUb0N5
Y2xlKQotICAgICAgICAgICAgbV9yZXNvdXJjZXMtPnJlc2V0RmlsbCgpOwotICAgICAgICBpZiAo
bV9yZXNvdXJjZXMtPnN0cm9rZSgpID09IHJlc291cmNlTGVhZGluZ1RvQ3ljbGUpCi0gICAgICAg
ICAgICBtX3Jlc291cmNlcy0+cmVzZXRTdHJva2UoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGaWx0ZXJSZXNvdXJjZVR5cGU6Ci0jaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAgICAgIEFTU0VS
VChyZXNvdXJjZUxlYWRpbmdUb0N5Y2xlID09IG1fcmVzb3VyY2VzLT5maWx0ZXIoKSk7Ci0gICAg
ICAgIG1fcmVzb3VyY2VzLT5yZXNldEZpbHRlcigpOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ2xpcHBlclJlc291cmNlVHlwZToKLSAgICAgICAgQVNTRVJUKHJlc291cmNlTGVh
ZGluZ1RvQ3ljbGUgPT0gbV9yZXNvdXJjZXMtPmNsaXBwZXIoKSk7Ci0gICAgICAgIG1fcmVzb3Vy
Y2VzLT5yZXNldENsaXBwZXIoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTb2xpZENvbG9y
UmVzb3VyY2VUeXBlOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmgJKHJldmlzaW9uIDc1MzQ1KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBT
VkdSZXNvdXJjZXNDeWNsZVNvbHZlcl9oCi0jZGVmaW5lIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVy
X2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lcjsKLWNsYXNzIFNWR1Jlc291cmNlczsKLQotY2xhc3MgU1ZHUmVzb3VyY2Vz
Q3ljbGVTb2x2ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVibGljOgotICAgIFNWR1Jlc291
cmNlc0N5Y2xlU29sdmVyKFJlbmRlck9iamVjdCosIFNWR1Jlc291cmNlcyopOwotICAgIH5TVkdS
ZXNvdXJjZXNDeWNsZVNvbHZlcigpOwotCi0gICAgdm9pZCByZXNvbHZlQ3ljbGVzKCk7Ci0KLXBy
aXZhdGU6Ci0gICAgYm9vbCByZXNvdXJjZUNvbnRhaW5zQ3ljbGVzKFJlbmRlck9iamVjdCopIGNv
bnN0OwotICAgIHZvaWQgYnJlYWtDeWNsZShSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciopOwot
Ci0gICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwotICAgIFNWR1Jlc291cmNlcyogbV9yZXNv
dXJjZXM7Ci0gICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+IG1fYWxsUmVz
b3VyY2VzOyAKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCShyZXZpc2lvbiA3
NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHU2hhZG93
VHJlZUVsZW1lbnRzLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlNWR05hbWVzLmgi
Ci0jaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8v
IFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50Ci0KLVNWR1NoYWRvd1RyZWVDb250YWluZXJF
bGVtZW50OjpTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQp
Ci0gICAgOiBTVkdHRWxlbWVudChTVkdOYW1lczo6Z1RhZywgZG9jdW1lbnQpCi17Ci19Ci0KLVBh
c3NSZWZQdHI8U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ+IFNWR1NoYWRvd1RyZWVDb250
YWluZXJFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQoZG9jdW1lbnQpKTsKLX0K
LQotRmxvYXRTaXplIFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50Ojpjb250YWluZXJUcmFu
c2xhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZShtX3hPZmZzZXQudmFsdWUo
dGhpcyksIG1feU9mZnNldC52YWx1ZSh0aGlzKSk7Ci19Ci0KLS8vIFNWR1NoYWRvd1RyZWVSb290
RWxlbWVudAotCi1pbmxpbmUgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50OjpTVkdTaGFkb3dUcmVl
Um9vdEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBTVkdVc2VFbGVtZW50KiBzaGFkb3dQYXJl
bnQpCi0gICAgOiBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkKLXsKLSAg
ICBzZXRTaGFkb3dIb3N0KHNoYWRvd1BhcmVudCk7Ci0gICAgc2V0SW5Eb2N1bWVudCgpOwotfQot
Ci1QYXNzUmVmUHRyPFNWR1NoYWRvd1RyZWVSb290RWxlbWVudD4gU1ZHU2hhZG93VHJlZVJvb3RF
bGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBTVkdVc2VFbGVtZW50KiBzaGFkb3dQ
YXJlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTaGFkb3dUcmVlUm9vdEVsZW1l
bnQoZG9jdW1lbnQsIHNoYWRvd1BhcmVudCkpOwotfQotCi12b2lkIFNWR1NoYWRvd1RyZWVSb290
RWxlbWVudDo6YXR0YWNoRWxlbWVudChQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSwgUmVu
ZGVyQXJlbmEqIGFyZW5hKQotewotICAgIEFTU0VSVChzaGFkb3dIb3N0KCkpOwotCi0gICAgLy8g
Q3JlYXRlIHRoZSByZW5kZXJlciB3aXRoIHRoZSBzcGVjaWZpZWQgc3R5bGUKLSAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXIoYXJlbmEsIHN0eWxlLmdldCgpKTsKLSAg
ICBpZiAocmVuZGVyZXIpIHsKLSAgICAgICAgc2V0UmVuZGVyZXIocmVuZGVyZXIpOwotICAgICAg
ICByZW5kZXJlci0+c2V0U3R5bGUoc3R5bGUpOwotICAgIH0KLQotICAgIC8vIFNldCB0aGVzZSBl
eHBsaWNpdGx5IHNpbmNlIHRoaXMgbm9ybWFsbHkgaGFwcGVucyBkdXJpbmcgYW4gYXR0YWNoKCkK
LSAgICBzZXRBdHRhY2hlZCgpOwotCi0gICAgLy8gQWRkIHRoZSByZW5kZXJlciB0byB0aGUgcmVu
ZGVyIHRyZWUKLSAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgIHNoYWRvd0hvc3QoKS0+cmVuZGVy
ZXIoKS0+YWRkQ2hpbGQocmVuZGVyZXIpOwotfQotCi12b2lkIFNWR1NoYWRvd1RyZWVSb290RWxl
bWVudDo6Y2xlYXJTaGFkb3dIb3N0KCkKLXsKLSAgICBzZXRTaGFkb3dIb3N0KDApOwotfQotCi19
Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVF
bGVtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFk
b3dUcmVlRWxlbWVudHMuaAkocmV2aXNpb24gNzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdTaGFkb3dUcmVlRWxlbWVudHNfaAot
I2RlZmluZSBTVkdTaGFkb3dUcmVlRWxlbWVudHNfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNs
dWRlICJTVkdHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEZsb2F0U2l6ZTsKLWNsYXNzIFNWR1VzZUVsZW1lbnQ7Ci0KLWNs
YXNzIFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50IDogcHVibGljIFNWR0dFbGVtZW50IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxl
bWVudD4gY3JlYXRlKERvY3VtZW50Kik7Ci0KLSAgICBGbG9hdFNpemUgY29udGFpbmVyVHJhbnNs
YXRpb24oKSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRhaW5lck9mZnNldChjb25zdCBTVkdMZW5n
dGgmIHgsIGNvbnN0IFNWR0xlbmd0aCYgeSkKLSAgICB7Ci0gICAgICAgIG1feE9mZnNldCA9IHg7
Ci0gICAgICAgIG1feU9mZnNldCA9IHk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgU1ZHU2hh
ZG93VHJlZUNvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQqKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0
dWFsIGJvb2wgaXNTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KLQotICAgIFNWR0xlbmd0aCBtX3hPZmZzZXQ7Ci0gICAgU1ZHTGVuZ3RoIG1feU9mZnNl
dDsKLX07Ci0KLWNsYXNzIFNWR1NoYWRvd1RyZWVSb290RWxlbWVudCA6IHB1YmxpYyBTVkdTaGFk
b3dUcmVlQ29udGFpbmVyRWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
U1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBTVkdVc2VFbGVtZW50
KiBzaGFkb3dQYXJlbnQpOwotCi0gICAgdm9pZCBhdHRhY2hFbGVtZW50KFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+LCBSZW5kZXJBcmVuYSopOwotICAgIHZvaWQgY2xlYXJTaGFkb3dIb3N0KCk7Ci0K
LXByaXZhdGU6Ci0gICAgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50KERvY3VtZW50KiwgU1ZHVXNl
RWxlbWVudCogc2hhZG93UGFyZW50KTsKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2Jq
ZWN0LmNwcAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGb3JlaWduT2JqZWN0LmNwcDo3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShTVkdfRk9SRUlHTl9PQkpF
Q1QpCisjaW5jbHVkZSAiUmVuZGVyRm9yZWlnbk9iamVjdC5oIgorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVy
Rm9yZWlnbk9iamVjdDo6UmVuZGVyRm9yZWlnbk9iamVjdChTVkdGb3JlaWduT2JqZWN0RWxlbWVu
dCogbm9kZSkgCisgICAgOiBSZW5kZXJTVkdCbG9jayhub2RlKQorICAgICwgbV9uZWVkc1RyYW5z
Zm9ybVVwZGF0ZSh0cnVlKQoreworfQorCitSZW5kZXJGb3JlaWduT2JqZWN0Ojp+UmVuZGVyRm9y
ZWlnbk9iamVjdCgpCit7Cit9CisKK3ZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQoreworICAgIGlmIChwYWludEluZm8uY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBQYWludEluZm8g
Y2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKKyAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5z
YXZlKCk7CisgICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obG9jYWxUcmFuc2Zvcm0o
KSk7CisKKyAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlzKSkK
KyAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+Y2xpcChtX3ZpZXdwb3J0KTsKKworICAg
IGZsb2F0IG9wYWNpdHkgPSBzdHlsZSgpLT5vcGFjaXR5KCk7CisgICAgaWYgKG9wYWNpdHkgPCAx
LjBmKQorICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxh
eWVyKG9wYWNpdHkpOworCisgICAgUmVuZGVyQmxvY2s6OnBhaW50KGNoaWxkUGFpbnRJbmZvLCAw
LCAwKTsKKworICAgIGlmIChvcGFjaXR5IDwgMS4wZikKKyAgICAgICAgY2hpbGRQYWludEluZm8u
Y29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIGNoaWxkUGFpbnRJbmZvLmNv
bnRleHQtPnJlc3RvcmUoKTsKK30KKworSW50UmVjdCBSZW5kZXJGb3JlaWduT2JqZWN0OjpjbGlw
cGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lcikKK3sKKyAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6Y2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWludENvbnRhaW5lcik7Cit9CisKK3ZvaWQgUmVuZGVy
Rm9yZWlnbk9iamVjdDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiByZXBhaW50UmVjdCwgYm9vbCBmaXhlZCkKK3sK
KyAgICBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWlu
dENvbnRhaW5lciwgcmVwYWludFJlY3QsIGZpeGVkKTsKK30KKworY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBSZW5kZXJGb3JlaWduT2JqZWN0Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QK
K3sKKyAgICBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0gPSBsb2NhbFRyYW5zZm9ybSgpOworICAg
IG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybS50cmFuc2xhdGUobV92aWV3cG9ydC54KCksIG1fdmll
d3BvcnQueSgpKTsKKyAgICByZXR1cm4gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOworfQorCit2
b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OmNvbXB1dGVMb2dpY2FsV2lkdGgoKQoreworICAgIC8v
IEZJWE1FOiBJbnZlc3RpZ2F0ZSBpbiBzaXplIHJvdW5kaW5nIGlzc3VlcworICAgIHNldFdpZHRo
KHN0YXRpY19jYXN0PGludD4ocm91bmRmKG1fdmlld3BvcnQud2lkdGgoKSkpKTsKK30KKwordm9p
ZCBSZW5kZXJGb3JlaWduT2JqZWN0Ojpjb21wdXRlTG9naWNhbEhlaWdodCgpCit7CisgICAgLy8g
RklYTUU6IEludmVzdGlnYXRlIGluIHNpemUgcm91bmRpbmcgaXNzdWVzCisgICAgc2V0SGVpZ2h0
KHN0YXRpY19jYXN0PGludD4ocm91bmRmKG1fdmlld3BvcnQuaGVpZ2h0KCkpKSk7Cit9CisKK3Zv
aWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6bGF5b3V0KCkKK3sKKyAgICBBU1NFUlQobmVlZHNMYXlv
dXQoKSk7CisgICAgQVNTRVJUKCF2aWV3KCktPmxheW91dFN0YXRlRW5hYmxlZCgpKTsgLy8gUmVu
ZGVyU1ZHUm9vdCBkaXNhYmxlcyBsYXlvdXRTdGF0ZSBmb3IgdGhlIFNWRyByZW5kZXJpbmcgdHJl
ZS4KKworICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWlu
dER1cmluZ0xheW91dCgpKTsKKyAgICBTVkdGb3JlaWduT2JqZWN0RWxlbWVudCogZm9yZWlnbiA9
IHN0YXRpY19jYXN0PFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Kj4obm9kZSgpKTsKKworICAgIGJv
b2wgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOworICAgIGlmIChtX25l
ZWRzVHJhbnNmb3JtVXBkYXRlKSB7CisgICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSBmb3JlaWdu
LT5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7CisgICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRh
dGUgPSBmYWxzZTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRy
dWU7CisgICAgfQorCisgICAgRmxvYXRSZWN0IG9sZFZpZXdwb3J0ID0gbV92aWV3cG9ydDsKKwor
ICAgIC8vIENhY2hlIHZpZXdwb3J0IGJvdW5kYXJpZXMKKyAgICBGbG9hdFBvaW50IHZpZXdwb3J0
TG9jYXRpb24oZm9yZWlnbi0+eCgpLnZhbHVlKGZvcmVpZ24pLCBmb3JlaWduLT55KCkudmFsdWUo
Zm9yZWlnbikpOworICAgIG1fdmlld3BvcnQgPSBGbG9hdFJlY3Qodmlld3BvcnRMb2NhdGlvbiwg
RmxvYXRTaXplKGZvcmVpZ24tPndpZHRoKCkudmFsdWUoZm9yZWlnbiksIGZvcmVpZ24tPmhlaWdo
dCgpLnZhbHVlKGZvcmVpZ24pKSk7CisgICAgaWYgKCF1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5Q
YXJlbnRzKQorICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gb2xkVmll
d3BvcnQgIT0gbV92aWV3cG9ydDsKKworICAgIC8vIFNldCBib3ggb3JpZ2luIHRvIHRoZSBmb3Jl
aWduT2JqZWN0IHgveSB0cmFuc2xhdGlvbiwgc28gcG9zaXRpb25lZCBvYmplY3RzIGluIFhIVE1M
IGNvbnRlbnQgZ2V0IGNvcnJlY3QKKyAgICAvLyBwb3NpdGlvbnMuIEEgcmVndWxhciBSZW5kZXJC
b3hNb2RlbE9iamVjdCB3b3VsZCBwdWxsIHRoaXMgaW5mb3JtYXRpb24gZnJvbSBSZW5kZXJTdHls
ZSAtIGluIFNWRyB0aG9zZQorICAgIC8vIHByb3BlcnRpZXMgYXJlIGlnbm9yZWQgZm9yIG5vbiA8
c3ZnPiBlbGVtZW50cywgc28gd2UgbWltaWMgd2hhdCBoYXBwZW5zIHdoZW4gc3BlY2lmeWluZyB0
aGVtIHRocm91Z2ggQ1NTLgorCisgICAgLy8gRklYTUU6IEludmVzdGlnYXRlIGluIGxvY2F0aW9u
IHJvdW5kaW5nIGlzc3VlcyAtIG9ubHkgYWZmZWN0cyBSZW5kZXJGb3JlaWduT2JqZWN0ICYgUmVu
ZGVyU1ZHVGV4dAorICAgIHNldExvY2F0aW9uKHJvdW5kZWRJbnRQb2ludCh2aWV3cG9ydExvY2F0
aW9uKSk7CisKKyAgICBib29sIGxheW91dENoYW5nZWQgPSBtX2V2ZXJIYWRMYXlvdXQgJiYgc2Vs
Zk5lZWRzTGF5b3V0KCk7CisgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOworICAgIEFTU0VSVCgh
bmVlZHNMYXlvdXQoKSk7CisKKyAgICAvLyBJZiBvdXIgYm91bmRzIGNoYW5nZWQsIG5vdGlmeSB0
aGUgcGFyZW50cy4KKyAgICBpZiAodXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cykKKyAg
ICAgICAgUmVuZGVyU1ZHQmxvY2s6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOworCisgICAg
Ly8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBsYXlvdXQg
Y2hhbmdlZC4KKyAgICBpZiAobGF5b3V0Q2hhbmdlZCkKKyAgICAgICAgU1ZHUmVzb3VyY2VzQ2Fj
aGU6OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7CisKKyAgICByZXBhaW50ZXIucmVwYWludEFm
dGVyTGF5b3V0KCk7Cit9CisKK2Jvb2wgUmVuZGVyRm9yZWlnbk9iamVjdDo6bm9kZUF0RmxvYXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RB
Y3Rpb24pCit7CisgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUcmFuc2Zvcm0oKS5p
bnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisKKyAgICAvLyBFYXJseSBleGl0IGlm
IGxvY2FsIHBvaW50IGlzIG5vdCBjb250YWluZWQgaW4gY2xpcHBlZCB2aWV3cG9ydCBhcmVhCisg
ICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4odGhpcykgJiYgIW1fdmll
d3BvcnQuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEludFBvaW50IHJvdW5kZWRMb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQp
OworICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBy
b3VuZGVkTG9jYWxQb2ludC54KCksIHJvdW5kZWRMb2NhbFBvaW50LnkoKSwgMCwgMCwgaGl0VGVz
dEFjdGlvbik7Cit9CisKK2Jvb2wgUmVuZGVyRm9yZWlnbk9iamVjdDo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50LCBI
aXRUZXN0QWN0aW9uKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVy
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkLCBib29s
IHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKK3sK
KyAgICAvLyBXaGVuIGNyYXdsaW5nIHVwIHRoZSBoaWVyYWNoeSBzdGFydGluZyBmcm9tIGZvcmVp
Z25PYmplY3QgY2hpbGQgY29udGVudCwgdXNlVHJhbnNmb3JtcyBtYXkgbm90IGJlIHNldCB0byB0
cnVlLgorICAgIGlmICghdXNlVHJhbnNmb3JtcykKKyAgICAgICAgdXNlVHJhbnNmb3JtcyA9IHRy
dWU7CisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6bWFwTG9jYWxUb0NvbnRhaW5lcih0aGlzLCByZXBh
aW50Q29udGFpbmVyLCBmaXhlZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOworfQor
Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJG
b3JlaWduT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmgJKHJldmlzaW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oOjc1MzQ1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRl
ckZvcmVpZ25PYmplY3RfaAorI2RlZmluZSBSZW5kZXJGb3JlaWduT2JqZWN0X2gKKworI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShTVkdfRk9SRUlHTl9PQkpFQ1QpCisjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R0Jsb2NrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHRm9yZWlnbk9iamVj
dEVsZW1lbnQ7CisKK2NsYXNzIFJlbmRlckZvcmVpZ25PYmplY3QgOiBwdWJsaWMgUmVuZGVyU1ZH
QmxvY2sgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlckZvcmVpZ25PYmplY3QoU1ZHRm9y
ZWlnbk9iamVjdEVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJGb3JlaWduT2JqZWN0KCk7
CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAi
UmVuZGVyRm9yZWlnbk9iamVjdCI7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludElu
Zm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOworCisgICAgdmlydHVhbCBJbnRSZWN0IGNs
aXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9
IGZhbHNlKTsKKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisKKyAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnQ7IH0K
KyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmlld3BvcnQ7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnQ7IH0KKworICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdGb3JlaWduT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgLCBib29sIHVzZVRyYW5zZm9ybXMs
IFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgeyBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gdHJ1
ZTsgfQorCisgcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxXaWR0aCgp
OworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodCgpOworCisgICAgdmlydHVh
bCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKworICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0
ZSA6IDE7CisgICAgRmxvYXRSZWN0IG1fdmlld3BvcnQ7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1f
bG9jYWxUcmFuc2Zvcm07CisgICAgbXV0YWJsZSBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRvUGFy
ZW50VHJhbnNmb3JtOworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmgJKHJldmlz
aW9uIDc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWdu
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNTVkdGb3JlaWduT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgLCBib29sIHVzZVRyYW5zZm9ybXMsIFRy
YW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIG1h
cExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IGJvb2wgZml4ZWQgLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJikgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgeyBtX25lZWRzVHJh
bnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQogCiAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCShyZXZpc2lvbiA3
NTM0NSkJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0FsbEluT25lLmNw
cDo3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5P
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworLy8gVGhpcyBhbGwtaW4tb25lIGNw
cCBmaWxlIGN1dHMgZG93biBvbiB0ZW1wbGF0ZSBibG9hdCB0byBhbGxvdyB1cyB0byBidWlsZCBv
dXIgV2luZG93cyByZWxlYXNlIGJ1aWxkLgorCisjaW5jbHVkZSAiUmVuZGVyU1ZHQmxvY2suY3Bw
IgorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
R3JhZGllbnRTdG9wLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3Bw
IgorI2luY2x1ZGUgIlJlbmRlclNWR0ltYWdlLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuY3BwIgorI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCIK
KyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2VMaW5lYXJHcmFkaWVudC5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXIuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCIKKyNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlUmFkaWFsR3JhZGllbnQuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRD
b2xvci5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5jcHAiCisjaW5jbHVkZSAiUmVuZGVy
U1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1RyYW5z
Zm9ybWFibGVDb250YWluZXIuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1ZpZXdwb3J0Q29udGFp
bmVyLmNwcCIKKyNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCIKKyNpbmNsdWRlICJT
VkdNYXJrZXJMYXlvdXRJbmZvLmNwcCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmNwcCIK
KyNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCIKKyNpbmNsdWRlICJTVkdSZXNvdXJj
ZXMuY3BwIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmNwcCIKKyNpbmNsdWRlICJTVkdS
ZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAiCisjaW5jbHVkZSAiU1ZHU2hhZG93VHJlZUVsZW1lbnRz
LmNwcCIKKworLy8gRklYTUU6IEFzIHNvb24gYXMgYWxsIFNWRyByZW5kZXJlcnMgbGl2ZSBpbiBy
ZW5kZXJpbmcvc3ZnLCB0aGlzIGZpbGUgc2hvdWxkIGJlIG1vdmVkIHRoZXJlIGFzIHdlbGwsIHJl
bW92aW5nIHRoZSBuZWVkIGZvciB0aGUgc3ZnLyBpbmNsdWRlcyBiZWxvdy4KKyNpbmNsdWRlICJz
dmcvUmVuZGVyU1ZHSW5saW5lLmNwcCIKKyNpbmNsdWRlICJzdmcvUmVuZGVyU1ZHSW5saW5lVGV4
dC5jcHAiCisjaW5jbHVkZSAic3ZnL1JlbmRlclNWR1RTcGFuLmNwcCIKKyNpbmNsdWRlICJzdmcv
UmVuZGVyU1ZHVGV4dC5jcHAiCisjaW5jbHVkZSAic3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcCIK
KyNpbmNsdWRlICJzdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAiCisjaW5jbHVkZSAic3ZnL1NWR0lu
bGluZVRleHRCb3guY3BwIgorI2luY2x1ZGUgInN2Zy9TVkdSb290SW5saW5lQm94LmNwcCIKKyNp
bmNsdWRlICJzdmcvU1ZHVGV4dENodW5rLmNwcCIKKyNpbmNsdWRlICJzdmcvU1ZHVGV4dENodW5r
QnVpbGRlci5jcHAiCisjaW5jbHVkZSAic3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcCIK
KyNpbmNsdWRlICJzdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCIKKyNpbmNs
dWRlICJzdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAiCisjaW5jbHVkZSAic3ZnL1NWR1RleHRM
YXlvdXRFbmdpbmVCYXNlbGluZS5jcHAiCisjaW5jbHVkZSAic3ZnL1NWR1RleHRMYXlvdXRFbmdp
bmVTcGFjaW5nLmNwcCIKKyNpbmNsdWRlICJzdmcvU1ZHVGV4dE1ldHJpY3MuY3BwIgorI2luY2x1
ZGUgInN2Zy9TVkdUZXh0UXVlcnkuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDc1MzQ1KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJSZW5kZXJTVkdHcmFkaWVudFN0
b3AuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHSW1hZ2UuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5jcHAiCisj
aW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmNwcCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIgpAQCAtNDUsMzIgKzQ3LDI4IEBACiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCIKICNpbmNsdWRlICJSZW5kZXJT
VkdSb290LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5j
cHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4uY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1Rl
eHQuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1RleHRQYXRoLmNwcCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lci5jcHAiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAiCisj
aW5jbHVkZSAiU1ZHSW5saW5lRmxvd0JveC5jcHAiCisjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJv
eC5jcHAiCiAjaW5jbHVkZSAiU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAiCiAjaW5jbHVkZSAiU1ZH
UmVuZGVyU3VwcG9ydC5jcHAiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAiCiAj
aW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmNwcCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5j
cHAiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwIgorI2luY2x1ZGUgIlNW
R1Jvb3RJbmxpbmVCb3guY3BwIgogI2luY2x1ZGUgIlNWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAi
Ci0KLS8vIEZJWE1FOiBBcyBzb29uIGFzIGFsbCBTVkcgcmVuZGVyZXJzIGxpdmUgaW4gcmVuZGVy
aW5nL3N2ZywgdGhpcyBmaWxlIHNob3VsZCBiZSBtb3ZlZCB0aGVyZSBhcyB3ZWxsLCByZW1vdmlu
ZyB0aGUgbmVlZCBmb3IgdGhlIHN2Zy8gaW5jbHVkZXMgYmVsb3cuCi0jaW5jbHVkZSAic3ZnL1Jl
bmRlclNWR0lubGluZS5jcHAiCi0jaW5jbHVkZSAic3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3Bw
IgotI2luY2x1ZGUgInN2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAiCi0jaW5jbHVkZSAic3ZnL1JlbmRl
clNWR1RleHQuY3BwIgotI2luY2x1ZGUgInN2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAiCi0jaW5j
bHVkZSAic3ZnL1NWR0lubGluZUZsb3dCb3guY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdJbmxpbmVU
ZXh0Qm94LmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHUm9vdElubGluZUJveC5jcHAiCi0jaW5jbHVk
ZSAic3ZnL1NWR1RleHRDaHVuay5jcHAiCi0jaW5jbHVkZSAic3ZnL1NWR1RleHRDaHVua0J1aWxk
ZXIuY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAiCi0jaW5j
bHVkZSAic3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAiCi0jaW5jbHVkZSAi
c3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdUZXh0TGF5b3V0
RW5naW5lQmFzZWxpbmUuY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3Bh
Y2luZy5jcHAiCi0jaW5jbHVkZSAic3ZnL1NWR1RleHRNZXRyaWNzLmNwcCIKLSNpbmNsdWRlICJz
dmcvU1ZHVGV4dFF1ZXJ5LmNwcCIKKyNpbmNsdWRlICJTVkdUZXh0Q2h1bmsuY3BwIgorI2luY2x1
ZGUgIlNWR1RleHRDaHVua0J1aWxkZXIuY3BwIgorI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRBdHRy
aWJ1dGVzLmNwcCIKKyNpbmNsdWRlICJTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3Bw
IgorI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRFbmdpbmUuY3BwIgorI2luY2x1ZGUgIlNWR1RleHRM
YXlvdXRFbmdpbmVCYXNlbGluZS5jcHAiCisjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZVNw
YWNpbmcuY3BwIgorI2luY2x1ZGUgIlNWR1RleHRNZXRyaWNzLmNwcCIKKyNpbmNsdWRlICJTVkdU
ZXh0UXVlcnkuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdCbG9jay5jcHAJKHJldmlzaW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suY3BwOjc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykK
KyNpbmNsdWRlICJSZW5kZXJTVkdCbG9jay5oIgorCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2UuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVuZGVyU1ZHQmxvY2s6OlJlbmRlclNWR0Jsb2NrKFNWR0VsZW1lbnQqIG5vZGUpIAorICAgIDog
UmVuZGVyQmxvY2sobm9kZSkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdCbG9jazo6c2V0U3R5bGUo
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUpIAoreworICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gdXNlU3R5bGUgPSBzdHlsZTsKKworICAgIC8vIFNWRyB0ZXh0IGxheW91dCBjb2RlIGV4cGVj
dHMgdXMgdG8gYmUgYSBibG9jay1sZXZlbCBzdHlsZSBlbGVtZW50LiAgIAorICAgIGlmICh1c2VT
dHlsZS0+aXNEaXNwbGF5SW5saW5lVHlwZSgpKSB7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgICAgIG5ld1N0eWxlLT5p
bmhlcml0RnJvbSh1c2VTdHlsZS5nZXQoKSk7CisgICAgICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5
KEJMT0NLKTsKKyAgICAgICAgdXNlU3R5bGUgPSBuZXdTdHlsZS5yZWxlYXNlKCk7CisgICAgfQor
CisgICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKHVzZVN0eWxlLnJlbGVhc2UoKSk7Cit9CisKK3Zv
aWQgUmVuZGVyU1ZHQmxvY2s6OnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgpCit7CisgICAg
UmVuZGVyQmxvY2s6OnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgpOworCisgICAgLy8gUmVu
ZGVyU1ZHbG9jaywgdXNlZCBieSBSZW5kZXIoU1ZHVGV4dHxGb3JlaWduT2JqZWN0KSwgaXMgbm90
IGFsbG93ZWQgdG8gY2FsbCBzZXRIYXNPdmVyZmxvd0NsaXAodHJ1ZSkuCisgICAgLy8gUmVuZGVy
QmxvY2sgYXNzdW1lcyBhIGxheWVyIHRvIGJlIHByZXNlbnQgd2hlbiB0aGUgb3ZlcmZsb3cgY2xp
cCBmdW5jdGlvbmFsaXR5IGlzIHJlcXVlc3RlZC4gQm90aAorICAgIC8vIFJlbmRlcihTVkdUZXh0
fEZvcmVpZ25PYmplY3QpIHJldHVybiAnZmFsc2UnIG9uICdyZXF1aXJlc0xheWVyJy4gRmluZSBm
b3IgUmVuZGVyU1ZHVGV4dC4KKyAgICAvLworICAgIC8vIElmIHdlIHdhbnQgdG8gc3VwcG9ydCBv
dmVyZmxvdyBydWxlcyBmb3IgPGZvcmVpZ25PYmplY3Q+IHdlIGNhbiBjaG9vc2UgYmV0d2VlbiB0
d28gc29sdXRpb25zOgorICAgIC8vIGEpIG1ha2UgUmVuZGVyRm9yZWlnbk9iamVjdCByZXF1aXJl
IGxheWVycyBhbmQgU1ZHIGxheWVyIGF3YXJlCisgICAgLy8gYikgcmVhY3RvciBvdmVyZmxvdyBs
b2dpYyBvdXQgb2YgUmVuZGVyTGF5ZXIgKGFzIHN1Z2dlc3RlZCBieSBkaHlhdHQpLCB3aGljaCBp
cyBhIGxhcmdlIHRhc2sKKyAgICAvLworICAgIC8vIFVudGlsIHRoaXMgaXMgcmVzb2x2ZWQsIGRp
c2FibGUgb3ZlcmZsb3cgc3VwcG9ydC4gT3BlcmEvRkYgZG9uJ3Qgc3VwcG9ydCBpdCBhcyB3ZWxs
IGF0IHRoZSBtb21lbnQgKEZlYiAyMDEwKS4KKyAgICAvLworICAgIC8vIE5vdGU6IFRoaXMgZG9l
cyBOT1QgYWZmZWN0IG92ZXJmbG93IGhhbmRsaW5nIG9uIG91dGVyL2lubmVyIDxzdmc+IGVsZW1l
bnRzIC0gdGhpcyBpcyBoYW5kbGVkCisgICAgLy8gbWFudWFsbHkgYnkgUmVuZGVyU1ZHUm9vdCAt
IHdoaWNoIG93bnMgdGhlIGRvY3VtZW50cyBlbmNsb3Npbmcgcm9vdCBsYXllciBhbmQgdGh1cyB3
b3JrcyBmaW5lLgorICAgIHNldEhhc092ZXJmbG93Q2xpcChmYWxzZSk7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHQmxvY2s6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50LCBpbnQpCit7
CisgICAgLy8gVGhpcyBjb2RlIHBhdGggc2hvdWxkIG5ldmVyIGJlIHRha2VuIGZvciBTVkcsIGFz
IHdlJ3JlIGFzc3VtaW5nIHVzZVRyYW5zZm9ybXM9dHJ1ZSBldmVyeXdoZXJlLCBhYnNvbHV0ZVF1
YWRzIHNob3VsZCBiZSB1c2VkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lk
IFJlbmRlclNWR0Jsb2NrOjpkZXN0cm95KCkKK3sKKyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xp
ZW50RGVzdHJveWVkKHRoaXMpOworICAgIFJlbmRlckJsb2NrOjpkZXN0cm95KCk7Cit9CisKK3Zv
aWQgUmVuZGVyU1ZHQmxvY2s6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQoreworICAgIGlmIChkaWZmID09IFN0eWxlRGlm
ZmVyZW5jZUxheW91dCkKKyAgICAgICAgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisgICAg
UmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5nZShkaWZmLCBuZXdTdHlsZSk7Cit9CisKK3ZvaWQg
UmVuZGVyU1ZHQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7CisgICAgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hh
bmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVD
aGFuZ2VkKHRoaXMsIGRpZmYsIHN0eWxlKCkpOworfQorCit2b2lkIFJlbmRlclNWR0Jsb2NrOjp1
cGRhdGVGcm9tRWxlbWVudCgpCit7CisgICAgUmVuZGVyQmxvY2s6OnVwZGF0ZUZyb21FbGVtZW50
KCk7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFVwZGF0ZWRGcm9tRWxlbWVudCh0aGlz
LCBzdHlsZSgpKTsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmgJKHJldmlzaW9uIDc1MzQ1KQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suaDo3NTM0NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgUmVuZGVyU1ZHQmxvY2tfaAorI2RlZmluZSBSZW5kZXJTVkdCbG9ja19oCisK
KyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5jbHVkZSAiU1ZH
UmVuZGVyU3VwcG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0VsZW1l
bnQ7CisKK2NsYXNzIFJlbmRlclNWR0Jsb2NrIDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdCbG9jayhTVkdFbGVtZW50Kik7CisKK3ByaXZhdGU6
CisgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQm94TW9kZWxJbmZvRnJvbVN0eWxlKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdp
bGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOwor
ICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZSk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50
KCk7Cit9OworCit9CisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNpb24gNzUzNDUp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwOjc1
MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHQ29udGFpbmVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmls
dGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBv
cnQuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRFbGVt
ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHQ29udGFpbmVyOjpSZW5k
ZXJTVkdDb250YWluZXIoU1ZHU3R5bGVkRWxlbWVudCogbm9kZSkKKyAgICA6IFJlbmRlclNWR01v
ZGVsT2JqZWN0KG5vZGUpCisgICAgLCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSh0cnVlKQorewor
fQorCitSZW5kZXJTVkdDb250YWluZXI6On5SZW5kZXJTVkdDb250YWluZXIoKQoreworfQorCit2
b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0KCkKK3sKKyAgICBBU1NFUlQobmVlZHNMYXlv
dXQoKSk7CisKKyAgICAvLyBSZW5kZXJTVkdSb290IGRpc2FibGVzIGxheW91dFN0YXRlIGZvciB0
aGUgU1ZHIHJlbmRlcmluZyB0cmVlLgorICAgIEFTU0VSVCghdmlldygpLT5sYXlvdXRTdGF0ZUVu
YWJsZWQoKSk7CisKKyAgICAvLyBBbGxvdyBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciB0byB1
cGRhdGUgaXRzIHZpZXdwb3J0LgorICAgIGNhbGNWaWV3cG9ydCgpOworCisgICAgTGF5b3V0UmVw
YWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgfHwg
c2VsZldpbGxQYWludCgpKTsKKworICAgIC8vIEFsbG93IFJlbmRlclNWR1RyYW5zZm9ybWFibGVD
b250YWluZXIgdG8gdXBkYXRlIGl0cyB0cmFuc2Zvcm0uCisgICAgYm9vbCB1cGRhdGVkVHJhbnNm
b3JtID0gY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKTsKKworICAgIFNWR1JlbmRlclN1cHBvcnQ6
OmxheW91dENoaWxkcmVuKHRoaXMsIHNlbGZOZWVkc0xheW91dCgpKTsKKworICAgIC8vIEludmFs
aWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQu
CisgICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkKKyAgICAgICAg
U1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7CisKKyAgICAvLyBB
dCB0aGlzIHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBib3Vu
ZHMsCisgICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cgc28gcmVwYWludEFmdGVyTGF5b3V0KCkg
dXNlcyB0aGUgbmV3IGJvdW5kcy4KKyAgICBpZiAobV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgfHwg
dXBkYXRlZFRyYW5zZm9ybSkgeworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7Cisg
ICAgICAgIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7CisgICAgCisgICAgICAgIC8v
IElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgorICAgICAgICBSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisgICAgfQorCisg
ICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOworICAgIHNldE5lZWRzTGF5b3V0KGZh
bHNlKTsKK30KKworYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OnNlbGZXaWxsUGFpbnQoKQorewor
I2lmIEVOQUJMRShGSUxURVJTKQorICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVz
b3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlzKTsKKyAgICBy
ZXR1cm4gcmVzb3VyY2VzICYmIHJlc291cmNlcy0+ZmlsdGVyKCk7CisjZWxzZQorICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQoreworICAgIGlmIChwYWludEluZm8uY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTcGVjOiBn
cm91cHMgdy9vIGNoaWxkcmVuIHN0aWxsIG1heSByZW5kZXIgZmlsdGVyIGNvbnRlbnQuCisgICAg
aWYgKCFmaXJzdENoaWxkKCkgJiYgIXNlbGZXaWxsUGFpbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKTsKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBh
aW50UmVjdChyZXBhaW50UmVjdCwgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLCBwYWludEluZm8p
KQorICAgICAgICByZXR1cm47CisKKyAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJ
bmZvKTsKKyAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisKKyAgICAvLyBMZXQg
dGhlIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyIHN1YmNsYXNzIGNsaXAgaWYgbmVjZXNzYXJ5
CisgICAgYXBwbHlWaWV3cG9ydENsaXAoY2hpbGRQYWludEluZm8pOworCisgICAgY2hpbGRQYWlu
dEluZm8uYXBwbHlUcmFuc2Zvcm0obG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpKTsKKworICAgIGJv
b2wgY29udGludWVSZW5kZXJpbmcgPSB0cnVlOworICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKKyAgICAgICAgY29udGludWVSZW5kZXJpbmcgPSBT
VkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFp
bnRJbmZvKTsKKworICAgIGlmIChjb250aW51ZVJlbmRlcmluZykgeworICAgICAgICBjaGlsZFBh
aW50SW5mby51cGRhdGVQYWludGluZ1Jvb3RGb3JDaGlsZHJlbih0aGlzKTsKKyAgICAgICAgZm9y
IChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgICAgIGNoaWxkLT5wYWludChjaGlsZFBhaW50SW5m
bywgMCwgMCk7CisgICAgfQorCisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
Rm9yZWdyb3VuZCkKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29u
dGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbywgcGFpbnRJbmZvLmNvbnRleHQpOworCisgICAgY2hp
bGRQYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOworCisgICAgLy8gRklYTUU6IFRoaXMgcmVh
bGx5IHNob3VsZCBiZSBkcmF3biBmcm9tIGxvY2FsIGNvb3JkaW5hdGVzLCBidXQgY3VycmVudGx5
IHdlIGhhY2sgaXQKKyAgICAvLyB0byBhdm9pZCBvdXIgY2xpcCBraWxsaW5nIG91ciBvdXRsaW5l
IHJlY3QuICBUaHVzIHdlIHRyYW5zbGF0ZSBvdXIKKyAgICAvLyBvdXRsaW5lIHJlY3QgaW50byBw
YXJlbnQgY29vcmRzIGJlZm9yZSBkcmF3aW5nLgorICAgIC8vIEZJWE1FOiBUaGlzIG1lYW5zIG91
ciBmb2N1cyByaW5nIHdvbid0IHNoYXJlIG91ciByb3RhdGlvbiBsaWtlIGl0IHNob3VsZC4KKyAg
ICAvLyBXZSBzaG91bGQgaW5zdGVhZCBkaXNhYmxlIG91ciBjbGlwIGR1cmluZyBQYWludFBoYXNl
T3V0bGluZQorICAgIGlmICgocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8
IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpICYmIHN0eWxlKCktPm91
dGxpbmVXaWR0aCgpICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSB7CisgICAg
ICAgIEludFJlY3QgcGFpbnRSZWN0SW5QYXJlbnQgPSBlbmNsb3NpbmdJbnRSZWN0KGxvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlcGFpbnRSZWN0KSk7CisgICAgICAgIHBhaW50T3V0
bGluZShwYWludEluZm8uY29udGV4dCwgcGFpbnRSZWN0SW5QYXJlbnQueCgpLCBwYWludFJlY3RJ
blBhcmVudC55KCksIHBhaW50UmVjdEluUGFyZW50LndpZHRoKCksIHBhaW50UmVjdEluUGFyZW50
LmhlaWdodCgpKTsKKyAgICB9Cit9CisKKy8vIGFkZEZvY3VzUmluZ1JlY3RzIGlzIGNhbGxlZCBm
cm9tIHBhaW50T3V0bGluZSBhbmQgbmVlZHMgdG8gYmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZXMg
YXMgdGhlIHBhaW50T3VsaW5lIGNhbGwKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphZGRGb2N1
c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQsIGludCkKK3sKKyAgICBJbnRS
ZWN0IHBhaW50UmVjdEluUGFyZW50ID0gZW5jbG9zaW5nSW50UmVjdChsb2NhbFRvUGFyZW50VHJh
bnNmb3JtKCkubWFwUmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7CisgICAg
aWYgKCFwYWludFJlY3RJblBhcmVudC5pc0VtcHR5KCkpCisgICAgICAgIHJlY3RzLmFwcGVuZChw
YWludFJlY3RJblBhcmVudCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjp1cGRhdGVD
YWNoZWRCb3VuZGFyaWVzKCkKK3sKKyAgICBtX29iamVjdEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0
KCk7CisgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIG1fcmVwYWlu
dEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisKKyAgICBTVkdSZW5kZXJTdXBwb3J0Ojpjb21w
dXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyh0aGlzLCBtX29iamVjdEJvdW5kaW5nQm94LCBtX3N0
cm9rZUJvdW5kaW5nQm94LCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CisgICAgU1ZHUmVuZGVyU3Vw
cG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJv
dW5kaW5nQm94KTsKK30KKworYm9vbCBSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdEZsb2F0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQoreworICAgIC8vIEdpdmUgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgYSBjaGFuY2Ug
dG8gYXBwbHkgaXRzIHZpZXdwb3J0IGNsaXAKKyAgICBpZiAoIXBvaW50SXNJbnNpZGVWaWV3cG9y
dENsaXAocG9pbnRJblBhcmVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZsb2F0
UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFw
UG9pbnQocG9pbnRJblBhcmVudCk7CisKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50
SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICAKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CisgICAgICAg
IGlmIChjaGlsZC0+bm9kZUF0RmxvYXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2FsUG9pbnQs
IGhpdFRlc3RBY3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3Vs
dCwgcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gU3BlYzogT25seSBncmFwaGljYWwgZWxlbWVu
dHMgY2FuIGJlIHRhcmdldGVkIGJ5IHRoZSBtb3VzZSwgcGVyaW9kLgorICAgIC8vIDE2LjQ6ICJJ
ZiB0aGVyZSBhcmUgbm8gZ3JhcGhpY3MgZWxlbWVudHMgd2hvc2UgcmVsZXZhbnQgZ3JhcGhpY3Mg
Y29udGVudCBpcyB1bmRlciB0aGUgcG9pbnRlciAoaS5lLiwgdGhlcmUgaXMgbm8gdGFyZ2V0IGVs
ZW1lbnQpLCB0aGUgZXZlbnQgaXMgbm90IGRpc3BhdGNoZWQuIgorICAgIHJldHVybiBmYWxzZTsK
K30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAkocmV2aXNpb24gNzUzNDUp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaDo3NTM0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFJlbmRlclNWR0NvbnRhaW5lcl9oCisjZGVmaW5lIFJlbmRlclNWR0NvbnRhaW5lcl9o
CisKKyNpZiBFTkFCTEUoU1ZHKQorCisjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdFbGVtZW50OworCitjbGFzcyBSZW5k
ZXJTVkdDb250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgeworcHVibGljOgor
ICAgIGV4cGxpY2l0IFJlbmRlclNWR0NvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50Kik7CisgICAg
dmlydHVhbCB+UmVuZGVyU1ZHQ29udGFpbmVyKCk7CisKKyAgICBjb25zdCBSZW5kZXJPYmplY3RD
aGlsZExpc3QqIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KKyAgICBS
ZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0K
KworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBh
cmVudFkpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1f
bmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gdHJ1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsgcmV0dXJuIGNoaWxk
cmVuKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVh
bENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQorCisgICAgdmlydHVhbCBi
b29sIGlzU1ZHQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdDb250YWlu
ZXIiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworCisg
ICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBt
X29iamVjdEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRp
bmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9CisgICAgdmlydHVh
bCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVy
biBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQorCisgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisKKyAgICAvLyBBbGxvdyBSZW5k
ZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyIHRvIGhvb2sgaW4gYXQgdGhlIHJpZ2h0IHRpbWUg
aW4gbGF5b3V0KCkKKyAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKSB7
IHJldHVybiBmYWxzZTsgfQorCisgICAgLy8gQWxsb3cgUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIgdG8gaG9vayBpbiBhdCB0aGUgcmlnaHQgdGltZXMgaW4gbGF5b3V0KCksIHBhaW50KCkgYW5k
IG5vZGVBdEZsb2F0UG9pbnQoKQorICAgIHZpcnR1YWwgdm9pZCBjYWxjVmlld3BvcnQoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWaWV3cG9ydENsaXAoUGFpbnRJbmZvJikgeyB9CisgICAg
dmlydHVhbCBib29sIHBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29uc3QgRmxvYXRQb2ludCYg
Lypwb2ludEluUGFyZW50Ki8pIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgc2VsZldpbGxQ
YWludCgpOworICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOworCitwcml2YXRlOgor
ICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOworICAgIEZsb2F0UmVjdCBtX29i
amVjdEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94OworICAg
IEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAgICBib29sIG1fbmVlZHNCb3VuZGFy
aWVzVXBkYXRlIDogMTsKK307CisgIAoraW5saW5lIFJlbmRlclNWR0NvbnRhaW5lciogdG9SZW5k
ZXJTVkdDb250YWluZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgLy8gTm90ZTogaXNT
VkdDb250YWluZXIgaXMgYWxzbyB0cnVlIGZvciBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciwg
d2hpY2ggaXMgbm90IGRlcml2ZWQgZnJvbSB0aGlzLgorICAgIEFTU0VSVCghb2JqZWN0IHx8IChv
YmplY3QtPmlzU1ZHQ29udGFpbmVyKCkgJiYgc3RyY21wKG9iamVjdC0+cmVuZGVyTmFtZSgpLCAi
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIiKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxS
ZW5kZXJTVkdDb250YWluZXIqPihvYmplY3QpOworfQorCitpbmxpbmUgY29uc3QgUmVuZGVyU1ZH
Q29udGFpbmVyKiB0b1JlbmRlclNWR0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCkKK3sKKyAgICAvLyBOb3RlOiBpc1NWR0NvbnRhaW5lciBpcyBhbHNvIHRydWUgZm9yIFJlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyLCB3aGljaCBpcyBub3QgZGVyaXZlZCBmcm9tIHRoaXMuCisg
ICAgQVNTRVJUKCFvYmplY3QgfHwgKG9iamVjdC0+aXNTVkdDb250YWluZXIoKSAmJiBzdHJjbXAo
b2JqZWN0LT5yZW5kZXJOYW1lKCksICJSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciIpKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR0NvbnRhaW5lcio+KG9iamVjdCk7
Cit9CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2Fz
dC4KK3ZvaWQgdG9SZW5kZXJTVkdDb250YWluZXIoY29uc3QgUmVuZGVyU1ZHQ29udGFpbmVyKik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5k
aWYgLy8gUmVuZGVyU1ZHQ29udGFpbmVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAJKHJldmlzaW9uIDc1
MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmNwcDo3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3Jh
ZGllbnRTdG9wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHR3JhZGllbnRT
dG9wLmgiCisKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgorI2luY2x1
ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVk
ZSAiU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKKyNpbmNsdWRlICJTVkdTdG9wRWxlbWVudC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CisKK1Jl
bmRlclNWR0dyYWRpZW50U3RvcDo6UmVuZGVyU1ZHR3JhZGllbnRTdG9wKFNWR1N0b3BFbGVtZW50
KiBlbGVtZW50KQorICAgIDogUmVuZGVyT2JqZWN0KGVsZW1lbnQpCit7Cit9CisKK1JlbmRlclNW
R0dyYWRpZW50U3RvcDo6flJlbmRlclNWR0dyYWRpZW50U3RvcCgpCit7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHR3JhZGllbnRTdG9wOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIFJlbmRlck9iamVjdDo6c3R5bGVE
aWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOworICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5j
ZUVxdWFsKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyA8c3RvcD4gZWxlbWVudHMgc2hvdWxk
IG9ubHkgYmUgYWxsb3dlZCB0byBtYWtlIHJlbmRlcmVycyB1bmRlciBncmFkaWVudCBlbGVtZW50
cworICAgIC8vIGJ1dCBJIGNhbiBpbWFnaW5lIGEgZmV3IGNhc2VzIHdlIG1pZ2h0IG5vdCBiZSBj
YXRjaGluZywgc28gbGV0J3Mgbm90IGNyYXNoIGlmIG91ciBwYXJlbnQgaXNuJ3QgYSBncmFkaWVu
dC4KKyAgICBTVkdHcmFkaWVudEVsZW1lbnQqIGdyYWRpZW50ID0gZ3JhZGllbnRFbGVtZW50KCk7
CisgICAgaWYgKCFncmFkaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IGdyYWRpZW50LT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChyZW5kZXJlci0+aXNTVkdSZXNvdXJjZUNvbnRh
aW5lcigpKTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogY29udGFpbmVyID0gcmVu
ZGVyZXItPnRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoKTsKKyAgICBjb250YWluZXItPnJl
bW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoKTsKK30KKwordm9pZCBSZW5kZXJTVkdHcmFkaWVudFN0
b3A6OmxheW91dCgpCit7CisgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOworfQorCitTVkdHcmFk
aWVudEVsZW1lbnQqIFJlbmRlclNWR0dyYWRpZW50U3RvcDo6Z3JhZGllbnRFbGVtZW50KCkgY29u
c3QKK3sKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gbm9kZSgpLT5wYXJlbnROb2Rl
KCk7CisgICAgaWYgKHBhcmVudE5vZGUtPmhhc1RhZ05hbWUobGluZWFyR3JhZGllbnRUYWcpIHx8
IHBhcmVudE5vZGUtPmhhc1RhZ05hbWUocmFkaWFsR3JhZGllbnRUYWcpKQorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8U1ZHR3JhZGllbnRFbGVtZW50Kj4ocGFyZW50Tm9kZSk7CisgICAgcmV0
dXJuIDA7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgJKHJl
dmlzaW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHR3Jh
ZGllbnRTdG9wLmg6NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0dyYWRpZW50U3RvcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdHcmFkaWVudFN0
b3BfaAorI2RlZmluZSBSZW5kZXJTVkdHcmFkaWVudFN0b3BfaAorCisjaWYgRU5BQkxFKFNWRykK
KyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAor
Y2xhc3MgU1ZHR3JhZGllbnRFbGVtZW50OworY2xhc3MgU1ZHU3RvcEVsZW1lbnQ7CisKKy8vIFRo
aXMgY2xhc3MgZXhpc3RzIG1vc3RseSBzbyB3ZSBjYW4gaGVhciBhYm91dCBncmFkaWVudCBzdG9w
IHN0eWxlIGNoYW5nZXMKK2NsYXNzIFJlbmRlclNWR0dyYWRpZW50U3RvcCA6IHB1YmxpYyBSZW5k
ZXJPYmplY3QgeworcHVibGljOgorICAgIFJlbmRlclNWR0dyYWRpZW50U3RvcChTVkdTdG9wRWxl
bWVudCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR0dyYWRpZW50U3RvcCgpOworCisgICAgdmly
dHVhbCBib29sIGlzU1ZHR3JhZGllbnRTdG9wKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJT
VkdHcmFkaWVudFN0b3AiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisKKyAgICAv
LyBUaGlzIG92ZXJyaWRlcyBhcmUgbmVlZGVkIHRvIHByZXZlbnQgQVNTRVJUcyBvbiA8c3ZnPjxz
dG9wIC8+PC9zdmc+CisgICAgLy8gUmVuZGVyT2JqZWN0J3MgZGVmYXVsdCBpbXBsZW1lbnRhdGlv
bnMgQVNTRVJUX05PVF9SRUFDSEVEKCkKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA0MDAKKyAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqKSB7IHJldHVybiBJbnRSZWN0KCk7
IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0
dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdC
b3goKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0
KCk7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CisKK3ByaXZhdGU6Cisg
ICAgU1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQoKSBjb25zdDsKK307CisKK2lu
bGluZSBjb25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AqIHRvUmVuZGVyU1ZHR3JhZGllbnRTdG9w
KGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9i
amVjdC0+aXNTVkdHcmFkaWVudFN0b3AoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFJlbmRlclNWR0dyYWRpZW50U3RvcCo+KG9iamVjdCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVO
QUJMRShTVkcpCisjZW5kaWYgLy8gUmVuZGVyU1ZHR3JhZGllbnRTdG9wX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNv
bnRhaW5lci5jcHAJKHJldmlzaW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcDo3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcp
CisjaW5jbHVkZSAiUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgiCisKKyNpbmNsdWRlICJSZW5k
ZXJTVkdQYXRoLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6UmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyKFNWR1N0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCisgICAgOiBSZW5kZXJTVkdDb250YWlu
ZXIoZWxlbWVudCkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmxheW91
dCgpCit7CisgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOworICAgIFNWR1JlbmRlclN1cHBvcnQ6
OmxheW91dENoaWxkcmVuKHRoaXMsIHNlbGZOZWVkc0xheW91dCgpKTsgCisgICAgc2V0TmVlZHNM
YXlvdXQoZmFsc2UpOyAgICAKK30KKwordm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OnBh
aW50KFBhaW50SW5mbyYsIGludCwgaW50KQoreworICAgIC8vIFRoaXMgc3VidHJlZSBkb2VzIG5v
dCBwYWludC4KK30KKwordm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmFic29sdXRlUXVh
ZHMoVmVjdG9yPEZsb2F0UXVhZD4mKQoreworICAgIC8vIFRoaXMgc3VidHJlZSBkb2VzIG5vdCB0
YWtlIHVwIHNwYWNlIG9yIHBhaW50Cit9CisKK2Jvb2wgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
Ojpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAkocmV2
aXNpb24gNzUzNDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRk
ZW5Db250YWluZXIuaDo3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcl9oCisjZGVmaW5lIFJlbmRlclNWR0hpZGRl
bkNvbnRhaW5lcl9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRh
aW5lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjbGFzcyBTVkdTdHlsZWRFbGVt
ZW50OworCisvLyBUaGlzIGNsYXNzIGlzIGZvciBjb250YWluZXJzIHdoaWNoIGFyZSBuZXZlciBk
cmF3biwgYnV0IGRvIG5lZWQgdG8gc3VwcG9ydCBzdHlsZQorLy8gPGRlZnM+LCA8bGluZWFyR3Jh
ZGllbnQ+LCA8cmFkaWFsR3JhZGllbnQ+IGFyZSBhbGwgZ29vZCBleGFtcGxlcworY2xhc3MgUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyIDogcHVibGljIFJlbmRlclNWR0NvbnRhaW5lciB7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyKFNWR1N0eWxlZEVsZW1l
bnQqKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0
dXJuICJSZW5kZXJTVkdIaWRkZW5Db250YWluZXIiOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzU1ZHSGlk
ZGVuQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBy
ZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOworICAgIAorICAg
IHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCopIHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBhYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKK307Cit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmIC8vIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcl9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNw
cAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdJbWFnZS5jcHA6NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdh
bnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW1hZ2UuaCIKKworI2luY2x1ZGUgIkF0dHIu
aCIKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0
UnVsZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJJbWFnZVJlc291cmNlLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgorI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCisjaW5jbHVkZSAiU1ZHSW1hZ2VFbGVt
ZW50LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpby5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKyNpbmNsdWRlICJTVkdS
ZXNvdXJjZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdJbWFnZTo6UmVu
ZGVyU1ZHSW1hZ2UoU1ZHSW1hZ2VFbGVtZW50KiBpbXBsKQorICAgIDogUmVuZGVyU1ZHTW9kZWxP
YmplY3QoaW1wbCkKKyAgICAsIG1fdXBkYXRlQ2FjaGVkUmVwYWludFJlY3QodHJ1ZSkKKyAgICAs
IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkKKyAgICAsIG1faW1hZ2VSZXNvdXJjZShSZW5k
ZXJJbWFnZVJlc291cmNlOjpjcmVhdGUoKSkKK3sKKyAgICBtX2ltYWdlUmVzb3VyY2UtPmluaXRp
YWxpemUodGhpcyk7Cit9CisKK1JlbmRlclNWR0ltYWdlOjp+UmVuZGVyU1ZHSW1hZ2UoKQorewor
ICAgIG1faW1hZ2VSZXNvdXJjZS0+c2h1dGRvd24oKTsKK30KKwordm9pZCBSZW5kZXJTVkdJbWFn
ZTo6bGF5b3V0KCkKK3sKKyAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CisKKyAgICBMYXlvdXRS
ZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAm
JiBzZWxmTmVlZHNMYXlvdXQoKSk7CisgICAgU1ZHSW1hZ2VFbGVtZW50KiBpbWFnZSA9IHN0YXRp
Y19jYXN0PFNWR0ltYWdlRWxlbWVudCo+KG5vZGUoKSk7CisKKyAgICBib29sIHRyYW5zZm9ybU9y
Qm91bmRhcmllc1VwZGF0ZSA9IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgfHwgbV91cGRhdGVDYWNo
ZWRSZXBhaW50UmVjdDsKKyAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgeworICAgICAg
ICBtX2xvY2FsVHJhbnNmb3JtID0gaW1hZ2UtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKKyAg
ICAgICAgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIGlmICht
X3VwZGF0ZUNhY2hlZFJlcGFpbnRSZWN0KSB7CisgICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94
ID0gbV9vYmplY3RCb3VuZGluZ0JveDsKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJz
ZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsK
KyAgICAgICAgbV91cGRhdGVDYWNoZWRSZXBhaW50UmVjdCA9IGZhbHNlOworICAgIH0KKworICAg
IC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0
IGNoYW5nZWQuCisgICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkK
KyAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7CisK
KyAgICAvLyBJZiBvdXIgYm91bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4KKyAgICBp
ZiAodHJhbnNmb3JtT3JCb3VuZGFyaWVzVXBkYXRlKQorICAgICAgICBSZW5kZXJTVkdNb2RlbE9i
amVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisKKyAgICByZXBhaW50ZXIucmVwYWlu
dEFmdGVyTGF5b3V0KCk7CisgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOworfQorCit2b2lkIFJl
bmRlclNWR0ltYWdlOjp1cGRhdGVGcm9tRWxlbWVudCgpCit7CisgICAgU1ZHSW1hZ2VFbGVtZW50
KiBpbWFnZSA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudCo+KG5vZGUoKSk7CisKKyAgICBG
bG9hdFJlY3Qgb2xkQm91bmRhcmllcyA9IG1fb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgbV9vYmpl
Y3RCb3VuZGluZ0JveCA9IEZsb2F0UmVjdChpbWFnZS0+eCgpLnZhbHVlKGltYWdlKSwgaW1hZ2Ut
PnkoKS52YWx1ZShpbWFnZSksIGltYWdlLT53aWR0aCgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPmhl
aWdodCgpLnZhbHVlKGltYWdlKSk7CisgICAgaWYgKG1fb2JqZWN0Qm91bmRpbmdCb3ggIT0gb2xk
Qm91bmRhcmllcykgeworICAgICAgICBtX3VwZGF0ZUNhY2hlZFJlcGFpbnRSZWN0ID0gdHJ1ZTsK
KyAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7CisgICAgfQorICAgIFJlbmRlclNWR01vZGVs
T2JqZWN0Ojp1cGRhdGVGcm9tRWxlbWVudCgpOworfQorCit2b2lkIFJlbmRlclNWR0ltYWdlOjpw
YWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQpCit7CisgICAgaWYgKHBhaW50SW5m
by5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09
IEhJRERFTiB8fCAhbV9pbWFnZVJlc291cmNlLT5oYXNJbWFnZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpOworICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1Jl
cGFpbnRSZWN0KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQorICAg
ICAgICByZXR1cm47CisKKyAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsK
KyAgICBib29sIGRyYXdzT3V0bGluZSA9IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIChjaGls
ZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpOworICAgIGlmIChkcmF3c091dGxpbmUgfHwg
Y2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAgICAg
Y2hpbGRQYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgICAgICBjaGlsZFBhaW50SW5mby5h
cHBseVRyYW5zZm9ybShtX2xvY2FsVHJhbnNmb3JtKTsKKworICAgICAgICBpZiAoY2hpbGRQYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAgICAgICAgIFBhaW50
SW5mbyBzYXZlZEluZm8oY2hpbGRQYWludEluZm8pOworCisgICAgICAgICAgICBpZiAoU1ZHUmVu
ZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5m
bykpIHsKKyAgICAgICAgICAgICAgICBJbWFnZSogaW1hZ2UgPSBtX2ltYWdlUmVzb3VyY2UtPmlt
YWdlKCk7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gbV9vYmplY3RCb3Vu
ZGluZ0JveDsKKyAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdCgwLCAwLCBpbWFnZS0+
d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpKTsKKworICAgICAgICAgICAgICAgIFNWR0ltYWdlRWxl
bWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgp
KTsKKyAgICAgICAgICAgICAgICBpZiAoaW1hZ2VFbGVtZW50LT5wcmVzZXJ2ZUFzcGVjdFJhdGlv
KCkuYWxpZ24oKSAhPSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdfUFJFU0VSVkVBU1BFQ1RS
QVRJT19OT05FKQorICAgICAgICAgICAgICAgICAgICBpbWFnZUVsZW1lbnQtPnByZXNlcnZlQXNw
ZWN0UmF0aW8oKS50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNSZWN0KTsKKworICAgICAgICAg
ICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBTVkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxk
UGFpbnRJbmZvLCBzYXZlZEluZm8uY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
ZHJhd3NPdXRsaW5lKQorICAgICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNv
bnRleHQsIHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdCb3gueCgpKSwgc3RhdGljX2Nhc3Q8aW50
Pihib3VuZGluZ0JveC55KCkpLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYm91
bmRpbmdCb3gud2lkdGgoKSksIHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdCb3guaGVpZ2h0KCkp
KTsKKyAgICAgICAgCisgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsK
KyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyU1ZHSW1hZ2U6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorewor
ICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhp
dC10ZXN0IHRoZW4uCisgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRS
dWxlcyhQb2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19JTUFHRV9ISVRURVNUSU5HLCByZXF1ZXN0
LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxl
KCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKKyAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRS
dWxlcy5yZXF1aXJlVmlzaWJsZSkgeworICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBs
b2NhbFRvUGFyZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQp
OworICAgICAgICAgICAgCisgICAgICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNs
aXBwaW5nQXJlYSh0aGlzLCBsb2NhbFBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBpZiAoaGl0UnVsZXMuY2FuSGl0RmlsbCkgeworICAgICAgICAgICAgaWYgKG1f
b2JqZWN0Qm91bmRpbmdCb3guY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgICAg
ICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJTVkdJbWFnZTo6
aW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCopCit7CisgICAgLy8g
VGhlIGltYWdlIHJlc291cmNlIGRlZmF1bHRzIHRvIG51bGxJbWFnZSB1bnRpbCB0aGUgcmVzb3Vy
Y2UgYXJyaXZlcy4KKyAgICAvLyBUaGlzIGVtcHR5IGltYWdlIG1heSBiZSBjYWNoZWQgYnkgU1ZH
IHJlc291cmNlcyB3aGljaCBtdXN0IGJlIGludmFsaWRhdGVkLgorICAgIGlmIChTVkdSZXNvdXJj
ZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5k
ZXJPYmplY3QodGhpcykpCisgICAgICAgIHJlc291cmNlcy0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hl
KHRoaXMpOworCisgICAgLy8gRXZlbnR1YWxseSBub3RpZnkgcGFyZW50IHJlc291cmNlcywgdGhh
dCB3ZSd2ZSBjaGFuZ2VkLgorICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5k
UGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24odGhpcywgZmFsc2UpOworCisgICAgcmVwYWludCgp
OworfQorCit2b2lkIFJlbmRlclNWR0ltYWdlOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50
UmVjdD4mIHJlY3RzLCBpbnQsIGludCkKK3sKKyAgICAvLyB0aGlzIGlzIGNhbGxlZCBmcm9tIHBh
aW50KCkgYWZ0ZXIgdGhlIGxvY2FsVHJhbnNmb3JtIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZAor
ICAgIEludFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCkpOworICAgIGlmICghY29udGVudFJlY3QuaXNFbXB0eSgpKQorICAg
ICAgICByZWN0cy5hcHBlbmQoY29udGVudFJlY3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oOjc1MzQ1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGFuZGVyIEtlbGxldHQg
PGx5cGFub3ZAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgUmVuZGVyU1ZHSW1hZ2VfaAorI2RlZmluZSBSZW5kZXJTVkdJbWFnZV9oCisKKyNpZiBFTkFC
TEUoU1ZHKQorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSAiU1ZHUHJl
c2VydmVBc3BlY3RSYXRpby5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJJbWFnZVJlc291cmNlOworY2xhc3MgU1ZH
SW1hZ2VFbGVtZW50OworCitjbGFzcyBSZW5kZXJTVkdJbWFnZSA6IHB1YmxpYyBSZW5kZXJTVkdN
b2RlbE9iamVjdCB7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHSW1hZ2UoU1ZHSW1hZ2VFbGVtZW50
Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHSW1hZ2UoKTsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKKworICAgIFJlbmRlcklt
YWdlUmVzb3VyY2UqIGltYWdlUmVzb3VyY2UoKSB7IHJldHVybiBtX2ltYWdlUmVzb3VyY2UuZ2V0
KCk7IH0KKyAgICBjb25zdCBSZW5kZXJJbWFnZVJlc291cmNlKiBpbWFnZVJlc291cmNlKCkgY29u
c3QgeyByZXR1cm4gbV9pbWFnZVJlc291cmNlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR0lt
YWdlIjsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorCisgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisKKyAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0
Qm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIEZsb2F0
UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
YWludEJvdW5kaW5nQm94OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMo
VmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworCisgICAgdmlydHVhbCB2b2lkIGlt
YWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNM
YXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKKworICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRy
YW5zZm9ybTsgfQorCisgICAgYm9vbCBtX3VwZGF0ZUNhY2hlZFJlcGFpbnRSZWN0IDogMTsKKyAg
ICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOworICAgIEFmZmluZVRyYW5zZm9ybSBt
X2xvY2FsVHJhbnNmb3JtOworICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94OworICAg
IEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAgICBPd25QdHI8UmVuZGVySW1hZ2VS
ZXNvdXJjZT4gbV9pbWFnZVJlc291cmNlOworfTsKKworaW5saW5lIFJlbmRlclNWR0ltYWdlKiB0
b1JlbmRlclNWR0ltYWdlKFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2Jq
ZWN0IHx8IG9iamVjdC0+aXNTVkdJbWFnZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVu
ZGVyU1ZHSW1hZ2UqPihvYmplY3QpOworfQorCitpbmxpbmUgY29uc3QgUmVuZGVyU1ZHSW1hZ2Uq
IHRvUmVuZGVyU1ZHSW1hZ2UoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNT
RVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR0ltYWdlKCkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBSZW5kZXJTVkdJbWFnZSo+KG9iamVjdCk7Cit9CisKKy8vIFRoaXMgd2lsbCBj
YXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9SZW5kZXJTVkdJ
bWFnZShjb25zdCBSZW5kZXJTVkdJbWFnZSopOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmIC8vIFJlbmRlclNWR0ltYWdlX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxP
YmplY3QuY3BwCShyZXZpc2lvbiA3NTM0NSkJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDo3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5j
bHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKKworI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1JlbmRlclNWR01vZGVsT2JqZWN0OjpSZW5kZXJTVkdNb2RlbE9iamVjdChTVkdTdHls
ZWRFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyT2JqZWN0KG5vZGUpCit7Cit9CisKK0ludFJl
Y3QgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJl
bmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKQoreworICAgIHJldHVybiBTVkdS
ZW5kZXJTdXBwb3J0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCh0aGlzLCByZXBhaW50
Q29udGFpbmVyKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y29tcHV0ZVJlY3RG
b3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0
JiByZXBhaW50UmVjdCwgYm9vbCBmaXhlZCkKK3sKKyAgICBTVkdSZW5kZXJTdXBwb3J0Ojpjb21w
dXRlUmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWludENvbnRhaW5lciwgcmVwYWludFJlY3QsIGZp
eGVkKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6bWFwTG9jYWxUb0NvbnRhaW5l
cihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCAsIGJv
b2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAor
eworICAgIFNWR1JlbmRlclN1cHBvcnQ6Om1hcExvY2FsVG9Db250YWluZXIodGhpcywgcmVwYWlu
dENvbnRhaW5lciwgZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsKK30KKwor
Ly8gQ29waWVkIGZyb20gUmVuZGVyQm94LCB0aGlzIG1ldGhvZCBsaWtlbHkgcmVxdWlyZXMgZnVy
dGhlciByZWZhY3RvcmluZyB0byB3b3JrIGVhc2lseSBmb3IgYm90aCBTVkcgYW5kIENTUyBCb3gg
TW9kZWwgY29udGVudC4KKy8vIEZJWE1FOiBUaGlzIG1heSBhbHNvIG5lZWQgdG8gbW92ZSBpbnRv
IFNWR1JlbmRlclN1cHBvcnQgYXMgdGhlIFJlbmRlckJveCB2ZXJzaW9uIGRlcGVuZHMKKy8vIG9u
IGJvcmRlckJvdW5kaW5nQm94KCkgd2hpY2ggU1ZHIFJlbmRlckJveCBzdWJjbGFzZXMgKGxpa2Ug
U1ZHUmVuZGVyQmxvY2spIGRvIG5vdCBpbXBsZW1lbnQuCitJbnRSZWN0IFJlbmRlclNWR01vZGVs
T2JqZWN0OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgSW50UG9pbnQqKSBjb25zdAoreworICAgIEludFJlY3QgYm94ID0gZW5j
bG9zaW5nSW50UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBhZGp1
c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRvdyhib3gpOworCisgICAgRmxvYXRRdWFkIGNvbnRhaW5l
clJlbGF0aXZlUXVhZCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChib3gpLCByZXBh
aW50Q29udGFpbmVyKTsKKyAgICByZXR1cm4gY29udGFpbmVyUmVsYXRpdmVRdWFkLmVuY2xvc2lu
Z0JvdW5kaW5nQm94KCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRl
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50LCBpbnQpCit7CisgICAgLy8gVGhpcyBjb2RlIHBh
dGggc2hvdWxkIG5ldmVyIGJlIHRha2VuIGZvciBTVkcsIGFzIHdlJ3JlIGFzc3VtaW5nIHVzZVRy
YW5zZm9ybXM9dHJ1ZSBldmVyeXdoZXJlLCBhYnNvbHV0ZVF1YWRzIHNob3VsZCBiZSB1c2VkLgor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0
OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK3sKKyAgICBxdWFkcy5h
cHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3VuZGluZ0JveCgpKSk7Cit9CisKK3Zv
aWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmRlc3Ryb3koKQoreworICAgIFNWR1Jlc291cmNlc0Nh
Y2hlOjpjbGllbnREZXN0cm95ZWQodGhpcyk7CisgICAgUmVuZGVyT2JqZWN0OjpkZXN0cm95KCk7
Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnN0eWxlV2lsbENoYW5nZShTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQoreworICAgIGlmIChk
aWZmID09IFN0eWxlRGlmZmVyZW5jZUxheW91dCkKKyAgICAgICAgc2V0TmVlZHNCb3VuZGFyaWVz
VXBkYXRlKCk7CisgICAgUmVuZGVyT2JqZWN0OjpzdHlsZVdpbGxDaGFuZ2UoZGlmZiwgbmV3U3R5
bGUpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIFJl
bmRlck9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOworICAgIFNWR1Jlc291
cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nZWQodGhpcywgZGlmZiwgc3R5bGUoKSk7Cit9CisK
K3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21FbGVtZW50KCkKK3sKKyAgICBS
ZW5kZXJPYmplY3Q6OnVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6
OmNsaWVudFVwZGF0ZWRGcm9tRWxlbWVudCh0aGlzLCBzdHlsZSgpKTsKK30KKworYm9vbCBSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKQoreworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHJldmlzaW9u
IDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuaDo3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVu
ZGVyU1ZHTW9kZWxPYmplY3RfaAorI2RlZmluZSBSZW5kZXJTVkdNb2RlbE9iamVjdF9oCisKKyNp
ZiBFTkFCTEUoU1ZHKQorCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU1ZH
UmVuZGVyU3VwcG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIE1vc3QgcmVuZGVy
ZXJzIGluIHRoZSBTVkcgcmVuZGVyaW5nIHRyZWUgd2lsbCBpbmhlcml0IGZyb20gdGhpcyBjbGFz
cworLy8gYnV0IG5vdCBhbGwuIChlLmcuIFJlbmRlclNWR0ZvcmVpZ25PYmplY3QsIFJlbmRlclNW
R0Jsb2NrKSB0aHVzIG1ldGhvZHMKKy8vIHJlcXVpcmVkIGJ5IFNWRyByZW5kZXJzIG5lZWQgdG8g
YmUgZGVjbGFyZWQgb24gUmVuZGVyT2JqZWN0LCBidXQgc2hhcmVkCisvLyBsb2dpYyBjYW4gZ28g
aW4gdGhpcyBjbGFzcyBvciBpbiBTVkdSZW5kZXJTdXBwb3J0LgorCitjbGFzcyBTVkdTdHlsZWRF
bGVtZW50OworCitjbGFzcyBSZW5kZXJTVkdNb2RlbE9iamVjdCA6IHB1YmxpYyBSZW5kZXJPYmpl
Y3QgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlclNWR01vZGVsT2JqZWN0KFNWR1N0eWxl
ZEVsZW1lbnQqKTsKKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0
Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7CisgICAg
dmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CisgICAgdmly
dHVhbCBJbnRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBJbnRQb2ludCopIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lk
IGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZp
cnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveSgpOworCisgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWlu
ZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNm
b3JtcywgYm9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5l
d1N0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVG
cm9tRWxlbWVudCgpOworCitwcml2YXRlOgorICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBuZXZl
ciBiZSBjYWxsZWQsIFNWRyB1c2VzIGEgZGlmZmVyZW50IG5vZGVBdFBvaW50IG1ldGhvZAorICAg
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
aW50IHhJbkNvbnRhaW5lciwgaW50IHlJbkNvbnRhaW5lciwgaW50IGR4UGFyZW50VG9Db250YWlu
ZXIsIGludCBkeVBhcmVudFRvQ29udGFpbmVyLCBIaXRUZXN0QWN0aW9uKTsKK307CisKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA3NTM0NSkJ
KGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmNwcDo3NTM0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2Uu
aCIKKworI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCisjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgi
CisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIGlubGluZSBSZW5kZXJTVkdSZXNvdXJjZSogcmVxdWVzdFBhaW50aW5nUmVzb3VyY2Uo
UmVuZGVyU1ZHUmVzb3VyY2VNb2RlIG1vZGUsIFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUsIENvbG9yJiBmYWxsYmFja0NvbG9yKQoreworICAgIEFTU0VSVChv
YmplY3QpOworICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICAvLyBJZiB3ZSBoYXZlIG5vIHN0eWxl
IGF0IGFsbCwgaWdub3JlIGl0LgorICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9
IHN0eWxlLT5zdmdTdHlsZSgpOworICAgIGlmICghc3ZnU3R5bGUpCisgICAgICAgIHJldHVybiAw
OworCisgICAgLy8gSWYgd2UgaGF2ZSBubyBmaWxsL3N0cm9rZSwgcmV0dXJuIDAuCisgICAgaWYg
KG1vZGUgPT0gQXBwbHlUb0ZpbGxNb2RlKSB7CisgICAgICAgIGlmICghc3ZnU3R5bGUtPmhhc0Zp
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICgh
c3ZnU3R5bGUtPmhhc1N0cm9rZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgU1ZHUGFpbnQqIHBhaW50ID0gbW9kZSA9PSBBcHBseVRvRmlsbE1vZGUgPyBzdmdTdHlsZS0+
ZmlsbFBhaW50KCkgOiBzdmdTdHlsZS0+c3Ryb2tlUGFpbnQoKTsKKyAgICBBU1NFUlQocGFpbnQp
OworCisgICAgU1ZHUGFpbnQ6OlNWR1BhaW50VHlwZSBwYWludFR5cGUgPSBwYWludC0+cGFpbnRU
eXBlKCk7CisgICAgaWYgKHBhaW50VHlwZSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9OT05F
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIENvbG9yIGNvbG9yOworICAgIGlmIChwYWludFR5
cGUgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfUkdCQ09MT1IKKyAgICAgICAgfHwgcGFpbnRU
eXBlID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1JHQkNPTE9SX0lDQ0NPTE9SCisgICAgICAg
IHx8IHBhaW50VHlwZSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfUkdCQ09MT1IKKyAg
ICAgICAgfHwgcGFpbnRUeXBlID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1VSSV9SR0JDT0xP
Ul9JQ0NDT0xPUikKKyAgICAgICAgY29sb3IgPSBwYWludC0+Y29sb3IoKTsKKyAgICBlbHNlIGlm
IChwYWludFR5cGUgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SIHx8IHBh
aW50VHlwZSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfQ1VSUkVOVENPTE9SKQorICAg
ICAgICBjb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xv
cik7CisKKyAgICBpZiAoc3R5bGUtPmluc2lkZUxpbmsoKSA9PSBJbnNpZGVWaXNpdGVkTGluaykg
eworICAgICAgICBSZW5kZXJTdHlsZSogdmlzaXRlZFN0eWxlID0gc3R5bGUtPmdldENhY2hlZFBz
ZXVkb1N0eWxlKFZJU0lURURfTElOSyk7CisgICAgICAgIEFTU0VSVCh2aXNpdGVkU3R5bGUpOwor
CisgICAgICAgIGlmIChTVkdQYWludCogdmlzaXRlZFBhaW50ID0gbW9kZSA9PSBBcHBseVRvRmls
bE1vZGUgPyB2aXNpdGVkU3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxQYWludCgpIDogdmlzaXRlZFN0
eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VQYWludCgpKSB7CisgICAgICAgICAgICAvLyBGb3IgU1ZH
X1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IsICdjb2xvcicgYWxyZWFkeSBjb250YWlucyB0aGUgJ3Zp
c2l0ZWRDb2xvcicuCisgICAgICAgICAgICBpZiAodmlzaXRlZFBhaW50LT5wYWludFR5cGUoKSA8
IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1VSSV9OT05FICYmIHZpc2l0ZWRQYWludC0+cGFpbnRU
eXBlKCkgIT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SKSB7CisgICAgICAg
ICAgICAgICAgY29uc3QgQ29sb3ImIHZpc2l0ZWRDb2xvciA9IHZpc2l0ZWRQYWludC0+Y29sb3Io
KTsKKyAgICAgICAgICAgICAgICBpZiAodmlzaXRlZENvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29sb3IgPSBDb2xvcih2aXNpdGVkQ29sb3IucmVkKCksIHZpc2l0ZWRDb2xv
ci5ncmVlbigpLCB2aXNpdGVkQ29sb3IuYmx1ZSgpLCBjb2xvci5hbHBoYSgpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHRoZSBwcmltYXJ5IHJlc291cmNl
IGlzIGp1c3QgYSBjb2xvciwgcmV0dXJuIGltbWVkaWF0ZWx5LgorICAgIFJlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvciogY29sb3JSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRT
b2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKKyAgICBpZiAocGFpbnRUeXBlIDwgU1ZHUGFpbnQ6OlNW
R19QQUlOVFRZUEVfVVJJX05PTkUpIHsKKyAgICAgICAgLy8gSWYgYW4gaW52YWxpZCBmaWxsIGNv
bG9yIGlzIHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gZmlsbC9zdHJva2U9Im5vbmUiLgorICAgICAg
ICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAg
IGNvbG9yUmVzb3VyY2UtPnNldENvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuIGNvbG9yUmVz
b3VyY2U7CisgICAgfQorCisgICAgLy8gSWYgbm8gcmVzb3VyY2VzIGFyZSBhc3NvY2lhdGVkIHdp
dGggdGhlIGdpdmVuIHJlbmRlcmVyLCByZXR1cm4gdGhlIGNvbG9yIHJlc291cmNlLgorICAgIFNW
R1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNl
c0ZvclJlbmRlck9iamVjdChvYmplY3QpOworICAgIGlmICghcmVzb3VyY2VzKSB7CisgICAgICAg
IC8vIElmIGEgcGFpbnQgc2VydmVyIGlzIHNwZWNpZmllZCwgYW5kIG5vIG9yIGFuIGludmFsaWQg
ZmFsbGJhY2sgY29sb3IgaXMgZ2l2ZW4sIGRlZmF1bHQgdG8gZmlsbC9zdHJva2U9ImJsYWNrIi4K
KyAgICAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBjb2xvciA9IENvbG9y
OjpibGFjazsKKworICAgICAgICBjb2xvclJlc291cmNlLT5zZXRDb2xvcihjb2xvcik7CisgICAg
ICAgIHJldHVybiBjb2xvclJlc291cmNlOworICAgIH0KKworICAgIC8vIElmIHRoZSByZXF1ZXN0
ZWQgcmVzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSwgcmV0dXJuIHRoZSBjb2xvciByZXNvdXJjZS4K
KyAgICBSZW5kZXJTVkdSZXNvdXJjZSogdXJpUmVzb3VyY2UgPSBtb2RlID09IEFwcGx5VG9GaWxs
TW9kZSA/IHJlc291cmNlcy0+ZmlsbCgpIDogcmVzb3VyY2VzLT5zdHJva2UoKTsKKyAgICBpZiAo
IXVyaVJlc291cmNlKSB7CisgICAgICAgIC8vIElmIGEgcGFpbnQgc2VydmVyIGlzIHNwZWNpZmll
ZCwgYW5kIG5vIG9yIGFuIGludmFsaWQgZmFsbGJhY2sgY29sb3IgaXMgZ2l2ZW4sIGRlZmF1bHQg
dG8gZmlsbC9zdHJva2U9ImJsYWNrIi4KKyAgICAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICBjb2xvciA9IENvbG9yOjpibGFjazsKKworICAgICAgICBjb2xvclJlc291cmNl
LT5zZXRDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVybiBjb2xvclJlc291cmNlOworICAgIH0K
KworICAgIC8vIFRoZSBwYWludCBzZXJ2ZXIgcmVzb3VyY2UgZXhpc3RzLCB0aG91Z2ggaXQgbWF5
IGJlIGludmFsaWQgKHBhdHRlcm4gd2l0aCB3aWR0aC9oZWlnaHQ9MCkuIFBhc3MgdGhlIGZhbGxi
YWNrIGNvbG9yIHRvIG91ciBjYWxsZXIKKyAgICAvLyBzbyBpdCBjYW4gdXNlIHRoZSBzb2xpZCBj
b2xvciBwYWludGluZyByZXNvdXJjZSwgaWYgYXBwbHlSZXNvdXJjZSgpIG9uIHRoZSBVUkkgcmVz
b3VyY2UgZmFpbGVkLgorICAgIGZhbGxiYWNrQ29sb3IgPSBjb2xvcjsKKyAgICByZXR1cm4gdXJp
UmVzb3VyY2U7Cit9CisKK1JlbmRlclNWR1Jlc291cmNlKiBSZW5kZXJTVkdSZXNvdXJjZTo6Zmls
bFBhaW50aW5nUmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlclN0eWxl
KiBzdHlsZSwgQ29sb3ImIGZhbGxiYWNrQ29sb3IpCit7CisgICAgcmV0dXJuIHJlcXVlc3RQYWlu
dGluZ1Jlc291cmNlKEFwcGx5VG9GaWxsTW9kZSwgb2JqZWN0LCBzdHlsZSwgZmFsbGJhY2tDb2xv
cik7Cit9CisKK1JlbmRlclNWR1Jlc291cmNlKiBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlLCBDb2xvciYgZmFsbGJhY2tDb2xvcikKK3sKKyAgICByZXR1cm4gcmVxdWVzdFBhaW50aW5n
UmVzb3VyY2UoQXBwbHlUb1N0cm9rZU1vZGUsIG9iamVjdCwgc3R5bGUsIGZhbGxiYWNrQ29sb3Ip
OworfQorCitSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIFJlbmRlclNWR1Jlc291cmNlOjpz
aGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKQoreworICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IqIHNfc2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlID0gMDsKKyAgICBp
ZiAoIXNfc2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKQorICAgICAgICBzX3NoYXJlZFNvbGlk
UGFpbnRpbmdSZXNvdXJjZSA9IG5ldyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I7CisgICAg
cmV0dXJuIHNfc2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlOworfQorCit2b2lkIFJlbmRlclNW
R1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIGJvb2wgbmVlZHNMYXlvdXQpCit7CisgICAgQVNTRVJUKG9iamVj
dCk7CisgICAgaWYgKG5lZWRzTGF5b3V0KQorICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0
KHRydWUpOworCisgICAgLy8gSW52YWxpZGF0ZSByZXNvdXJjZXMgaW4gYW5jZXN0b3IgY2hhaW4s
IGlmIG5lZWRlZC4KKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBvYmplY3QtPnBhcmVudCgp
OworICAgIHdoaWxlIChjdXJyZW50KSB7CisgICAgICAgIGlmIChjdXJyZW50LT5pc1NWR1Jlc291
cmNlQ29udGFpbmVyKCkpIHsKKyAgICAgICAgICAgIGN1cnJlbnQtPnRvUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIoKS0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50KCk7
CisgICAgfQorfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oOjc1MzQ1KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBSZW5k
ZXJTVkdSZXNvdXJjZV9oCisjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlX2gKKworI2lmIEVOQUJM
RShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKKyNpbmNsdWRlICJTVkdE
b2N1bWVudEV4dGVuc2lvbnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIFJlbmRl
clNWR1Jlc291cmNlVHlwZSB7CisgICAgTWFza2VyUmVzb3VyY2VUeXBlLAorICAgIE1hcmtlclJl
c291cmNlVHlwZSwKKyAgICBQYXR0ZXJuUmVzb3VyY2VUeXBlLAorICAgIExpbmVhckdyYWRpZW50
UmVzb3VyY2VUeXBlLAorICAgIFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBlLAorICAgIFNvbGlk
Q29sb3JSZXNvdXJjZVR5cGUsCisgICAgRmlsdGVyUmVzb3VyY2VUeXBlLAorICAgIENsaXBwZXJS
ZXNvdXJjZVR5cGUKK307CisKK2VudW0gUmVuZGVyU1ZHUmVzb3VyY2VNb2RlIHsKKyAgICBBcHBs
eVRvRGVmYXVsdE1vZGUgPSAxIDw8IDAsIC8vIHVzZWQgZm9yIGFsbCByZXNvdXJjZXMgZXhjZXB0
IGdyYWRpZW50L3BhdHRlcm4KKyAgICBBcHBseVRvRmlsbE1vZGUgICAgPSAxIDw8IDEsCisgICAg
QXBwbHlUb1N0cm9rZU1vZGUgID0gMSA8PCAyLAorICAgIEFwcGx5VG9UZXh0TW9kZSAgICA9IDEg
PDwgMyAvLyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggQXBwbHlUb3tGaWxsfFN0cm9rZX1Nb2Rl
Cit9OworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKK2NsYXNzIFBhdGg7CitjbGFzcyBSZW5kZXJPYmplY3Q7CitjbGFzcyBSZW5kZXJTdHls
ZTsKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjsKKworY2xhc3MgUmVuZGVyU1ZH
UmVzb3VyY2UgeworcHVibGljOgorICAgIFJlbmRlclNWR1Jlc291cmNlKCkgeyB9CisgICAgdmly
dHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2UoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVB
bGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJv
b2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBh
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0
KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBw
b3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWdu
ZWQgc2hvcnQsIGNvbnN0IFBhdGgqKSB7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJj
ZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopID0gMDsKKworICAgIHZpcnR1YWwgUmVuZGVyU1ZH
UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0ID0gMDsKKworICAgIHRlbXBsYXRlPGNs
YXNzIFJlbmRlcmVyPgorICAgIFJlbmRlcmVyKiBjYXN0KCkKKyAgICB7CisgICAgICAgIGlmIChS
ZW5kZXJlcjo6c19yZXNvdXJjZVR5cGUgPT0gcmVzb3VyY2VUeXBlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyZXIqPih0aGlzKTsKKworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICAvLyBIZWxwZXIgdXRpbGl0aWVzIHVzZWQgaW4gdGhlIHJlbmRlciB0cmVl
IHRvIGFjY2VzcyByZXNvdXJjZXMgdXNlZCBmb3IgcGFpbnRpbmcgc2hhcGVzL3RleHQgKGdyYWRp
ZW50cyAmIHBhdHRlcm5zICYgc29saWQgY29sb3JzIG9ubHkpCisgICAgc3RhdGljIFJlbmRlclNW
R1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJTdHlsZSosIENvbG9yJiBmYWxsYmFja0NvbG9yKTsKKyAgICBzdGF0aWMgUmVuZGVyU1ZHUmVz
b3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
U3R5bGUqLCBDb2xvciYgZmFsbGJhY2tDb2xvcik7CisgICAgc3RhdGljIFJlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvciogc2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CisKKyAgICBzdGF0
aWMgdm9pZCBtYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oUmVuZGVy
T2JqZWN0KiwgYm9vbCBuZWVkc0xheW91dCA9IHRydWUpOworfTsKKworfQorCisjZW5kaWYKKyNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOjc1MzQ1KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXF1
ZXN0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNp
bmNsdWRlICJTVkdDbGlwUGF0aEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisj
aW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJUb29scy5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisj
aW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgor
I2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgorI2luY2x1ZGUgIlNW
R1VzZUVsZW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZW5kZXJTVkdSZXNvdXJjZVR5cGUgUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyOjpzX3Jlc291cmNlVHlwZSA9IENsaXBwZXJSZXNvdXJjZVR5cGU7CisKK1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlcjo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKFNWR0NsaXBQYXRoRWxlbWVu
dCogbm9kZSkKKyAgICA6IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKG5vZGUpCisgICAgLCBt
X2ludmFsaWRhdGlvbkJsb2NrZWQoZmFsc2UpCit7Cit9CisKK1JlbmRlclNWR1Jlc291cmNlQ2xp
cHBlcjo6flJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcigpCit7CisgICAgaWYgKG1fY2xpcHBlci5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2NsaXBw
ZXIpOworICAgIG1fY2xpcHBlci5jbGVhcigpOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlcjo6cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlkYXRp
b24pCit7CisgICAgaWYgKG1faW52YWxpZGF0aW9uQmxvY2tlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9jbGlwQm91bmRhcmllcyA9IEZsb2F0UmVjdCgpOworICAgIGlmICghbV9jbGlwcGVy
LmlzRW1wdHkoKSkgeworICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9jbGlwcGVyKTsKKyAgICAg
ICAgbV9jbGlwcGVyLmNsZWFyKCk7CisgICAgfQorCisgICAgbWFya0FsbENsaWVudHNGb3JJbnZh
bGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IExheW91dEFuZEJvdW5kYXJpZXNJbnZhbGlk
YXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXI6OnJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqIGNsaWVudCwg
Ym9vbCBtYXJrRm9ySW52YWxpZGF0aW9uKQoreworICAgIEFTU0VSVChjbGllbnQpOworICAgIGlm
IChtX2ludmFsaWRhdGlvbkJsb2NrZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Ns
aXBwZXIuY29udGFpbnMoY2xpZW50KSkKKyAgICAgICAgZGVsZXRlIG1fY2xpcHBlci50YWtlKGNs
aWVudCk7CisKKyAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGNsaWVudCwgbWFya0Zvcklu
dmFsaWRhdGlvbiA/IEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0
aW9uKTsKK30KKworYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5UmVzb3VyY2Uo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYgY29u
dGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKQoreworICAgIEFTU0VSVChvYmplY3Qp
OworICAgIEFTU0VSVChjb250ZXh0KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKHJlc291
cmNlTW9kZSA9PSBBcHBseVRvRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
cmVzb3VyY2VNb2RlKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGFwcGx5Q2xpcHBpbmdUb0NvbnRl
eHQob2JqZWN0LCBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCksIG9iamVjdC0+cmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSwgY29udGV4dCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyOjpwYXRoT25seUNsaXBwaW5nKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCkKK3sKKyAgICAvLyBJZiB0aGUgY3Vy
cmVudCBjbGlwLXBhdGggZ2V0cyBjbGlwcGVkIGl0c2VsZiwgd2UgaGF2ZSB0byBmYWxsYmFjayB0
byBtYXNraW5nLgorICAgIGlmICghc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2xpcHBlclJlc291cmNl
KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2luZFJ1bGUgY2xpcFJ1
bGUgPSBSVUxFX05PTlpFUk87CisgICAgUGF0aCBjbGlwUGF0aCA9IFBhdGgoKTsKKworICAgIC8v
IElmIGNsaXAtcGF0aCBvbmx5IGNvbnRhaW5zIG9uZSB2aXNpYmxlIHNoYXBlIG9yIHBhdGgsIHdl
IGNhbiB1c2UgcGF0aC1iYXNlZCBjbGlwcGluZy4gSW52aXNpYmxlCisgICAgLy8gc2hhcGVzIGRv
bid0IGFmZmVjdCB0aGUgY2xpcHBpbmcgYW5kIGNhbiBiZSBpZ25vcmVkLiBJZiBjbGlwLXBhdGgg
Y29udGFpbnMgbW9yZSB0aGFuIG9uZQorICAgIC8vIHZpc2libGUgc2hhcGUsIHRoZSBhZGRpdGl2
ZSBjbGlwcGluZyBtYXkgbm90IHdvcmssIGNhdXNlZCBieSB0aGUgY2xpcFJ1bGUuIEV2ZW5PZGQK
KyAgICAvLyBhcyB3ZWxsIGFzIE5vblplcm8gY2FuIGNhdXNlIHNlbGYtY2xpcHBpbmcgb2YgdGhl
IGVsZW1lbnRzLgorICAgIC8vIFNlZSBhbHNvIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9wYWlu
dGluZy5odG1sI0ZpbGxSdWxlUHJvcGVydHkKKyAgICBmb3IgKE5vZGUqIGNoaWxkTm9kZSA9IG5v
ZGUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZE5vZGU7IGNoaWxkTm9kZSA9IGNoaWxkTm9kZS0+bmV4
dFNpYmxpbmcoKSkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2Rl
LT5yZW5kZXJlcigpOworICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIC8vIE9ubHkgc2hhcGVzIG9yIHBhdGhzIGFyZSBzdXBwb3J0ZWQgZm9yIGRp
cmVjdCBjbGlwcGluZy4gV2UgbmVlZCB0byBmYWxsYmFjayB0byBtYXNraW5nIGZvciB0ZXh0cy4K
KyAgICAgICAgaWYgKHJlbmRlcmVyLT5pc1NWR1RleHQoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNf
Y2FzdDxTVkdFbGVtZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQqIHN0eWxlZCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4o
Y2hpbGROb2RlKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxl
KCk7CisgICAgICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0
eWxlLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7
CisgICAgICAgIC8vIEN1cnJlbnQgc2hhcGUgaW4gY2xpcC1wYXRoIGdldHMgY2xpcHBlZCB0b28u
IEZhbGxiYWNrIHRvIG1hc2tpbmcuCisgICAgICAgIGlmICghc3ZnU3R5bGUtPmNsaXBwZXJSZXNv
dXJjZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8g
RmFsbGJhY2sgdG8gbWFza2luZywgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjbGlwcGluZyBw
YXRoLgorICAgICAgICBpZiAoY2xpcFBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBzdHls
ZWQtPnRvQ2xpcFBhdGgoY2xpcFBhdGgpOworICAgICAgICAgICAgY2xpcFJ1bGUgPSBzdmdTdHls
ZS0+Y2xpcFJ1bGUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIC8vIE9ubHkgb25lIHZpc2libGUgc2hhcGUvcGF0aCB3YXMgZm91bmQuIERp
cmVjdGx5IGNvbnRpbnVlIGNsaXBwaW5nIGFuZCB0cmFuc2Zvcm0gdGhlIGNvbnRlbnQgdG8gdXNl
cnNwYWNlIGlmIG5lY2Vzc2FyeS4KKyAgICBpZiAoc3RhdGljX2Nhc3Q8U1ZHQ2xpcFBhdGhFbGVt
ZW50Kj4obm9kZSgpKS0+Y2xpcFBhdGhVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRf
VFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgeworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNm
b3JtOworICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG9iamVjdEJvdW5kaW5nQm94LngoKSwg
b2JqZWN0Qm91bmRpbmdCb3gueSgpKTsKKyAgICAgICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9y
bShvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpLCBvYmplY3RCb3VuZGluZ0JveC5oZWlnaHQoKSk7
CisgICAgICAgIGNsaXBQYXRoLnRyYW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIH0KKyAgICAvLyBU
aGUgU1ZHIHNwZWNpZmljYXRpb24gd2FudHMgdXMgdG8gY2xpcCBldmVyeXRoaW5nLCBpZiBjbGlw
LXBhdGggZG9lc24ndCBoYXZlIGEgY2hpbGQuCisgICAgaWYgKGNsaXBQYXRoLmlzRW1wdHkoKSkK
KyAgICAgICAgY2xpcFBhdGguYWRkUmVjdChGbG9hdFJlY3QoKSk7CisgICAgY29udGV4dC0+Y2xp
cFBhdGgoY2xpcFBhdGgsIGNsaXBSdWxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFJlY3QmIHJlcGFpbnRSZWN0LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgaWYg
KCFtX2NsaXBwZXIuY29udGFpbnMob2JqZWN0KSkKKyAgICAgICAgbV9jbGlwcGVyLnNldChvYmpl
Y3QsIG5ldyBDbGlwcGVyRGF0YSk7CisKKyAgICBib29sIHNob3VsZENyZWF0ZUNsaXBEYXRhID0g
ZmFsc2U7CisgICAgQ2xpcHBlckRhdGEqIGNsaXBwZXJEYXRhID0gbV9jbGlwcGVyLmdldChvYmpl
Y3QpOworICAgIGlmICghY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UpIHsKKyAgICAgICAgaWYg
KHBhdGhPbmx5Q2xpcHBpbmcoY29udGV4dCwgb2JqZWN0Qm91bmRpbmdCb3gpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHNob3VsZENyZWF0ZUNsaXBEYXRhID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm07CisgICAgU1ZHSW1h
Z2VCdWZmZXJUb29sczo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3Jk
aW5hdGVTeXN0ZW0ob2JqZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7CisKKyAgICBGbG9hdFJlY3Qg
YWJzb2x1dGVUYXJnZXRSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChyZXBhaW50UmVj
dCk7CisgICAgRmxvYXRSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1
ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIob2JqZWN0LCBh
YnNvbHV0ZVRhcmdldFJlY3QpOworCisgICAgaWYgKHNob3VsZENyZWF0ZUNsaXBEYXRhICYmICFj
bGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoIVNWR0lt
YWdlQnVmZmVyVG9vbHM6OmNyZWF0ZUltYWdlQnVmZmVyKGFic29sdXRlVGFyZ2V0UmVjdCwgY2xh
bXBlZEFic29sdXRlVGFyZ2V0UmVjdCwgY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UsIENvbG9y
U3BhY2VEZXZpY2VSR0IpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dCogbWFza0NvbnRleHQgPSBjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZS0+
Y29udGV4dCgpOworICAgICAgICBBU1NFUlQobWFza0NvbnRleHQpOworCisgICAgICAgIC8vIFRo
ZSBzYXZlL3Jlc3RvcmUgcGFpciBpcyBuZWVkZWQgZm9yIGNsaXBUb0ltYWdlQnVmZmVyIC0gaXQg
ZG9lc24ndCB3b3JrIHdpdGhvdXQgaXQgb24gbm9uLUNnIHBsYXRmb3Jtcy4KKyAgICAgICAgbWFz
a0NvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgbWFza0NvbnRleHQtPnRyYW5zbGF0ZSgtY2xhbXBl
ZEFic29sdXRlVGFyZ2V0UmVjdC54KCksIC1jbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LnkoKSk7
CisgICAgICAgIG1hc2tDb250ZXh0LT5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0pOworCisg
ICAgICAgIC8vIGNsaXBQYXRoIGNhbiBhbHNvIGJlIGNsaXBwZWQgYnkgYW5vdGhlciBjbGlwUGF0
aC4KKyAgICAgICAgaWYgKFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2Fj
aGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlzKSkgeworICAgICAgICAgICAg
aWYgKFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBlciA9IHJlc291cmNlcy0+Y2xpcHBl
cigpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjbGlwcGVyLT5hcHBseUNsaXBwaW5nVG9Db250
ZXh0KHRoaXMsIG9iamVjdEJvdW5kaW5nQm94LCByZXBhaW50UmVjdCwgbWFza0NvbnRleHQpKSB7
CisgICAgICAgICAgICAgICAgICAgIG1hc2tDb250ZXh0LT5yZXN0b3JlKCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBkcmF3Q29udGVudEludG9NYXNrSW1hZ2UoY2xpcHBlckRh
dGEsIG9iamVjdEJvdW5kaW5nQm94KTsKKyAgICAgICAgbWFza0NvbnRleHQtPnJlc3RvcmUoKTsK
KyAgICB9CisKKyAgICBpZiAoIWNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGlwVG9JbWFnZUJ1ZmZl
cihjb250ZXh0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCwg
Y2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKENsaXBw
ZXJEYXRhKiBjbGlwcGVyRGF0YSwgY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCkK
K3sKKyAgICBBU1NFUlQoY2xpcHBlckRhdGEpOworICAgIEFTU0VSVChjbGlwcGVyRGF0YS0+Y2xp
cE1hc2tJbWFnZSk7CisKKyAgICBHcmFwaGljc0NvbnRleHQqIG1hc2tDb250ZXh0ID0gY2xpcHBl
ckRhdGEtPmNsaXBNYXNrSW1hZ2UtPmNvbnRleHQoKTsKKyAgICBBU1NFUlQobWFza0NvbnRleHQp
OworCisgICAgQWZmaW5lVHJhbnNmb3JtIG1hc2tDb250ZW50VHJhbnNmb3JtYXRpb247CisgICAg
U1ZHQ2xpcFBhdGhFbGVtZW50KiBjbGlwUGF0aCA9IHN0YXRpY19jYXN0PFNWR0NsaXBQYXRoRWxl
bWVudCo+KG5vZGUoKSk7CisgICAgaWYgKGNsaXBQYXRoLT5jbGlwUGF0aFVuaXRzKCkgPT0gU1ZH
VW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7CisgICAgICAgIG1h
c2tDb250ZW50VHJhbnNmb3JtYXRpb24udHJhbnNsYXRlKG9iamVjdEJvdW5kaW5nQm94LngoKSwg
b2JqZWN0Qm91bmRpbmdCb3gueSgpKTsKKyAgICAgICAgbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlv
bi5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRp
bmdCb3guaGVpZ2h0KCkpOworICAgICAgICBtYXNrQ29udGV4dC0+Y29uY2F0Q1RNKG1hc2tDb250
ZW50VHJhbnNmb3JtYXRpb24pOworICAgIH0KKworICAgIC8vIERyYXcgYWxsIGNsaXBQYXRoIGNo
aWxkcmVuIGludG8gYSBnbG9iYWwgbWFzay4KKyAgICBmb3IgKE5vZGUqIGNoaWxkTm9kZSA9IG5v
ZGUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZE5vZGU7IGNoaWxkTm9kZSA9IGNoaWxkTm9kZS0+bmV4
dFNpYmxpbmcoKSkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2Rl
LT5yZW5kZXJlcigpOworICAgICAgICBpZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwg
IXN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihjaGlsZE5vZGUpLT5pc1N0eWxlZCgpIHx8ICFyZW5k
ZXJlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+ZGlzcGxh
eSgpID09IE5PTkUgfHwgc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgV2luZFJ1bGUgbmV3Q2xpcFJ1bGUgPSBzdHlsZS0+c3Zn
U3R5bGUoKS0+Y2xpcFJ1bGUoKTsKKyAgICAgICAgYm9vbCBpc1VzZUVsZW1lbnQgPSByZW5kZXJl
ci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpOworICAgICAgICBpZiAoaXNVc2VFbGVt
ZW50KSB7CisgICAgICAgICAgICBTVkdVc2VFbGVtZW50KiB1c2VFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8U1ZHVXNlRWxlbWVudCo+KGNoaWxkTm9kZSk7CisgICAgICAgICAgICByZW5kZXJlciA9IHVz
ZUVsZW1lbnQtPnJlbmRlcmVyQ2xpcENoaWxkKCk7CisgICAgICAgICAgICBpZiAoIXJlbmRlcmVy
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCF1c2VFbGVtZW50
LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmNsaXBfcnVsZUF0dHIpKQorICAgICAgICAgICAgICAg
IG5ld0NsaXBSdWxlID0gcmVuZGVyZXItPnN0eWxlKCktPnN2Z1N0eWxlKCktPmNsaXBSdWxlKCk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBPbmx5IHNoYXBlcywgcGF0aHMgYW5kIHRleHRzIGFy
ZSBhbGxvd2VkIGZvciBjbGlwcGluZy4KKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRo
KCkgJiYgIXJlbmRlcmVyLT5pc1NWR1RleHQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIC8vIFNhdmUgdGhlIG9sZCBSZW5kZXJTdHlsZSBvZiB0aGUgY3VycmVudCBvYmplY3Qg
Zm9yIHJlc3RvcmluZyBhZnRlciBkcmF3aW5nCisgICAgICAgIC8vIGl0IHRvIHRoZSBNYXNrSW1h
Z2UuIFRoZSBuZXcgaW50ZXJtZWRpYXRlIFJlbmRlclN0eWxlIG5lZWRzIHRvIGluaGVyaXQgZnJv
bQorICAgICAgICAvLyB0aGUgb2xkIG9uZS4KKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBv
bGRSZW5kZXJTdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgICAgICBSZWZQdHI8UmVuZGVy
U3R5bGU+IG5ld1JlbmRlclN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKG9sZFJlbmRlclN0eWxl
LmdldCgpKTsKKyAgICAgICAgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gbmV3UmVuZGVyU3R5
bGUuZ2V0KCktPmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgICAgIHN2Z1N0eWxlLT5zZXRGaWxsUGFp
bnQoU1ZHUGFpbnQ6OmRlZmF1bHRGaWxsKCkpOworICAgICAgICBzdmdTdHlsZS0+c2V0U3Ryb2tl
UGFpbnQoU1ZHUGFpbnQ6OmRlZmF1bHRTdHJva2UoKSk7CisgICAgICAgIHN2Z1N0eWxlLT5zZXRG
aWxsUnVsZShuZXdDbGlwUnVsZSk7CisgICAgICAgIG5ld1JlbmRlclN0eWxlLmdldCgpLT5zZXRP
cGFjaXR5KDEuMGYpOworICAgICAgICBzdmdTdHlsZS0+c2V0RmlsbE9wYWNpdHkoMS4wZik7Cisg
ICAgICAgIHN2Z1N0eWxlLT5zZXRTdHJva2VPcGFjaXR5KDEuMGYpOworICAgICAgICBzdmdTdHls
ZS0+c2V0RmlsdGVyUmVzb3VyY2UoU3RyaW5nKCkpOworICAgICAgICBzdmdTdHlsZS0+c2V0TWFz
a2VyUmVzb3VyY2UoU3RyaW5nKCkpOworCisgICAgICAgIC8vIFRoZSBzZXRTdHlsZSgpIGNhbGwg
cmVzdWx0cyBpbiBhIHN0eWxlRGlkQ2hhbmdlKCkgY2FsbCwgd2hpY2ggaW4gdHVybiBpbnZhbGlk
YXRpb25zIHRoZSByZXNvdXJjZXMuCisgICAgICAgIC8vIEFzIHdlJ3JlIG11dGF0aW5nIHRoZSBy
ZXNvdXJjZSBvbiBwdXJwb3NlLCBibG9jayB1cGRhdGVzIHVudGlsIHdlJ3ZlIHJlc2V0dGVkIHRo
ZSBzdHlsZSBhZ2Fpbi4KKyAgICAgICAgbV9pbnZhbGlkYXRpb25CbG9ja2VkID0gdHJ1ZTsKKyAg
ICAgICAgcmVuZGVyZXItPnNldFN0eWxlKG5ld1JlbmRlclN0eWxlLnJlbGVhc2UoKSk7CisKKyAg
ICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSA8dXNlPiBlbGVtZW50LCB3ZSBvYnRhaW5lZCBpdHMg
cmVuZGVyZXJlIGFib3ZlLCB0byByZXRyaWV2ZSBpdHMgY2xpcFJ1bGUuCisgICAgICAgIC8vIFdl
IGhhdmUgdG8gcGFzcyB0aGUgPHVzZT4gcmVuZGVyZXIgaXRzZWxmIHRvIHJlbmRlclN1YnRyZWVU
b0ltYWdlQnVmZmVyKCkgdG8gYXBwbHkgaXQncyB4L3kvdHJhbnNmb3JtL2V0Yy4gdmFsdWVzIHdo
ZW4gcmVuZGVyaW5nLgorICAgICAgICAvLyBTbyBpZiBpc1VzZUVsZW1lbnQgaXMgdHJ1ZSwgcmVm
ZXRjaCB0aGUgY2hpbGROb2RlLT5yZW5kZXJlcigpLCBhcyByZW5kZXJlciBnb3Qgb3ZlcnJpZGVu
IGFib3ZlLgorICAgICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyZW5kZXJTdWJ0cmVlVG9JbWFn
ZUJ1ZmZlcihjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZS5nZXQoKSwgaXNVc2VFbGVtZW50ID8g
Y2hpbGROb2RlLT5yZW5kZXJlcigpIDogcmVuZGVyZXIsIG1hc2tDb250ZW50VHJhbnNmb3JtYXRp
b24pOworCisgICAgICAgIHJlbmRlcmVyLT5zZXRTdHlsZShvbGRSZW5kZXJTdHlsZS5yZWxlYXNl
KCkpOworICAgICAgICBtX2ludmFsaWRhdGlvbkJsb2NrZWQgPSBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmNhbGN1
bGF0ZUNsaXBDb250ZW50UmVwYWludFJlY3QoKQoreworICAgIC8vIFRoaXMgaXMgYSByb3VnaCBo
ZXVyaXN0aWMgdG8gYXBwcmFpc2UgdGhlIGNsaXAgc2l6ZSBhbmQgZG9lc24ndCBjb25zaWRlciBj
bGlwIG9uIGNsaXAuCisgICAgZm9yIChOb2RlKiBjaGlsZE5vZGUgPSBub2RlKCktPmZpcnN0Q2hp
bGQoKTsgY2hpbGROb2RlOyBjaGlsZE5vZGUgPSBjaGlsZE5vZGUtPm5leHRTaWJsaW5nKCkpIHsK
KyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsK
KyAgICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJl
bmRlcmVyLT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250
YWluZXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+ZGlz
cGxheSgpID09IE5PTkUgfHwgc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2NsaXBCb3VuZGFyaWVzLnVuaXRlKHJlbmRlcmVy
LT5sb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSkpOworICAgIH0KK30KKworYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29udGVudChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5k
aW5nQm94LCBjb25zdCBGbG9hdFBvaW50JiBub2RlQXRQb2ludCkKK3sKKyAgICBGbG9hdFBvaW50
IHBvaW50ID0gbm9kZUF0UG9pbnQ7CisgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludElu
Q2xpcHBpbmdBcmVhKHRoaXMsIHBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKHN0YXRpY19jYXN0PFNWR0NsaXBQYXRoRWxlbWVudCo+KG5vZGUoKSktPmNsaXBQYXRoVW5p
dHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsK
KyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICAgICAgdHJhbnNmb3JtLnRy
YW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7Cisg
ICAgICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgo
KSwgb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOworICAgICAgICBwb2ludCA9IHRyYW5zZm9y
bS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnQpOworICAgIH0KKworICAgIGZvciAoTm9kZSogY2hp
bGROb2RlID0gbm9kZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkTm9kZTsgY2hpbGROb2RlID0gY2hp
bGROb2RlLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBjaGlsZE5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0Vs
ZW1lbnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVk
KCkgfHwgIXJlbmRlcmVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghcmVu
ZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVy
LT5pc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgSW50UG9pbnQgaGl0UG9pbnQ7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0
KGhpdFBvaW50KTsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2RlQXRGbG9hdFBvaW50KEhpdFRl
c3RSZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpTVkdDbGlwQ29udGVudCksIHJlc3VsdCwgcG9pbnQs
IEhpdFRlc3RGb3JlZ3JvdW5kKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
cjo6cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICAvLyBS
ZXNvdXJjZSB3YXMgbm90IGxheW91dGVkIHlldC4gR2l2ZSBiYWNrIHRoZSBib3VuZGluZ0JveCBv
ZiB0aGUgb2JqZWN0LgorICAgIGlmIChzZWxmTmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJu
IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICAKKyAgICBpZiAobV9jbGlwQm91bmRh
cmllcy5pc0VtcHR5KCkpCisgICAgICAgIGNhbGN1bGF0ZUNsaXBDb250ZW50UmVwYWludFJlY3Qo
KTsKKworICAgIGlmIChzdGF0aWNfY2FzdDxTVkdDbGlwUGF0aEVsZW1lbnQqPihub2RlKCkpLT5j
bGlwUGF0aFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5E
SU5HQk9YKSB7CisgICAgICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+
b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsK
KyAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54KCksIG9iamVj
dEJvdW5kaW5nQm94LnkoKSk7CisgICAgICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0ob2Jq
ZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOworICAg
ICAgICByZXR1cm4gdHJhbnNmb3JtLm1hcFJlY3QobV9jbGlwQm91bmRhcmllcyk7CisgICAgfQor
CisgICAgcmV0dXJuIG1fY2xpcEJvdW5kYXJpZXM7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJM
RShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgJKHJldmlzaW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmg6NzUzNDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXJfaAorI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXJfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIuaCIKKyNpbmNsdWRlICJTVkdDbGlwUGF0aEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJTVkdVbml0VHlwZXMuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBDbGlw
cGVyRGF0YSA6IEZhc3RBbGxvY0Jhc2UgeworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gY2xpcE1h
c2tJbWFnZTsKK307CisKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciA6IHB1YmxpYyBS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciB7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyKFNWR0NsaXBQYXRoRWxlbWVudCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1Jl
c291cmNlQ2xpcHBlcigpOworCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciI7IH0KKworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlv
biA9IHRydWUpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVy
T2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNz
Q29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOworICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kik7CisKKyAgICB2aXJ0dWFs
IFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCB7IHJldHVybiBDbGlw
cGVyUmVzb3VyY2VUeXBlOyB9CisgICAgCisgICAgYm9vbCBoaXRUZXN0Q2xpcENvbnRlbnQoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYpOworCisgICAgU1ZHVW5pdFR5cGVzOjpT
VkdVbml0VHlwZSBjbGlwUGF0aFVuaXRzKCkgY29uc3QgeyByZXR1cm4gdG9Vbml0VHlwZShzdGF0
aWNfY2FzdDxTVkdDbGlwUGF0aEVsZW1lbnQqPihub2RlKCkpLT5jbGlwUGF0aFVuaXRzKCkpOyB9
CisKKyAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBlOworcHJp
dmF0ZToKKyAgICAvLyBjbGlwUGF0aCBjYW4gYmUgY2xpcHBlZCB0b28sIGJ1dCBkb24ndCBoYXZl
IGEgYm91bmRpbmdCb3ggb3IgcmVwYWludFJlY3QuIFNvIHdlIGNhbid0IGNhbGwKKyAgICAvLyBh
cHBseVJlc291cmNlIGRpcmVjdGx5IGFuZCB1c2UgdGhlIHJlY3RzIGZyb20gdGhlIG9iamVjdCwg
c2luY2UgdGhleSBhcmUgZW1wdHkgZm9yIFJlbmRlclNWR1Jlc291cmNlcworICAgIGJvb2wgYXBw
bHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJPYmplY3QqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQqKTsKKyAgICBib29sIHBhdGhPbmx5Q2xpcHBp
bmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgYm9vbCBkcmF3Q29u
dGVudEludG9NYXNrSW1hZ2UoQ2xpcHBlckRhdGEqLCBjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJv
dW5kaW5nQm94KTsKKyAgICB2b2lkIGNhbGN1bGF0ZUNsaXBDb250ZW50UmVwYWludFJlY3QoKTsK
KworICAgIGJvb2wgbV9pbnZhbGlkYXRpb25CbG9ja2VkOworICAgIEZsb2F0UmVjdCBtX2NsaXBC
b3VuZGFyaWVzOworICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQ2xpcHBlckRhdGEqPiBtX2Ns
aXBwZXI7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
LmNwcAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHA6NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5o
IgorCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCIKKyNpbmNs
dWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBpbmxpbmUgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBzdmdFeHRlbnNpb25z
RnJvbU5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKG5v
ZGUtPmRvY3VtZW50KCkpOworICAgIHJldHVybiBub2RlLT5kb2N1bWVudCgpLT5hY2Nlc3NTVkdF
eHRlbnNpb25zKCk7Cit9CisKK1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyKG5vZGUpCisgICAgLCBtX2lkKG5vZGUtPmhhc0lEKCkgPyBub2RlLT5n
ZXRJZEF0dHJpYnV0ZSgpIDogbnVsbEF0b20pCisgICAgLCBtX3JlZ2lzdGVyZWQoZmFsc2UpCit7
Cit9CisKK1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjp+UmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIoKQoreworICAgIGlmIChtX3JlZ2lzdGVyZWQpCisgICAgICAgIHN2Z0V4dGVuc2lvbnNG
cm9tTm9kZShub2RlKCkpLT5yZW1vdmVSZXNvdXJjZShtX2lkKTsKK30KKwordm9pZCBSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcjo6bGF5b3V0KCkKK3sKKyAgICAvLyBJbnZhbGlkYXRlIGFsbCBy
ZXNvdXJjZXMgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgorICAgIGlmIChtX2V2ZXJIYWRMYXlvdXQg
JiYgc2VsZk5lZWRzTGF5b3V0KCkpCisgICAgICAgIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUo
KTsKKworICAgIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6bGF5b3V0KCk7Cit9CisKK3ZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OmRlc3Ryb3koKQoreworICAgIFNWR1Jlc291cmNl
c0NhY2hlOjpyZXNvdXJjZURlc3Ryb3llZCh0aGlzKTsKKyAgICBSZW5kZXJTVkdIaWRkZW5Db250
YWluZXI6OmRlc3Ryb3koKTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkKK3sKKyAgICBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OnN0eWxlRGlkQ2hhbmdl
KGRpZmYsIG9sZFN0eWxlKTsKKworICAgIGlmICghbV9yZWdpc3RlcmVkKSB7CisgICAgICAgIG1f
cmVnaXN0ZXJlZCA9IHRydWU7CisgICAgICAgIHJlZ2lzdGVyUmVzb3VyY2UoKTsKKyAgICB9Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OmlkQ2hhbmdlZCgpCit7CisgICAg
Ly8gSW52YWxpZGF0ZSBhbGwgb3VyIGN1cnJlbnQgY2xpZW50cy4KKyAgICByZW1vdmVBbGxDbGll
bnRzRnJvbUNhY2hlKCk7CisKKyAgICAvLyBSZW1vdmUgb2xkIGlkLCB0aGF0IGlzIGd1YXJhbnRl
ZWQgdG8gYmUgcHJlc2VudCBpbiBjYWNoZS4KKyAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4
dGVuc2lvbnMgPSBzdmdFeHRlbnNpb25zRnJvbU5vZGUobm9kZSgpKTsKKyAgICBleHRlbnNpb25z
LT5yZW1vdmVSZXNvdXJjZShtX2lkKTsKKyAgICBtX2lkID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUoKSktPmdldElkQXR0cmlidXRlKCk7CisKKyAgICByZWdpc3RlclJlc291cmNlKCk7Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6Om1hcmtBbGxDbGllbnRzRm9ySW52
YWxpZGF0aW9uKEludmFsaWRhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobV9jbGllbnRzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBuZWVkc0xheW91dCA9IG1vZGUg
PT0gTGF5b3V0QW5kQm91bmRhcmllc0ludmFsaWRhdGlvbjsKKyAgICBib29sIG1hcmtGb3JJbnZh
bGlkYXRpb24gPSBtb2RlICE9IFBhcmVudE9ubHlJbnZhbGlkYXRpb247CisKKyAgICBIYXNoU2V0
PFJlbmRlck9iamVjdCo+OjppdGVyYXRvciBlbmQgPSBtX2NsaWVudHMuZW5kKCk7CisgICAgZm9y
IChIYXNoU2V0PFJlbmRlck9iamVjdCo+OjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBjbGllbnQgPSAqaXQ7
CisgICAgICAgIGlmIChjbGllbnQtPmlzU1ZHUmVzb3VyY2VDb250YWluZXIoKSkgeworICAgICAg
ICAgICAgY2xpZW50LT50b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCktPnJlbW92ZUFsbENs
aWVudHNGcm9tQ2FjaGUobWFya0ZvckludmFsaWRhdGlvbik7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXJrRm9ySW52YWxpZGF0aW9uKQorICAgICAg
ICAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihjbGllbnQsIG1vZGUpOworCisgICAgICAg
IGlmIChuZWVkc0xheW91dCkKKyAgICAgICAgICAgIGNsaWVudC0+c2V0TmVlZHNMYXlvdXQodHJ1
ZSk7CisKKyAgICAgICAgLy8gSW52YWxpZGF0ZSByZXNvdXJjZXMgaW4gYW5jZXN0b3IgY2hhaW4s
IGlmIG5lZWRlZC4KKyAgICAgICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gY2xpZW50LT5wYXJl
bnQoKTsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50
LT5pc1NWR1Jlc291cmNlQ29udGFpbmVyKCkpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50LT50
b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCktPnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUo
bWFya0ZvckludmFsaWRhdGlvbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnQoKTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6bWFya0NsaWVu
dEZvckludmFsaWRhdGlvbihSZW5kZXJPYmplY3QqIGNsaWVudCwgSW52YWxpZGF0aW9uTW9kZSBt
b2RlKQoreworICAgIEFTU0VSVChjbGllbnQpOworICAgIEFTU0VSVCghbV9jbGllbnRzLmlzRW1w
dHkoKSk7CisKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIExheW91dEFuZEJvdW5kYXJp
ZXNJbnZhbGlkYXRpb246CisgICAgY2FzZSBCb3VuZGFyaWVzSW52YWxpZGF0aW9uOgorICAgICAg
ICBjbGllbnQtPnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFJlcGFpbnRJbnZhbGlkYXRpb246CisgICAgICAgIGlmIChjbGllbnQtPnZpZXcoKSkK
KyAgICAgICAgICAgIGNsaWVudC0+cmVwYWludCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBhcmVudE9ubHlJbnZhbGlkYXRpb246CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6YWRkQ2xpZW50KFJlbmRlck9iamVjdCogY2xp
ZW50KQoreworICAgIEFTU0VSVChjbGllbnQpOworICAgIG1fY2xpZW50cy5hZGQoY2xpZW50KTsK
K30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6cmVtb3ZlQ2xpZW50KFJlbmRl
ck9iamVjdCogY2xpZW50KQoreworICAgIEFTU0VSVChjbGllbnQpOworICAgIG1fY2xpZW50cy5y
ZW1vdmUoY2xpZW50KTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6cmVn
aXN0ZXJSZXNvdXJjZSgpCit7CisgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25z
ID0gc3ZnRXh0ZW5zaW9uc0Zyb21Ob2RlKG5vZGUoKSk7CisgICAgaWYgKCFleHRlbnNpb25zLT5p
c1BlbmRpbmdSZXNvdXJjZShtX2lkKSkgeworICAgICAgICBleHRlbnNpb25zLT5hZGRSZXNvdXJj
ZShtX2lkLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE93blB0cjxTVkdE
b2N1bWVudEV4dGVuc2lvbnM6OlNWR1BlbmRpbmdFbGVtZW50cz4gY2xpZW50cyhleHRlbnNpb25z
LT5yZW1vdmVQZW5kaW5nUmVzb3VyY2UobV9pZCkpOworCisgICAgLy8gQ2FjaGUgdXMgd2l0aCB0
aGUgbmV3IGlkLgorICAgIGV4dGVuc2lvbnMtPmFkZFJlc291cmNlKG1faWQsIHRoaXMpOworCisg
ICAgLy8gVXBkYXRlIGNhY2hlZCByZXNvdXJjZXMgb2YgcGVuZGluZyBjbGllbnRzLgorICAgIGNv
bnN0IFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6U1ZHUGVuZGluZ0VsZW1lbnRzOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBjbGllbnRzLT5lbmQoKTsKKyAgICBmb3IgKFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6U1ZHUGVuZGluZ0VsZW1lbnRzOjpjb25zdF9pdGVyYXRvciBpdCA9IGNsaWVudHMtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
KCppdCktPnJlbmRlcmVyKCk7CisgICAgICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFVwZGF0ZWRGcm9tRWxl
bWVudChyZW5kZXJlciwgcmVuZGVyZXItPnN0eWxlKCkpOworICAgICAgICByZW5kZXJlci0+c2V0
TmVlZHNMYXlvdXQodHJ1ZSk7CisgICAgfQorfQorCisvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCBi
ZWxvbmcgaGVyZS4KK0FmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6
dHJhbnNmb3JtT25Ob25TY2FsaW5nU3Ryb2tlKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHJlc291cmNlVHJhbnNmb3JtKQoreworICAgIGlmICghb2JqZWN0LT5p
c1NWR1BhdGgoKSkKKyAgICAgICAgcmV0dXJuIHJlc291cmNlVHJhbnNmb3JtOworCisgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG9iamVjdC0+bm9kZSgpKTsKKyAgICBBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtID0gcmVzb3VyY2VUcmFuc2Zvcm07CisgICAgdHJhbnNmb3JtLm11bHRp
cGx5KGVsZW1lbnQtPmdldFNjcmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVVcGRh
dGUpKTsKKyAgICByZXR1cm4gdHJhbnNmb3JtOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuaAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oOjc1MzQ1KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXJfaAorI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcl9o
CisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5o
IgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
UmVuZGVyU1ZHUmVzb3VyY2UgeworcHVibGljOgorICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyKFNWR1N0eWxlZEVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lcigpOworCisgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOworICAgIHZpcnR1YWwgdm9p
ZCBkZXN0cm95KCk7CisgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKKworICAgIHZpcnR1YWwgYm9vbCBp
c1NWR1Jlc291cmNlQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIoKSB7IHJldHVybiB0aGlzOyB9CisKKyAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybU9uTm9uU2NhbGluZ1N0cm9rZShSZW5kZXJPYmplY3QqLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHJlc291cmNlVHJhbnNmb3JtKTsKKworICAgIHZvaWQgaWRDaGFuZ2VkKCk7CisKK3Byb3Rl
Y3RlZDoKKyAgICBlbnVtIEludmFsaWRhdGlvbk1vZGUgeworICAgICAgICBMYXlvdXRBbmRCb3Vu
ZGFyaWVzSW52YWxpZGF0aW9uLAorICAgICAgICBCb3VuZGFyaWVzSW52YWxpZGF0aW9uLAorICAg
ICAgICBSZXBhaW50SW52YWxpZGF0aW9uLAorICAgICAgICBQYXJlbnRPbmx5SW52YWxpZGF0aW9u
CisgICAgfTsKKworICAgIC8vIFVzZWQgZnJvbSB0aGUgaW52YWxpZGF0ZUNsaWVudC9pbnZhbGlk
YXRlQ2xpZW50cyBtZXRob2RzIGZyb20gY2xhc3NlcywgaW5oZXJpdGluZyBmcm9tIHVzLgorICAg
IHZvaWQgbWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24oSW52YWxpZGF0aW9uTW9kZSk7Cisg
ICAgdm9pZCBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKFJlbmRlck9iamVjdCosIEludmFsaWRh
dGlvbk1vZGUpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTVkdSZXNvdXJjZXNDYWNo
ZTsKKyAgICB2b2lkIGFkZENsaWVudChSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHJlbW92ZUNs
aWVudChSZW5kZXJPYmplY3QqKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHJlZ2lzdGVyUmVzb3Vy
Y2UoKTsKKworICAgIEF0b21pY1N0cmluZyBtX2lkOworICAgIGJvb2wgbV9yZWdpc3RlcmVkOwor
ICAgIEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj4gbV9jbGllbnRzOworfTsKKworaW5saW5lIFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyKiBnZXRSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lckJ5SWQo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkKQoreworICAgIGlmIChp
ZC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyKiByZW5kZXJSZXNvdXJjZSA9IGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNp
b25zKCktPnJlc291cmNlQnlJZChpZCkpCisgICAgICAgIHJldHVybiByZW5kZXJSZXNvdXJjZTsK
KworICAgIHJldHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZW5kZXJlcj4KK1JlbmRl
cmVyKiBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBB
dG9taWNTdHJpbmcmIGlkKQoreworICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciog
Y29udGFpbmVyID0gZ2V0UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXJCeUlkKGRvY3VtZW50LCBp
ZCkpCisgICAgICAgIHJldHVybiBjb250YWluZXItPmNhc3Q8UmVuZGVyZXI+KCk7CisKKyAgICBy
ZXR1cm4gMDsKK30KKworfQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJ
KHJldmlzaW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwOjc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlclByaW1pdGl2ZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdG
aWx0ZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiU1ZHSW1hZ2VCdWZm
ZXJUb29scy5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxl
bWVudC5oIgorI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgorCisjaW5jbHVkZSA8d3RmL1VudXNl
ZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitzdGF0aWMgY29uc3QgZmxvYXQg
a01heEZpbHRlclNpemUgPSA1MDAwLjBmOworCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6c19yZXNvdXJjZVR5cGUgPSBGaWx0ZXJSZXNvdXJjZVR5cGU7CisKK1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcihTVkdGaWx0ZXJFbGVtZW50
KiBub2RlKQorICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKK3sKK30KKwor
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6On5SZW5kZXJTVkdSZXNvdXJjZUZpbHRlcigpCit7Cisg
ICAgaWYgKG1fZmlsdGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRl
QWxsVmFsdWVzKG1fZmlsdGVyKTsKKyAgICBtX2ZpbHRlci5jbGVhcigpOworfQorCit2b2lkIFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFy
a0ZvckludmFsaWRhdGlvbikKK3sKKyAgICBpZiAoIW1fZmlsdGVyLmlzRW1wdHkoKSkgeworICAg
ICAgICBkZWxldGVBbGxWYWx1ZXMobV9maWx0ZXIpOworICAgICAgICBtX2ZpbHRlci5jbGVhcigp
OworICAgIH0KKworICAgIG1hcmtBbGxDbGllbnRzRm9ySW52YWxpZGF0aW9uKG1hcmtGb3JJbnZh
bGlkYXRpb24gPyBMYXlvdXRBbmRCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFyZW50T25seUlu
dmFsaWRhdGlvbik7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJlbW92ZUNs
aWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqIGNsaWVudCwgYm9vbCBtYXJrRm9ySW52YWxpZGF0
aW9uKQoreworICAgIEFTU0VSVChjbGllbnQpOworCisgICAgaWYgKG1fZmlsdGVyLmNvbnRhaW5z
KGNsaWVudCkpCisgICAgICAgIGRlbGV0ZSBtX2ZpbHRlci50YWtlKGNsaWVudCk7CisKKyAgICBt
YXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGNsaWVudCwgbWFya0ZvckludmFsaWRhdGlvbiA/IEJv
dW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKK30KKworUGFz
c1JlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQ
cmltaXRpdmVzKEZpbHRlciogZmlsdGVyKQoreworICAgIFNWR0ZpbHRlckVsZW1lbnQqIGZpbHRl
ckVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBi
b29sIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9IGZpbHRlckVsZW1lbnQtPnByaW1pdGl2ZVVu
aXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwor
CisgICAgLy8gQWRkIGVmZmVjdHMgdG8gdGhlIGJ1aWxkZXIKKyAgICBSZWZQdHI8U1ZHRmlsdGVy
QnVpbGRlcj4gYnVpbGRlciA9IFNWR0ZpbHRlckJ1aWxkZXI6OmNyZWF0ZShmaWx0ZXIpOworICAg
IGZvciAoTm9kZSogbm9kZSA9IGZpbHRlckVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5pc1NWR0VsZW1l
bnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSk7CisgICAgICAgIGlmICghZWxlbWVu
dC0+aXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyogZWZmZWN0RWxlbWVudCA9IHN0YXRp
Y19jYXN0PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyo+KGVsZW1lbnQpOwor
ICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LT5idWls
ZChidWlsZGVyLmdldCgpLCBmaWx0ZXIpOworICAgICAgICBpZiAoIWVmZmVjdCkgeworICAgICAg
ICAgICAgYnVpbGRlci0+Y2xlYXJFZmZlY3RzKCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMo
ZWZmZWN0KTsKKyAgICAgICAgZWZmZWN0RWxlbWVudC0+c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKHBy
aW1pdGl2ZUJvdW5kaW5nQm94TW9kZSwgZWZmZWN0LmdldCgpKTsKKyAgICAgICAgYnVpbGRlci0+
YWRkKGVmZmVjdEVsZW1lbnQtPnJlc3VsdCgpLCBlZmZlY3QpOworICAgIH0KKyAgICByZXR1cm4g
YnVpbGRlci5yZWxlYXNlKCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmZp
dHNJbk1heGltdW1JbWFnZVNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBGbG9hdFNpemUmIHNj
YWxlKQoreworICAgIGJvb2wgbWF0Y2hlc0ZpbHRlclNpemUgPSB0cnVlOworICAgIGlmIChzaXpl
LndpZHRoKCkgPiBrTWF4RmlsdGVyU2l6ZSkgeworICAgICAgICBzY2FsZS5zZXRXaWR0aChzY2Fs
ZS53aWR0aCgpICoga01heEZpbHRlclNpemUgLyBzaXplLndpZHRoKCkpOworICAgICAgICBtYXRj
aGVzRmlsdGVyU2l6ZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoc2l6ZS5oZWlnaHQoKSA+IGtN
YXhGaWx0ZXJTaXplKSB7CisgICAgICAgIHNjYWxlLnNldEhlaWdodChzY2FsZS5oZWlnaHQoKSAq
IGtNYXhGaWx0ZXJTaXplIC8gc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1hdGNoZXNGaWx0ZXJT
aXplID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIG1hdGNoZXNGaWx0ZXJTaXplOworfQor
Citib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlck9iamVj
dCogb2JqZWN0LCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2ln
bmVkIHNob3J0IHJlc291cmNlTW9kZSkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NF
UlQoY29udGV4dCk7CisjaWZuZGVmIE5ERUJVRworICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgPT0g
QXBwbHlUb0RlZmF1bHRNb2RlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlc291cmNlTW9k
ZSk7CisjZW5kaWYKKworICAgIC8vIFJldHVybmluZyBmYWxzZSBoZXJlLCB0byBhdm9pZCBkcmF3
aW5ncyBvbnRvIHRoZSBjb250ZXh0LiBXZSBqdXN0IHdhbnQgdG8KKyAgICAvLyBkcmF3IHRoZSBz
dG9yZWQgZmlsdGVyIG91dHB1dCwgbm90IHRoZSB1bmZpbHRlcmVkIG9iamVjdCBhcyB3ZWxsLgor
ICAgIGlmIChtX2ZpbHRlci5jb250YWlucyhvYmplY3QpKSB7CisgICAgICAgIEZpbHRlckRhdGEq
IGZpbHRlckRhdGEgPSBtX2ZpbHRlci5nZXQob2JqZWN0KTsKKyAgICAgICAgaWYgKGZpbHRlckRh
dGEtPmJ1aWxkZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZGVsZXRl
IG1fZmlsdGVyLnRha2Uob2JqZWN0KTsgLy8gT29wcywgaGF2ZSB0byByZWJ1aWxkLCBnbyB0aHJv
dWdoIG5vcm1hbCBjb2RlIHBhdGgKKyAgICB9CisKKyAgICBPd25QdHI8RmlsdGVyRGF0YT4gZmls
dGVyRGF0YShuZXcgRmlsdGVyRGF0YSk7CisgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94
ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOworCisgICAgU1ZHRmlsdGVyRWxlbWVudCog
ZmlsdGVyRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQqPihub2RlKCkpOwor
ICAgIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMgPSBmaWx0ZXJFbGVtZW50LT5maWx0ZXJCb3VuZGlu
Z0JveCh0YXJnZXRCb3VuZGluZ0JveCk7CisgICAgaWYgKGZpbHRlckRhdGEtPmJvdW5kYXJpZXMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBEZXRlcm1pbmUgYWJz
b2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGZvciBmaWx0ZXIuIAorICAgIEFmZmluZVRyYW5z
Zm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKKyAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxh
dGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbShvYmplY3QsIGFi
c29sdXRlVHJhbnNmb3JtKTsKKyAgICBpZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJs
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBFbGltaW5hdGUgc2hlYXIgb2Yg
dGhlIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgdG8gYmUgYWJsZSB0byBwcm9kdWNl
IHVuc2hlYXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxlLgorICAgIGZpbHRlckRhdGEtPnNoZWFy
RnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3Jt
LnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSwgYWJzb2x1dGVUcmFu
c2Zvcm0uZSgpLCBhYnNvbHV0ZVRyYW5zZm9ybS5mKCkpOworCisgICAgLy8gRGV0ZXJtaW5lIGFi
c29sdXRlIGJvdW5kYXJpZXMgb2YgdGhlIGZpbHRlciBhbmQgdGhlIGRyYXdpbmcgcmVnaW9uLgor
ICAgIEZsb2F0UmVjdCBhYnNvbHV0ZUZpbHRlckJvdW5kYXJpZXMgPSBmaWx0ZXJEYXRhLT5zaGVh
ckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOwor
ICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gb2JqZWN0LT5zdHJva2VCb3VuZGluZ0JveCgp
OworICAgIGRyYXdpbmdSZWdpb24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOwor
ICAgIEZsb2F0UmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5zaGVhckZy
ZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGRyYXdpbmdSZWdpb24pOworCisgICAgLy8gQ3Jl
YXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgorICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hN
b2RlID0gZmlsdGVyRWxlbWVudC0+cHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNW
R19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CisgICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0g
U1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0s
IGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlckRhdGEtPmJv
dW5kYXJpZXMsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSk7CisKKyAgICAvLyBDcmVhdGUgYWxs
IHJlbGV2YW50IGZpbHRlciBwcmltaXRpdmVzLgorICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBi
dWlsZFByaW1pdGl2ZXMoZmlsdGVyRGF0YS0+ZmlsdGVyLmdldCgpKTsKKyAgICBpZiAoIWZpbHRl
ckRhdGEtPmJ1aWxkZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENhbGN1bGF0
ZSB0aGUgc2NhbGUgZmFjdG9yIGZvciB0aGUgdXNlIG9mIGZpbHRlclJlcy4KKyAgICAvLyBBbHNv
IHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI0ZpbHRlckVmZmVjdHNS
ZWdpb24KKyAgICBGbG9hdFNpemUgc2NhbGUoMSwgMSk7CisgICAgaWYgKGZpbHRlckVsZW1lbnQt
Pmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6ZmlsdGVyUmVzQXR0cikpIHsKKyAgICAgICAgc2NhbGUu
c2V0V2lkdGgoZmlsdGVyRWxlbWVudC0+ZmlsdGVyUmVzWCgpIC8gYWJzb2x1dGVGaWx0ZXJCb3Vu
ZGFyaWVzLndpZHRoKCkpOworICAgICAgICBzY2FsZS5zZXRIZWlnaHQoZmlsdGVyRWxlbWVudC0+
ZmlsdGVyUmVzWSgpIC8gYWJzb2x1dGVGaWx0ZXJCb3VuZGFyaWVzLmhlaWdodCgpKTsKKyAgICB9
CisKKyAgICBpZiAoc2NhbGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBEZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIuIFRoZSBzaXplIG9mIGludGVy
bWVkaWF0ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dlciB0aGFuIGtNYXhGaWx0ZXJT
aXplLgorICAgIEZsb2F0UmVjdCB0ZW1wU291cmNlUmVjdCA9IGFic29sdXRlRHJhd2luZ1JlZ2lv
bjsKKyAgICB0ZW1wU291cmNlUmVjdC5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQo
KSk7CisgICAgZml0c0luTWF4aW11bUltYWdlU2l6ZSh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNj
YWxlKTsKKworICAgIC8vIFNldCB0aGUgc2NhbGUgbGV2ZWwgaW4gU1ZHRmlsdGVyLgorICAgIGZp
bHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7CisKKyAgICBGaWx0
ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCk7
CisgICAgaWYgKCFsYXN0RWZmZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKGxhc3RFZmZlY3QsIGZpbHRlckRhdGEtPmZpbHRlci5nZXQoKSk7CisgICAgRmxvYXRS
ZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3QtPm1heEVmZmVjdFJlY3QoKTsKKyAgICAvLyBBdCBs
ZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKKyAgICAvLyBy
ZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCisgICAg
aWYgKCFmaXRzSW5NYXhpbXVtSW1hZ2VTaXplKHN1YlJlZ2lvbi5zaXplKCksIHNjYWxlKSkgewor
ICAgICAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwor
ICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZTo6ZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKGxhc3RFZmZlY3QsIGZpbHRlckRhdGEtPmZpbHRlci5nZXQoKSk7
CisgICAgfQorCisgICAgLy8gSWYgdGhlIGRyYXdpbmdSZWdpb24gaXMgZW1wdHksIHdlIGhhdmUg
c29tZXRoaW5nIGxpa2UgPGcgZmlsdGVyPSIuLiIvPi4KKyAgICAvLyBFdmVuIGlmIHRoZSB0YXJn
ZXQgb2JqZWN0Qm91bmRpbmdCb3goKSBpcyBlbXB0eSwgd2Ugc3RpbGwgaGF2ZSB0byBkcmF3IHRo
ZSBsYXN0IGVmZmVjdCByZXN1bHQgaW1hZ2UgaW4gcG9zdEFwcGx5UmVzb3VyY2UuCisgICAgaWYg
KGRyYXdpbmdSZWdpb24uaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVCghbV9maWx0ZXIuY29u
dGFpbnMob2JqZWN0KSk7CisgICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9IGNvbnRl
eHQ7CisgICAgICAgIG1fZmlsdGVyLnNldChvYmplY3QsIGZpbHRlckRhdGEubGVha1B0cigpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGFic29sdXRlRHJhd2luZ1JlZ2lv
bi5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CisKKyAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IHNvdXJjZUdyYXBoaWM7CisgICAgaWYgKCFTVkdJbWFnZUJ1ZmZlclRvb2xzOjpj
cmVhdGVJbWFnZUJ1ZmZlcihhYnNvbHV0ZURyYXdpbmdSZWdpb24sIGFic29sdXRlRHJhd2luZ1Jl
Z2lvbiwgc291cmNlR3JhcGhpYywgQ29sb3JTcGFjZUxpbmVhclJHQikpIHsKKyAgICAgICAgQVNT
RVJUKCFtX2ZpbHRlci5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgZmlsdGVyRGF0YS0+c2F2
ZWRDb250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgbV9maWx0ZXIuc2V0KG9iamVjdCwgZmlsdGVy
RGF0YS5sZWFrUHRyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IEdyYXBoaWNzQ29udGV4dCogc291cmNlR3JhcGhpY0NvbnRleHQgPSBzb3VyY2VHcmFwaGljLT5j
b250ZXh0KCk7CisgICAgQVNTRVJUKHNvdXJjZUdyYXBoaWNDb250ZXh0KTsKKyAgCisgICAgc291
cmNlR3JhcGhpY0NvbnRleHQtPnRyYW5zbGF0ZSgtYWJzb2x1dGVEcmF3aW5nUmVnaW9uLngoKSwg
LWFic29sdXRlRHJhd2luZ1JlZ2lvbi55KCkpOworICAgIGlmIChzY2FsZS53aWR0aCgpICE9IDEg
fHwgc2NhbGUuaGVpZ2h0KCkgIT0gMSkKKyAgICAgICAgc291cmNlR3JhcGhpY0NvbnRleHQtPnNj
YWxlKHNjYWxlKTsKKworICAgIHNvdXJjZUdyYXBoaWNDb250ZXh0LT5jb25jYXRDVE0oZmlsdGVy
RGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOworICAgIHNvdXJjZUdyYXBoaWNDb250
ZXh0LT5jbGVhclJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVEcmF3aW5nUmVn
aW9uLnNpemUoKSkpOworICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBzb3Vy
Y2VHcmFwaGljLnJlbGVhc2UoKTsKKyAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250
ZXh0OworCisgICAgY29udGV4dCA9IHNvdXJjZUdyYXBoaWNDb250ZXh0OworCisgICAgQVNTRVJU
KCFtX2ZpbHRlci5jb250YWlucyhvYmplY3QpKTsKKyAgICBtX2ZpbHRlci5zZXQob2JqZWN0LCBm
aWx0ZXJEYXRhLmxlYWtQdHIoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9k
ZSwgY29uc3QgUGF0aCopCit7CisgICAgQVNTRVJUKG9iamVjdCk7CisgICAgQVNTRVJUKGNvbnRl
eHQpOworI2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQocmVzb3VyY2VNb2RlID09IEFwcGx5VG9E
ZWZhdWx0TW9kZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXNvdXJjZU1vZGUpOworI2Vu
ZGlmCisKKyAgICBpZiAoIW1fZmlsdGVyLmNvbnRhaW5zKG9iamVjdCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEZpbHRlckRhdGEqIGZpbHRlckRhdGEgPSBtX2ZpbHRlci5nZXQob2JqZWN0KTsK
KyAgICBpZiAoIWZpbHRlckRhdGEtPmJ1aWxkZWQpIHsKKyAgICAgICAgaWYgKCFmaWx0ZXJEYXRh
LT5zYXZlZENvbnRleHQpIHsKKyAgICAgICAgICAgIHJlbW92ZUNsaWVudEZyb21DYWNoZShvYmpl
Y3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29udGV4dCA9
IGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dDsKKyAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250
ZXh0ID0gMDsKKyNpZiAhUExBVEZPUk0oQ0cpCisgICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zb3Vy
Y2VHcmFwaGljQnVmZmVyKQorICAgICAgICAgICAgZmlsdGVyRGF0YS0+c291cmNlR3JhcGhpY0J1
ZmZlci0+dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlRGV2aWNlUkdCLCBDb2xvclNwYWNl
TGluZWFyUkdCKTsKKyNlbmRpZgorICAgIH0KKworICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVj
dCA9IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKKyAgICAKKyAgICBpZiAobGFz
dEVmZmVjdCAmJiAhZmlsdGVyRGF0YS0+Ym91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxhc3RFZmZl
Y3QtPmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBU
aGlzIGlzIHRoZSByZWFsIGZpbHRlcmluZyBvZiB0aGUgb2JqZWN0LiBJdCBqdXN0IG5lZWRzIHRv
IGJlIGNhbGxlZCBvbiB0aGUKKyAgICAgICAgLy8gaW5pdGlhbCBmaWx0ZXJpbmcgcHJvY2Vzcy4g
V2UganVzdCB0YWtlIHRoZSBzdG9yZWQgZmlsdGVyIHJlc3VsdCBvbiBhCisgICAgICAgIC8vIHNl
Y29uZCBkcmF3aW5nLgorICAgICAgICBpZiAoIWZpbHRlckRhdGEtPmJ1aWxkZWQpIHsKKyAgICAg
ICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0U291cmNlSW1hZ2UoZmlsdGVyRGF0YS0+c291
cmNlR3JhcGhpY0J1ZmZlci5yZWxlYXNlKCkpOworICAgICAgICAgICAgbGFzdEVmZmVjdC0+YXBw
bHkoKTsKKyNpZiAhUExBVEZPUk0oQ0cpCisgICAgICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBsYXN0RWZmZWN0LT5hc0ltYWdlQnVmZmVyKCk7CisgICAgICAgICAgICBpZiAocmVz
dWx0SW1hZ2UpCisgICAgICAgICAgICAgICAgcmVzdWx0SW1hZ2UtPnRyYW5zZm9ybUNvbG9yU3Bh
Y2UoQ29sb3JTcGFjZUxpbmVhclJHQiwgQ29sb3JTcGFjZURldmljZVJHQik7CisjZW5kaWYKKyAg
ICAgICAgICAgIGZpbHRlckRhdGEtPmJ1aWxkZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFzdEVmZmVjdC0+YXNJbWFnZUJ1ZmZlcigp
OworICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmNvbmNh
dENUTShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5pbnZlcnNlKCkpOwor
CisgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEtPmZp
bHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIDEgLyBmaWx0ZXJEYXRhLT5maWx0ZXIt
PmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4dC0+Y2xp
cChsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCkpOworICAgICAgICAgICAgY29udGV4dC0+ZHJh
d0ltYWdlQnVmZmVyKHJlc3VsdEltYWdlLCBvYmplY3QtPnN0eWxlKCktPmNvbG9yU3BhY2UoKSwg
bGFzdEVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5z
Y2FsZShmaWx0ZXJEYXRhLT5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7CisKKyAgICAgICAg
ICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5z
Zm9ybSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZmlsdGVyRGF0YS0+c291cmNlR3JhcGhpY0J1
ZmZlci5jbGVhcigpOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJl
c291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKFNWR0Zp
bHRlckVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9k
ZSgpKSkKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmZpbHRlckJvdW5kaW5nQm94KG9iamVjdC0+
b2JqZWN0Qm91bmRpbmdCb3goKSk7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK30K
KyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOjc1MzQ1KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyX2gKKyNkZWZpbmUgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXJfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgorI2lu
Y2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEZpbHRlckRhdGEgeworICAgIEZpbHRlckRhdGEo
KQorICAgICAgICA6IHNhdmVkQ29udGV4dCgwKQorICAgICAgICAsIGJ1aWxkZWQoZmFsc2UpCisg
ICAgeworICAgIH0KKworICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKKyAgICBSZWZQdHI8
U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRlcjsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNvdXJj
ZUdyYXBoaWNCdWZmZXI7CisgICAgR3JhcGhpY3NDb250ZXh0KiBzYXZlZENvbnRleHQ7CisgICAg
QWZmaW5lVHJhbnNmb3JtIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtOworICAgIEZsb2F0UmVj
dCBib3VuZGFyaWVzOworICAgIEZsb2F0U2l6ZSBzY2FsZTsKKyAgICBib29sIGJ1aWxkZWQ7Cit9
OworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyIDogcHVibGljIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcihTVkdGaWx0ZXJFbGVtZW50Kik7CisgICAgdmlydHVhbCB+
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIoKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVu
ZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciI7IH0KKwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0Zvcklu
dmFsaWRhdGlvbiA9IHRydWUpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2Fj
aGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSos
IEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOworICAgIHZp
cnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRl
eHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CisKKyAgICB2
aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopOworCisg
ICAgUGFzc1JlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZFByaW1pdGl2ZXMoRmlsdGVyKik7
CisKKyAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIGZpbHRlclVuaXRzKCkgY29uc3QgeyBy
ZXR1cm4gdG9Vbml0VHlwZShzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKS0+
ZmlsdGVyVW5pdHMoKSk7IH0KKyAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2
ZVVuaXRzKCkgY29uc3QgeyByZXR1cm4gdG9Vbml0VHlwZShzdGF0aWNfY2FzdDxTVkdGaWx0ZXJF
bGVtZW50Kj4obm9kZSgpKS0+cHJpbWl0aXZlVW5pdHMoKSk7IH0KKworICAgIHZpcnR1YWwgUmVu
ZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3Vy
Y2VUeXBlOyB9CisgICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlw
ZTsKKworcHJpdmF0ZToKKyAgICBib29sIGZpdHNJbk1heGltdW1JbWFnZVNpemUoY29uc3QgRmxv
YXRTaXplJiwgRmxvYXRTaXplJik7CisKKyAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEZpbHRl
ckRhdGEqPiBtX2ZpbHRlcjsKK307CisKK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwCShyZXZpc2lvbiA3NTM0NSkJKGZyb20gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcDo3
NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXJQcmltaXRpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlclByaW1pdGl2ZS5oIgorCisjaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlckVmZmVjdCogZWZm
ZWN0LCBTVkdGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBGbG9hdFJlY3QgdW5pdGVSZWN0OworICAg
IEZsb2F0UmVjdCBzdWJyZWdpb25Cb3VuZGluZ0JveCA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRhcmll
cygpOworICAgIEZsb2F0UmVjdCBzdWJyZWdpb24gPSBzdWJyZWdpb25Cb3VuZGluZ0JveDsKKwor
ICAgIGlmIChlZmZlY3QtPmZpbHRlckVmZmVjdFR5cGUoKSAhPSBGaWx0ZXJFZmZlY3RUeXBlVGls
ZSkgeworICAgICAgICAvLyBGRVR1cmJ1bGVuY2UsIEZFSW1hZ2UgYW5kIEZFRmxvb2QgZG9uJ3Qg
aGF2ZSBpbnB1dCBlZmZlY3RzLCB0YWtlIHRoZSBmaWx0ZXIgcmVnaW9uIGFzIHVuaXRlIHJlY3Qu
CisgICAgICAgIGlmICh1bnNpZ25lZCBudW1iZXJPZklucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5w
dXRFZmZlY3RzKCkuc2l6ZSgpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtYmVyT2ZJbnB1dEVmZmVjdHM7ICsraSkKKyAgICAgICAgICAgICAgICB1bml0ZVJlY3Qu
dW5pdGUoZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGVmZmVjdC0+aW5wdXRFZmZl
Y3QoaSksIGZpbHRlcikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHVuaXRlUmVjdCA9
IGZpbHRlci0+ZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZWZmZWN0LT5pbnB1dEVmZmVjdCgw
KSwgZmlsdGVyKTsKKyAgICAgICAgdW5pdGVSZWN0ID0gZmlsdGVyLT5maWx0ZXJSZWdpb25JblVz
ZXJTcGFjZSgpOworICAgIH0KKworICAgIGlmIChmaWx0ZXItPmVmZmVjdEJvdW5kaW5nQm94TW9k
ZSgpKSB7CisgICAgICAgIHN1YnJlZ2lvbiA9IHVuaXRlUmVjdDsKKyAgICAgICAgLy8gQXZvaWQg
dGhlIGNhbGxpbmcgb2YgYSB2aXJ0dWFsIG1ldGhvZCBzZXZlcmFsIHRpbWVzLgorICAgICAgICBG
bG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXItPnRhcmdldEJvdW5kaW5nQm94KCk7
CisKKyAgICAgICAgaWYgKGVmZmVjdC0+aGFzWCgpKQorICAgICAgICAgICAgc3VicmVnaW9uLnNl
dFgodGFyZ2V0Qm91bmRpbmdCb3gueCgpICsgc3VicmVnaW9uQm91bmRpbmdCb3gueCgpICogdGFy
Z2V0Qm91bmRpbmdCb3gud2lkdGgoKSk7CisKKyAgICAgICAgaWYgKGVmZmVjdC0+aGFzWSgpKQor
ICAgICAgICAgICAgc3VicmVnaW9uLnNldFkodGFyZ2V0Qm91bmRpbmdCb3gueSgpICsgc3VicmVn
aW9uQm91bmRpbmdCb3gueSgpICogdGFyZ2V0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOworCisgICAg
ICAgIGlmIChlZmZlY3QtPmhhc1dpZHRoKCkpCisgICAgICAgICAgICBzdWJyZWdpb24uc2V0V2lk
dGgoc3VicmVnaW9uQm91bmRpbmdCb3gud2lkdGgoKSAqIHRhcmdldEJvdW5kaW5nQm94LndpZHRo
KCkpOworCisgICAgICAgIGlmIChlZmZlY3QtPmhhc0hlaWdodCgpKQorICAgICAgICAgICAgc3Vi
cmVnaW9uLnNldEhlaWdodChzdWJyZWdpb25Cb3VuZGluZ0JveC5oZWlnaHQoKSAqIHRhcmdldEJv
dW5kaW5nQm94LmhlaWdodCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWVmZmVjdC0+
aGFzWCgpKQorICAgICAgICAgICAgc3VicmVnaW9uLnNldFgodW5pdGVSZWN0LngoKSk7CisKKyAg
ICAgICAgaWYgKCFlZmZlY3QtPmhhc1koKSkKKyAgICAgICAgICAgIHN1YnJlZ2lvbi5zZXRZKHVu
aXRlUmVjdC55KCkpOworCisgICAgICAgIGlmICghZWZmZWN0LT5oYXNXaWR0aCgpKQorICAgICAg
ICAgICAgc3VicmVnaW9uLnNldFdpZHRoKHVuaXRlUmVjdC53aWR0aCgpKTsKKworICAgICAgICBp
ZiAoIWVmZmVjdC0+aGFzSGVpZ2h0KCkpCisgICAgICAgICAgICBzdWJyZWdpb24uc2V0SGVpZ2h0
KHVuaXRlUmVjdC5oZWlnaHQoKSk7CisgICAgfQorCisgICAgZWZmZWN0LT5zZXRGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oc3VicmVnaW9uKTsKKworICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVN1YnJl
Z2lvbiA9IGZpbHRlci0+bWFwTG9jYWxSZWN0VG9BYnNvbHV0ZVJlY3Qoc3VicmVnaW9uKTsKKyAg
ICBGbG9hdFNpemUgZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigp
OworICAgIGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24ud2lkdGgoKSwg
ZmlsdGVyUmVzb2x1dGlvbi5oZWlnaHQoKSk7CisKKyAgICAvLyBGRUltYWdlIG5lZWRzIHRoZSB1
bmNsaXBwZWQgc3VicmVnaW9uIGluIGFic29sdXRlIGNvb3JkaW5hdGVzIHRvIGRldGVybWluZSB0
aGUgY29ycmVjdAorICAgIC8vIGRlc3RpbmF0aW9uIHJlY3QgaW4gY29tYmluYXRpb24gd2l0aCBw
cmVzZXJ2ZUFzcGVjdFJhdGlvLgorICAgIGlmIChlZmZlY3QtPmZpbHRlckVmZmVjdFR5cGUoKSA9
PSBGaWx0ZXJFZmZlY3RUeXBlSW1hZ2UpCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8RkVJbWFn
ZSo+KGVmZmVjdCktPnNldEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9uKTsKKwor
ICAgIC8vIENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVyIHJlZ2lvbi4KKyAg
ICBGbG9hdFJlY3QgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24gPSBmaWx0ZXItPmZpbHRlclJl
Z2lvbigpOworICAgIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlclJlc29s
dXRpb24ud2lkdGgoKSwgZmlsdGVyUmVzb2x1dGlvbi5oZWlnaHQoKSk7CisgICAgYWJzb2x1dGVT
dWJyZWdpb24uaW50ZXJzZWN0KGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uKTsKKworICAgIGVm
ZmVjdC0+c2V0TWF4RWZmZWN0UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlU3VicmVnaW9u
KSk7CisgICAgcmV0dXJuIHN1YnJlZ2lvbjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlclByaW1pdGl2ZS5oCShyZXZpc2lvbiA3NTM0NSkJKGZyb20gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmg6NzUzNDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJp
bWl0aXZlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFpv
bHRhbiBIZXJjemVnCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZV9oCisjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlX2gKKworI2lm
IEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjaW5jbHVkZSAiUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCisjaW5jbHVkZSAiU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUgOiBwdWJsaWMgUmVuZGVy
U1ZHSGlkZGVuQ29udGFpbmVyIHsKK3B1YmxpYzoKKworICAgIGV4cGxpY2l0IFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyUHJpbWl0aXZlKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cyogZmlsdGVyUHJpbWl0aXZlRWxlbWVudCkKKyAgICAgICAgOiBSZW5kZXJTVkdIaWRkZW5Db250
YWluZXIoZmlsdGVyUHJpbWl0aXZlRWxlbWVudCkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhl
eSBkZXBlbmQgb24gdGhlIFJlbmRlck9iamVjdCBhcmd1bWVudCBvZiBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlSZXNvdXJjZS4KKyAgICBzdGF0aWMgRmxvYXRSZWN0IGRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXJFZmZlY3QqLCBTVkdGaWx0ZXIqKTsKKworcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVy
biAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUiOyB9CisgICAgdmlydHVhbCBib29s
IGlzU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoRklMVEVSUykKKworI2VuZGlmIC8vIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDo3NTM0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgiCisKKyNpbmNsdWRlICJHcmFkaWVudEF0dHJpYnV0ZXMu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdUZXh0
LmgiCisjaW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJUb29scy5oIgorI2luY2x1ZGUgIlNWR1JlbmRl
clN1cHBvcnQuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjpSZW5kZXJTVkdSZXNvdXJjZUdy
YWRpZW50KFNWR0dyYWRpZW50RWxlbWVudCogbm9kZSkKKyAgICA6IFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyKG5vZGUpCisgICAgLCBtX3Nob3VsZENvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMo
dHJ1ZSkKKyNpZiBQTEFURk9STShDRykKKyAgICAsIG1fc2F2ZWRDb250ZXh0KDApCisjZW5kaWYK
K3sKK30KKworUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6flJlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQoKQoreworICAgIGlmIChtX2dyYWRpZW50LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZGVsZXRlQWxsVmFsdWVzKG1fZ3JhZGllbnQpOworICAgIG1fZ3JhZGllbnQuY2xl
YXIoKTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjpyZW1vdmVBbGxDbGll
bnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbikKK3sKKyAgICBpZiAoIW1fZ3Jh
ZGllbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2dyYWRpZW50KTsK
KyAgICAgICAgbV9ncmFkaWVudC5jbGVhcigpOworICAgIH0KKworICAgIG1fc2hvdWxkQ29sbGVj
dEdyYWRpZW50QXR0cmlidXRlcyA9IHRydWU7CisgICAgbWFya0FsbENsaWVudHNGb3JJbnZhbGlk
YXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IFJlcGFpbnRJbnZhbGlkYXRpb24gOiBQYXJlbnRP
bmx5SW52YWxpZGF0aW9uKTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpy
ZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiBjbGllbnQsIGJvb2wgbWFya0Zvcklu
dmFsaWRhdGlvbikKK3sKKyAgICBBU1NFUlQoY2xpZW50KTsKKworICAgIGlmIChtX2dyYWRpZW50
LmNvbnRhaW5zKGNsaWVudCkpCisgICAgICAgIGRlbGV0ZSBtX2dyYWRpZW50LnRha2UoY2xpZW50
KTsKKworICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxp
ZGF0aW9uID8gUmVwYWludEludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwor
fQorCisjaWYgUExBVEZPUk0oQ0cpCitzdGF0aWMgaW5saW5lIGJvb2wgY3JlYXRlTWFza0FuZFN3
YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdy
YXBoaWNzQ29udGV4dComIHNhdmVkQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1h
Z2VCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIFJlbmRlck9iamVjdCog
dGV4dFJvb3RCbG9jayA9IFJlbmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3Rv
cihvYmplY3QpOworICAgIEFTU0VSVCh0ZXh0Um9vdEJsb2NrKTsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKKyAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxh
dGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbSh0ZXh0Um9vdEJs
b2NrLCBhYnNvbHV0ZVRyYW5zZm9ybSk7CisKKyAgICBGbG9hdFJlY3QgYWJzb2x1dGVUYXJnZXRS
ZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdCh0ZXh0Um9vdEJsb2NrLT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFy
Z2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RG
b3JSZW5kZXJlcih0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRhcmdldFJlY3QpOworICAgIGlmIChj
bGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2U7CisgICAgaWYgKCFTVkdJbWFn
ZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihhYnNvbHV0ZVRhcmdldFJlY3QsIGNsYW1w
ZWRBYnNvbHV0ZVRhcmdldFJlY3QsIG1hc2tJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29u
dGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOworICAgIEFTU0VSVChtYXNrSW1hZ2VDb250ZXh0
KTsKKworICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtY2xhbXBlZEFic29sdXRlVGFy
Z2V0UmVjdC54KCksIC1jbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LnkoKSk7CisgICAgbWFza0lt
YWdlQ29udGV4dC0+Y29uY2F0Q1RNKGFic29sdXRlVHJhbnNmb3JtKTsKKworICAgIEFTU0VSVCht
YXNrSW1hZ2UpOworICAgIHNhdmVkQ29udGV4dCA9IGNvbnRleHQ7CisgICAgY29udGV4dCA9IG1h
c2tJbWFnZUNvbnRleHQ7CisgICAgaW1hZ2VCdWZmZXIgPSBtYXNrSW1hZ2UucmVsZWFzZSgpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSBjbGlw
VG9UZXh0TWFzayhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBib3VuZGluZ0JveE1vZGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50
VHJhbnNmb3JtKQoreworICAgIFJlbmRlck9iamVjdCogdGV4dFJvb3RCbG9jayA9IFJlbmRlclNW
R1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3RvcihvYmplY3QpOworICAgIEFTU0VSVCh0
ZXh0Um9vdEJsb2NrKTsKKworICAgIHRhcmdldFJlY3QgPSB0ZXh0Um9vdEJsb2NrLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRl
VHJhbnNmb3JtOworICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0
aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKHRleHRSb290QmxvY2ssIGFic29sdXRl
VHJhbnNmb3JtKTsKKworICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0
ZVRyYW5zZm9ybS5tYXBSZWN0KHRhcmdldFJlY3QpOworICAgIEZsb2F0UmVjdCBjbGFtcGVkQWJz
b2x1dGVUYXJnZXRSZWN0ID0gU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xhbXBlZEFic29sdXRlVGFy
Z2V0UmVjdEZvclJlbmRlcmVyKHRleHRSb290QmxvY2ssIGFic29sdXRlVGFyZ2V0UmVjdCk7CisK
KyAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGlwVG9JbWFnZUJ1ZmZlcihjb250ZXh0LCBhYnNv
bHV0ZVRyYW5zZm9ybSwgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCwgaW1hZ2VCdWZmZXIpOwor
CisgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKKyAgICBpZiAoYm91bmRpbmdCb3hNb2RlKSB7
CisgICAgICAgIEZsb2F0UmVjdCBtYXNrQm91bmRpbmdCb3ggPSB0ZXh0Um9vdEJsb2NrLT5vYmpl
Y3RCb3VuZGluZ0JveCgpOworICAgICAgICBtYXRyaXgudHJhbnNsYXRlKG1hc2tCb3VuZGluZ0Jv
eC54KCksIG1hc2tCb3VuZGluZ0JveC55KCkpOworICAgICAgICBtYXRyaXguc2NhbGVOb25Vbmlm
b3JtKG1hc2tCb3VuZGluZ0JveC53aWR0aCgpLCBtYXNrQm91bmRpbmdCb3guaGVpZ2h0KCkpOwor
ICAgIH0KKyAgICBtYXRyaXgubXVsdExlZnQoZ3JhZGllbnRUcmFuc2Zvcm0pOworICAgIHJldHVy
biBtYXRyaXg7Cit9CisjZW5kaWYKKworYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojph
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSogc3R5bGUsIEdy
YXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkKK3sK
KyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQoc3R5bGUpOworICAgIEFTU0VSVChjb250
ZXh0KTsKKyAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CisK
KyAgICAvLyBCZSBzdXJlIHRvIHN5bmNocm9uaXplIGFsbCBTVkcgcHJvcGVydGllcyBvbiB0aGUg
Z3JhZGllbnRFbGVtZW50IF9iZWZvcmVfIHByb2Nlc3NpbmcgYW55IGZ1cnRoZXIuCisgICAgLy8g
T3RoZXJ3aGlzZSB0aGUgY2FsbCB0byBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKCkgaW4gY3Jl
YXRlVGlsZUltYWdlKCksIG1heSBjYXVzZSB0aGUgU1ZHIERPTSBwcm9wZXJ0eQorICAgIC8vIHN5
bmNocm9uaXphdGlvbiB0byBraWNrIGluLCB3aGljaCBjYXVzZXMgcmVtb3ZlQWxsQ2xpZW50c0Zy
b21DYWNoZSgpIHRvIGJlIGNhbGxlZCwgd2hpY2ggaW4gdHVybiBkZWxldGVzIG91cgorICAgIC8v
IEdyYWRpZW50RGF0YSBvYmplY3QhIExlYXZpbmcgb3V0IHRoZSBsaW5lIGJlbG93IHdpbGwgY2F1
c2Ugc3ZnL2R5bmFtaWMtdXBkYXRlcy9TVkcqR3JhZGllbnRFbGVtZW50LXN2Z2RvbSogdG8gY3Jh
c2guCisgICAgU1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTVkdHcmFkaWVudEVsZW1lbnQqPihub2RlKCkpOworICAgIGlmICghZ3JhZGllbnRFbGVtZW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9zaG91bGRDb2xsZWN0R3JhZGll
bnRBdHRyaWJ1dGVzKSB7CisgICAgICAgIGdyYWRpZW50RWxlbWVudC0+dXBkYXRlQW5pbWF0ZWRT
VkdBdHRyaWJ1dGUoYW55UU5hbWUoKSk7CisgICAgICAgIGNvbGxlY3RHcmFkaWVudEF0dHJpYnV0
ZXMoZ3JhZGllbnRFbGVtZW50KTsKKyAgICAgICAgbV9zaG91bGRDb2xsZWN0R3JhZGllbnRBdHRy
aWJ1dGVzID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gU3BlYzogV2hlbiB0aGUgZ2VvbWV0cnkg
b2YgdGhlIGFwcGxpY2FibGUgZWxlbWVudCBoYXMgbm8gd2lkdGggb3IgaGVpZ2h0IGFuZCBvYmpl
Y3RCb3VuZGluZ0JveCBpcyBzcGVjaWZpZWQsCisgICAgLy8gdGhlbiB0aGUgZ2l2ZW4gZWZmZWN0
IChlLmcuIGEgZ3JhZGllbnQgb3IgYSBmaWx0ZXIpIHdpbGwgYmUgaWdub3JlZC4KKyAgICBGbG9h
dFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7Cisg
ICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX2dyYWRpZW50LmNvbnRhaW5zKG9i
amVjdCkpCisgICAgICAgIG1fZ3JhZGllbnQuc2V0KG9iamVjdCwgbmV3IEdyYWRpZW50RGF0YSk7
CisKKyAgICBHcmFkaWVudERhdGEqIGdyYWRpZW50RGF0YSA9IG1fZ3JhZGllbnQuZ2V0KG9iamVj
dCk7CisgICAgYm9vbCBpc1BhaW50aW5nVGV4dCA9IHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0
TW9kZTsKKworICAgIC8vIENyZWF0ZSBncmFkaWVudCBvYmplY3QKKyAgICBpZiAoIWdyYWRpZW50
RGF0YS0+Z3JhZGllbnQpIHsKKyAgICAgICAgYnVpbGRHcmFkaWVudChncmFkaWVudERhdGEsIGdy
YWRpZW50RWxlbWVudCk7CisKKyAgICAgICAgLy8gQ0cgcGxhdGZvcm1zIHdpbGwgaGFuZGxlIHRo
ZSBncmFkaWVudCBzcGFjZSB0cmFuc2Zvcm0gZm9yIHRleHQgYWZ0ZXIgYXBwbHlpbmcgdGhlCisg
ICAgICAgIC8vIHJlc291cmNlLCBzbyBkb24ndCBhcHBseSBpdCBoZXJlLiBGb3Igbm9uLUNHIHBs
YXRmb3Jtcywgd2Ugd2FudCB0aGUgdGV4dCBib3VuZGluZworICAgICAgICAvLyBib3ggYXBwbGll
ZCB0byB0aGUgZ3JhZGllbnQgc3BhY2UgdHJhbnNmb3JtIG5vdywgc28gdGhlIGdyYWRpZW50IHNo
YWRlciBjYW4gdXNlIGl0LgorI2lmIFBMQVRGT1JNKENHKQorICAgICAgICBpZiAoYm91bmRpbmdC
b3hNb2RlKCkgJiYgIW9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSAmJiAhaXNQYWludGluZ1Rl
eHQpIHsKKyNlbHNlCisgICAgICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSAmJiAhb2JqZWN0Qm91
bmRpbmdCb3guaXNFbXB0eSgpKSB7CisjZW5kaWYKKyAgICAgICAgICAgIGdyYWRpZW50RGF0YS0+
dXNlcnNwYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54KCksIG9iamVj
dEJvdW5kaW5nQm94LnkoKSk7CisgICAgICAgICAgICBncmFkaWVudERhdGEtPnVzZXJzcGFjZVRy
YW5zZm9ybS5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0
Qm91bmRpbmdCb3guaGVpZ2h0KCkpOworICAgICAgICB9CisKKyAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIGdyYWRpZW50VHJhbnNmb3JtOworICAgICAgICBjYWxjdWxhdGVHcmFkaWVudFRyYW5zZm9y
bShncmFkaWVudFRyYW5zZm9ybSk7CisKKyAgICAgICAgZ3JhZGllbnREYXRhLT51c2Vyc3BhY2VU
cmFuc2Zvcm0ubXVsdExlZnQoZ3JhZGllbnRUcmFuc2Zvcm0pOworICAgICAgICBncmFkaWVudERh
dGEtPmdyYWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGdyYWRpZW50RGF0YS0+dXNl
cnNwYWNlVHJhbnNmb3JtKTsKKyAgICB9CisKKyAgICBpZiAoIWdyYWRpZW50RGF0YS0+Z3JhZGll
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIERyYXcgZ3JhZGllbnQKKyAgICBj
b250ZXh0LT5zYXZlKCk7CisKKyAgICBpZiAoaXNQYWludGluZ1RleHQpIHsKKyNpZiBQTEFURk9S
TShDRykKKyAgICAgICAgaWYgKCFjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRGb3JUZXh0R3JhZGll
bnQoY29udGV4dCwgbV9zYXZlZENvbnRleHQsIG1faW1hZ2VCdWZmZXIsIG9iamVjdCkpIHsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2Rl
KHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSA/IFRleHRNb2RlRmlsbCA6IFRleHRNb2Rl
U3Ryb2tlKTsKKyAgICB9CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBz
dHlsZS0+c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3ZnU3R5bGUpOworCisgICAgaWYgKHJlc291
cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkgeworICAgICAgICBjb250ZXh0LT5zZXRBbHBoYShz
dmdTdHlsZS0+ZmlsbE9wYWNpdHkoKSk7CisgICAgICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVu
dChncmFkaWVudERhdGEtPmdyYWRpZW50KTsKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUo
c3ZnU3R5bGUtPmZpbGxSdWxlKCkpOworICAgIH0gZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBw
bHlUb1N0cm9rZU1vZGUpIHsKKyAgICAgICAgaWYgKHN2Z1N0eWxlLT52ZWN0b3JFZmZlY3QoKSA9
PSBWRV9OT05fU0NBTElOR19TVFJPS0UpCisgICAgICAgICAgICBncmFkaWVudERhdGEtPmdyYWRp
ZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKHRyYW5zZm9ybU9uTm9uU2NhbGluZ1N0cm9r
ZShvYmplY3QsIGdyYWRpZW50RGF0YS0+dXNlcnNwYWNlVHJhbnNmb3JtKSk7CisgICAgICAgIGNv
bnRleHQtPnNldEFscGhhKHN2Z1N0eWxlLT5zdHJva2VPcGFjaXR5KCkpOworICAgICAgICBjb250
ZXh0LT5zZXRTdHJva2VHcmFkaWVudChncmFkaWVudERhdGEtPmdyYWRpZW50KTsKKyAgICAgICAg
U1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHls
ZSwgb2JqZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVj
dCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2Rl
LCBjb25zdCBQYXRoKiBwYXRoKQoreworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBBU1NFUlQo
cmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CisKKyAgICBpZiAocmVzb3VyY2VN
b2RlICYgQXBwbHlUb1RleHRNb2RlKSB7CisjaWYgUExBVEZPUk0oQ0cpCisgICAgICAgIC8vIENH
IHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGdyYWRpZW50IG9uIHRleHQKKyAgICAgICAg
aWYgKG1fc2F2ZWRDb250ZXh0ICYmIG1fZ3JhZGllbnQuY29udGFpbnMob2JqZWN0KSkgeworICAg
ICAgICAgICAgR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEgPSBtX2dyYWRpZW50LmdldChvYmpl
Y3QpOworCisgICAgICAgICAgICAvLyBSZXN0b3JlIG9uLXNjcmVlbiBkcmF3aW5nIGNvbnRleHQK
KyAgICAgICAgICAgIGNvbnRleHQgPSBtX3NhdmVkQ29udGV4dDsKKyAgICAgICAgICAgIG1fc2F2
ZWRDb250ZXh0ID0gMDsKKworICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50VHJh
bnNmb3JtOworICAgICAgICAgICAgY2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zvcm0oZ3JhZGllbnRU
cmFuc2Zvcm0pOworCisgICAgICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdDsKKyAgICAgICAg
ICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQtPnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY2xp
cFRvVGV4dE1hc2soY29udGV4dCwgbV9pbWFnZUJ1ZmZlciwgdGFyZ2V0UmVjdCwgb2JqZWN0LCBi
b3VuZGluZ0JveE1vZGUoKSwgZ3JhZGllbnRUcmFuc2Zvcm0pKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldEZpbGxHcmFkaWVudChncmFkaWVudERhdGEtPmdyYWRpZW50KTsKKworICAgICAgICAg
ICAgY29udGV4dC0+ZmlsbFJlY3QodGFyZ2V0UmVjdCk7CisgICAgICAgICAgICBtX2ltYWdlQnVm
ZmVyLmNsZWFyKCk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShvYmpl
Y3QpOworI2VuZGlmCisgICAgfSBlbHNlIGlmIChwYXRoKSB7CisgICAgICAgIGlmIChyZXNvdXJj
ZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCisgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgq
cGF0aCk7CisgICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2Rl
KQorICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgfQorCisgICAg
Y29udGV4dC0+cmVzdG9yZSgpOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6
OmFkZFN0b3BzKEdyYWRpZW50RGF0YSogZ3JhZGllbnREYXRhLCBjb25zdCBWZWN0b3I8R3JhZGll
bnQ6OkNvbG9yU3RvcD4mIHN0b3BzKSBjb25zdAoreworICAgIEFTU0VSVChncmFkaWVudERhdGEt
PmdyYWRpZW50KTsKKworICAgIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gc3RvcHMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8R3JhZGllbnQ6
OkNvbG9yU3RvcD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RvcHMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5hZGRDb2xvclN0b3AoKml0
KTsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCShyZXZpc2lvbiA3NTM0
NSkJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuaDo3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50X2gKKyNkZWZpbmUg
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudF9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YWRpZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgorCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3Qg
R3JhZGllbnREYXRhIHsKKyAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50OworICAgIEFmZmlu
ZVRyYW5zZm9ybSB1c2Vyc3BhY2VUcmFuc2Zvcm07Cit9OworCitjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CisKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQgOiBwdWJsaWMgUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIgeworcHVibGljOgorICAgIFJlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQoU1ZHR3JhZGllbnRFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUo
Ym9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24g
PSB0cnVlKTsKKworICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNl
TW9kZSk7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBh
dGgqKTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9i
amVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGFk
ZFN0b3BzKEdyYWRpZW50RGF0YSosIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiYp
IGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zvcm0oQWZmaW5lVHJhbnNm
b3JtJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKFNW
R0dyYWRpZW50RWxlbWVudCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFkaWVudChH
cmFkaWVudERhdGEqLCBTVkdHcmFkaWVudEVsZW1lbnQqKSBjb25zdCA9IDA7CisKK3ByaXZhdGU6
CisgICAgYm9vbCBtX3Nob3VsZENvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMgOiAxOworICAgIEhh
c2hNYXA8UmVuZGVyT2JqZWN0KiwgR3JhZGllbnREYXRhKj4gbV9ncmFkaWVudDsKKworI2lmIFBM
QVRGT1JNKENHKQorICAgIEdyYXBoaWNzQ29udGV4dCogbV9zYXZlZENvbnRleHQ7CisgICAgT3du
UHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworI2VuZGlmCit9OworCit9CisKKyNlbmRp
ZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlTGluZWFyR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAJKHJldmlzaW9u
IDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VM
aW5lYXJHcmFkaWVudC5jcHA6NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFk
aWVudC5oIgorCisjaW5jbHVkZSAiTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgiCisjaW5jbHVk
ZSAiU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVuZGVyU1ZHUmVzb3VyY2VUeXBlIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OnNf
cmVzb3VyY2VUeXBlID0gTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGU7CisKK1JlbmRlclNWR1Jl
c291cmNlTGluZWFyR3JhZGllbnQ6OlJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQoU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudChub2RlKQoreworfQorCitSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50Ojp+UmVu
ZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudCgpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VMaW5lYXJHcmFkaWVudDo6Y29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhTVkdHcmFkaWVu
dEVsZW1lbnQqIGdyYWRpZW50RWxlbWVudCkKK3sKKyAgICBtX2F0dHJpYnV0ZXMgPSBMaW5lYXJH
cmFkaWVudEF0dHJpYnV0ZXMoKTsKKyAgICBzdGF0aWNfY2FzdDxTVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQqPihncmFkaWVudEVsZW1lbnQpLT5jb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKG1fYXR0
cmlidXRlcyk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudDo6YnVp
bGRHcmFkaWVudChHcmFkaWVudERhdGEqIGdyYWRpZW50RGF0YSwgU1ZHR3JhZGllbnRFbGVtZW50
KiBncmFkaWVudEVsZW1lbnQpIGNvbnN0Cit7CisgICAgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50
KiBsaW5lYXJHcmFkaWVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQqPihncmFkaWVudEVsZW1lbnQpOworCisgICAgLy8gRGV0ZXJtaW5lIGdyYWRpZW50IHN0
YXJ0L2VuZCBwb2ludHMKKyAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQ7CisgICAgRmxvYXRQb2lu
dCBlbmRQb2ludDsKKyAgICBsaW5lYXJHcmFkaWVudEVsZW1lbnQtPmNhbGN1bGF0ZVN0YXJ0RW5k
UG9pbnRzKG1fYXR0cmlidXRlcywgc3RhcnRQb2ludCwgZW5kUG9pbnQpOworCisgICAgZ3JhZGll
bnREYXRhLT5ncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoc3RhcnRQb2ludCwgZW5kUG9pbnQp
OworICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQtPnNldFNwcmVhZE1ldGhvZChtX2F0dHJpYnV0
ZXMuc3ByZWFkTWV0aG9kKCkpOworCisgICAgLy8gQWRkIHN0b3BzCisgICAgYWRkU3RvcHMoZ3Jh
ZGllbnREYXRhLCBtX2F0dHJpYnV0ZXMuc3RvcHMoKSk7Cit9CisKK30KKworI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3Jh
ZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50Lmg6NzUz
NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGlu
ZWFyR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnRfaAor
I2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50X2gKKworI2lmIEVOQUJMRShT
VkcpCisjaW5jbHVkZSAiTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDsKKworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudCA6IHB1YmxpYyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50IHsKK3B1YmxpYzoK
KyAgICBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50KFNWR0xpbmVhckdyYWRpZW50RWxl
bWVudCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQoKTsK
KworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJS
ZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50IjsgfQorCisgICAgdmlydHVhbCBSZW5kZXJT
VkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5
cGU7IH0KKyAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBlOwor
CisgICAgdmlydHVhbCBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVH
cmFkaWVudFRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyB0cmFuc2Zvcm0g
PSBtX2F0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgdm9pZCBj
b2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKFNWR0dyYWRpZW50RWxlbWVudCopOworICAgIHZpcnR1
YWwgdm9pZCBidWlsZEdyYWRpZW50KEdyYWRpZW50RGF0YSosIFNWR0dyYWRpZW50RWxlbWVudCop
IGNvbnN0OworCitwcml2YXRlOgorICAgIExpbmVhckdyYWRpZW50QXR0cmlidXRlcyBtX2F0dHJp
YnV0ZXM7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAko
cmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlci5jcHA6NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgorI2luY2x1ZGUgIlNWR0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJTVkdNYXJrZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVy
U3VwcG9ydC5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Jl
bmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6c19yZXNvdXJjZVR5
cGUgPSBNYXJrZXJSZXNvdXJjZVR5cGU7CisKK1JlbmRlclNWR1Jlc291cmNlTWFya2VyOjpSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlcihTVkdNYXJrZXJFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKK3sKK30KKworUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXI6On5SZW5kZXJTVkdSZXNvdXJjZU1hcmtlcigpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXI6OmxheW91dCgpCit7CisgICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2Vz
IGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KKyAgICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZO
ZWVkc0xheW91dCgpKQorICAgICAgICByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7CisKKyAg
ICAvLyBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIgb3ZlcndyaXRlcyBsYXlvdXQoKS4gV2UgbmVl
ZCB0aGUKKyAgICAvLyBsYXlvdXRpbmcgb2YgUmVuZGVyU1ZHQ29udGFpbmVyIGZvciBjYWxjdWxh
dGluZyAgbG9jYWwKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbnMgYW5kIHJlcGFpbnQuCisgICAgUmVu
ZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXQoKTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlcjo6cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlkYXRpb24p
Cit7CisgICAgbWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlv
biA/IExheW91dEFuZEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0
aW9uKTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6cmVtb3ZlQ2xpZW50RnJv
bUNhY2hlKFJlbmRlck9iamVjdCogY2xpZW50LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCit7
CisgICAgQVNTRVJUKGNsaWVudCk7CisgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihjbGll
bnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFyZW50
T25seUludmFsaWRhdGlvbik7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmFw
cGx5Vmlld3BvcnRDbGlwKFBhaW50SW5mbyYgcGFpbnRJbmZvKQoreworICAgIGlmIChTVkdSZW5k
ZXJTdXBwb3J0Ojppc092ZXJmbG93SGlkZGVuKHRoaXMpKQorICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+Y2xpcChtX3ZpZXdwb3J0KTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNl
TWFya2VyOjptYXJrZXJCb3VuZGFyaWVzKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWFya2VyVHJh
bnNmb3JtYXRpb24pIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IGNvb3JkaW5hdGVzID0gUmVuZGVy
U1ZHQ29udGFpbmVyOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworCisgICAgLy8g
TWFwIHJlcGFpbnQgcmVjdCBpbnRvIHBhcmVudCBjb29yZGluYXRlIHNwYWNlLCBpbiB3aGljaCB0
aGUgbWFya2VyIGJvdW5kYXJpZXMgaGF2ZSB0byBiZSBldmFsdWF0ZWQKKyAgICBjb29yZGluYXRl
cyA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KGNvb3JkaW5hdGVzKTsKKworICAg
IHJldHVybiBtYXJrZXJUcmFuc2Zvcm1hdGlvbi5tYXBSZWN0KGNvb3JkaW5hdGVzKTsKK30KKwor
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bG9jYWxUb1Bh
cmVudFRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdwb3J0VHJh
bnNsYXRpb24odmlld3BvcnRUcmFuc2Zvcm0oKSk7CisgICAgbV9sb2NhbFRvUGFyZW50VHJhbnNm
b3JtID0gdmlld3BvcnRUcmFuc2xhdGlvbi50cmFuc2xhdGVSaWdodChtX3ZpZXdwb3J0LngoKSwg
bV92aWV3cG9ydC55KCkpOworICAgIHJldHVybiBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07Cisg
ICAgLy8gSWYgdGhpcyBjbGFzcyB3ZXJlIGV2ZXIgZ2l2ZW4gYSBsb2NhbFRyYW5zZm9ybSgpLCB0
aGVuIHRoZSBhYm92ZSB3b3VsZCByZWFkOgorICAgIC8vIHJldHVybiB2aWV3cG9ydFRyYW5zZm9y
bSgpICogbG9jYWxUcmFuc2Zvcm0oKSAqIHZpZXdwb3J0VHJhbnNsYXRpb247Cit9CisKK0Zsb2F0
UG9pbnQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OnJlZmVyZW5jZVBvaW50KCkgY29uc3QKK3sK
KyAgICBTVkdNYXJrZXJFbGVtZW50KiBtYXJrZXIgPSBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVt
ZW50Kj4obm9kZSgpKTsKKyAgICBBU1NFUlQobWFya2VyKTsKKworICAgIHJldHVybiBGbG9hdFBv
aW50KG1hcmtlci0+cmVmWCgpLnZhbHVlKG1hcmtlciksIG1hcmtlci0+cmVmWSgpLnZhbHVlKG1h
cmtlcikpOworfQorCitmbG9hdCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6YW5nbGUoKSBjb25z
dAoreworICAgIFNWR01hcmtlckVsZW1lbnQqIG1hcmtlciA9IHN0YXRpY19jYXN0PFNWR01hcmtl
ckVsZW1lbnQqPihub2RlKCkpOworICAgIEFTU0VSVChtYXJrZXIpOworCisgICAgZmxvYXQgYW5n
bGUgPSAtMTsKKyAgICBpZiAobWFya2VyLT5vcmllbnRUeXBlKCkgPT0gU1ZHTWFya2VyRWxlbWVu
dDo6U1ZHX01BUktFUl9PUklFTlRfQU5HTEUpCisgICAgICAgIGFuZ2xlID0gbWFya2VyLT5vcmll
bnRBbmdsZSgpLnZhbHVlKCk7CisKKyAgICByZXR1cm4gYW5nbGU7Cit9CisKK0FmZmluZVRyYW5z
Zm9ybSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bWFya2VyVHJhbnNmb3JtYXRpb24oY29uc3Qg
RmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBhdXRvQW5nbGUsIGZsb2F0IHN0cm9rZVdpZHRoKSBj
b25zdAoreworICAgIFNWR01hcmtlckVsZW1lbnQqIG1hcmtlciA9IHN0YXRpY19jYXN0PFNWR01h
cmtlckVsZW1lbnQqPihub2RlKCkpOworICAgIEFTU0VSVChtYXJrZXIpOworCisgICAgZmxvYXQg
bWFya2VyQW5nbGUgPSBhbmdsZSgpOworICAgIGJvb2wgdXNlU3Ryb2tlV2lkdGggPSAobWFya2Vy
LT5tYXJrZXJVbml0cygpID09IFNWR01hcmtlckVsZW1lbnQ6OlNWR19NQVJLRVJVTklUU19TVFJP
S0VXSURUSCk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgIHRyYW5zZm9y
bS50cmFuc2xhdGUob3JpZ2luLngoKSwgb3JpZ2luLnkoKSk7CisgICAgdHJhbnNmb3JtLnJvdGF0
ZShtYXJrZXJBbmdsZSA9PSAtMSA/IGF1dG9BbmdsZSA6IG1hcmtlckFuZ2xlKTsKKyAgICB0cmFu
c2Zvcm0gPSBtYXJrZXJDb250ZW50VHJhbnNmb3JtYXRpb24odHJhbnNmb3JtLCByZWZlcmVuY2VQ
b2ludCgpLCB1c2VTdHJva2VXaWR0aCA/IHN0cm9rZVdpZHRoIDogLTEpOworICAgIHJldHVybiB0
cmFuc2Zvcm07Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmRyYXcoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAg
IFBhaW50SW5mbyBpbmZvKHBhaW50SW5mbyk7CisgICAgaW5mby5jb250ZXh0LT5zYXZlKCk7Cisg
ICAgaW5mby5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIFJlbmRlclNWR0NvbnRhaW5l
cjo6cGFpbnQoaW5mbywgMCwgMCk7CisgICAgaW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Cit9CisK
K0FmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bWFya2VyQ29udGVudFRy
YW5zZm9ybWF0aW9uKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY29udGVudFRyYW5zZm9ybWF0aW9u
LCBjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAorewor
ICAgIC8vIFRoZSAnb3JpZ2luJyBjb29yZGluYXRlIG1hcHMgdG8gU1ZHcyByZWZYL3JlZlksIGdp
dmVuIGluIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydCBlc3RhYmxpc2hlZCBi
eSB0aGUgbWFya2VyCisgICAgRmxvYXRQb2ludCBtYXBwZWRPcmlnaW4gPSB2aWV3cG9ydFRyYW5z
Zm9ybSgpLm1hcFBvaW50KG9yaWdpbik7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
YXRpb24gPSBjb250ZW50VHJhbnNmb3JtYXRpb247CisgICAgaWYgKHN0cm9rZVdpZHRoICE9IC0x
KQorICAgICAgICB0cmFuc2Zvcm1hdGlvbi5zY2FsZU5vblVuaWZvcm0oc3Ryb2tlV2lkdGgsIHN0
cm9rZVdpZHRoKTsKKworICAgIHRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZSgtbWFwcGVkT3JpZ2lu
LngoKSwgLW1hcHBlZE9yaWdpbi55KCkpOworICAgIHJldHVybiB0cmFuc2Zvcm1hdGlvbjsKK30K
KworQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjp2aWV3cG9ydFRyYW5z
Zm9ybSgpIGNvbnN0Cit7CisgICAgU1ZHTWFya2VyRWxlbWVudCogbWFya2VyID0gc3RhdGljX2Nh
c3Q8U1ZHTWFya2VyRWxlbWVudCo+KG5vZGUoKSk7CisgICAgQVNTRVJUKG1hcmtlcik7CisKKyAg
ICByZXR1cm4gbWFya2VyLT52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKG1fdmlld3BvcnQud2lkdGgo
KSwgbV92aWV3cG9ydC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXI6OmNhbGNWaWV3cG9ydCgpCit7CisgICAgaWYgKCFzZWxmTmVlZHNMYXlvdXQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgU1ZHTWFya2VyRWxlbWVudCogbWFya2VyID0gc3RhdGljX2Nhc3Q8
U1ZHTWFya2VyRWxlbWVudCo+KG5vZGUoKSk7CisgICAgQVNTRVJUKG1hcmtlcik7CisKKyAgICBm
bG9hdCB3ID0gbWFya2VyLT5tYXJrZXJXaWR0aCgpLnZhbHVlKG1hcmtlcik7CisgICAgZmxvYXQg
aCA9IG1hcmtlci0+bWFya2VySGVpZ2h0KCkudmFsdWUobWFya2VyKTsKKyAgICBtX3ZpZXdwb3J0
ID0gRmxvYXRSZWN0KDAsIDAsIHcsIGgpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZH
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1h
cmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIuaAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oOjc1MzQ1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlcl9oCisjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlTWFya2VyX2gK
KworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKKyNp
bmNsdWRlICJTVkdNYXJrZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5o
IgorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBBZmZpbmVUcmFuc2Zvcm07CisKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlTWFya2VyIDog
cHVibGljIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlcihTVkdNYXJrZXJFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIoKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciI7IH0KKworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRh
dGlvbiA9IHRydWUpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CisKKyAgICB2b2lk
IGRyYXcoUGFpbnRJbmZvJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisKKyAgICAvLyBDYWxj
dWxhdGVzIG1hcmtlciBib3VuZGFyaWVzLCBtYXBwZWQgdG8gdGhlIHRhcmdldCBlbGVtZW50J3Mg
Y29vcmRpbmF0ZSBzcGFjZQorICAgIEZsb2F0UmVjdCBtYXJrZXJCb3VuZGFyaWVzKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgbWFya2VyVHJhbnNmb3JtYXRpb24pIGNvbnN0OworCisgICAgdmlydHVh
bCB2b2lkIGFwcGx5Vmlld3BvcnRDbGlwKFBhaW50SW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCBs
YXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ZpZXdwb3J0KCk7CisKKyAgICB2aXJ0dWFs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0Owor
ICAgIEFmZmluZVRyYW5zZm9ybSBtYXJrZXJUcmFuc2Zvcm1hdGlvbihjb25zdCBGbG9hdFBvaW50
JiBvcmlnaW4sIGZsb2F0IGFuZ2xlLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7CisKKyAgICB2
aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdy
YXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0
dXJuIEZsb2F0UmVjdCgpOyB9CisKKyAgICBGbG9hdFBvaW50IHJlZmVyZW5jZVBvaW50KCkgY29u
c3Q7CisgICAgZmxvYXQgYW5nbGUoKSBjb25zdDsKKyAgICBTVkdNYXJrZXJFbGVtZW50OjpTVkdN
YXJrZXJVbml0c1R5cGUgbWFya2VyVW5pdHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxT
VkdNYXJrZXJFbGVtZW50OjpTVkdNYXJrZXJVbml0c1R5cGU+KHN0YXRpY19jYXN0PFNWR01hcmtl
ckVsZW1lbnQqPihub2RlKCkpLT5tYXJrZXJVbml0cygpKTsgfQorCisgICAgdmlydHVhbCBSZW5k
ZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJj
ZVR5cGU7IH0KKyAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBl
OworCitwcml2YXRlOgorICAgIC8vIEdlbmVyYXRlcyBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB1
c2FibGUgdG8gcmVuZGVyIG1hcmtlciBjb250ZW50LiBIYW5kbGVzIHNjYWxpbmcgdGhlIG1hcmtl
ciBjb250ZW50CisgICAgLy8gYWNvcmRpbmcgdG8gU1ZHcyBtYXJrZXJVbml0cz0ic3Ryb2tlV2lk
dGgiIGNvbmNlcHQsIHdoZW4gYSBzdHJva2VXaWR0aCB2YWx1ZSAhPSAtMSBpcyBwYXNzZWQgaW4u
CisgICAgQWZmaW5lVHJhbnNmb3JtIG1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYg
b3JpZ2luLCBmbG9hdCBzdHJva2VXaWR0aCA9IC0xKSBjb25zdDsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSB2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0OworCisgICAgbXV0YWJsZSBBZmZpbmVUcmFu
c2Zvcm0gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOworICAgIEZsb2F0UmVjdCBtX3ZpZXdwb3J0
OworfTsKKworfQorI2VuZGlmCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHJldmlz
aW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIuY3BwOjc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIgorCisjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVk
ZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKKyNpbmNs
dWRlICJTVkdNYXNrRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJTVkdVbml0VHlwZXMuaCIKKworI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KKyNp
bmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIFJlbmRlclNWR1Jlc291
cmNlTWFza2VyOjpzX3Jlc291cmNlVHlwZSA9IE1hc2tlclJlc291cmNlVHlwZTsKKworUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXI6OlJlbmRlclNWR1Jlc291cmNlTWFza2VyKFNWR01hc2tFbGVtZW50
KiBub2RlKQorICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKK3sKK30KKwor
UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6On5SZW5kZXJTVkdSZXNvdXJjZU1hc2tlcigpCit7Cisg
ICAgaWYgKG1fbWFza2VyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRl
QWxsVmFsdWVzKG1fbWFza2VyKTsKKyAgICBtX21hc2tlci5jbGVhcigpOworfQorCit2b2lkIFJl
bmRlclNWR1Jlc291cmNlTWFza2VyOjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFy
a0ZvckludmFsaWRhdGlvbikKK3sKKyAgICBtX21hc2tDb250ZW50Qm91bmRhcmllcyA9IEZsb2F0
UmVjdCgpOworICAgIGlmICghbV9tYXNrZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIGRlbGV0ZUFs
bFZhbHVlcyhtX21hc2tlcik7CisgICAgICAgIG1fbWFza2VyLmNsZWFyKCk7CisgICAgfQorCisg
ICAgbWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IExh
eW91dEFuZEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsK
K30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hl
KFJlbmRlck9iamVjdCogY2xpZW50LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCit7CisgICAg
QVNTRVJUKGNsaWVudCk7CisKKyAgICBpZiAobV9tYXNrZXIuY29udGFpbnMoY2xpZW50KSkKKyAg
ICAgICAgZGVsZXRlIG1fbWFza2VyLnRha2UoY2xpZW50KTsKKworICAgIG1hcmtDbGllbnRGb3JJ
bnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRhcmllc0ludmFs
aWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOworfQorCitib29sIFJlbmRlclNWR1Jl
c291cmNlTWFza2VyOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJT
dHlsZSosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNl
TW9kZSkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisjaWZu
ZGVmIE5ERUJVRworICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgPT0gQXBwbHlUb0RlZmF1bHRNb2Rl
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlc291cmNlTW9kZSk7CisjZW5kaWYKKworICAg
IGlmICghbV9tYXNrZXIuY29udGFpbnMob2JqZWN0KSkKKyAgICAgICAgbV9tYXNrZXIuc2V0KG9i
amVjdCwgbmV3IE1hc2tlckRhdGEpOworCisgICAgTWFza2VyRGF0YSogbWFza2VyRGF0YSA9IG1f
bWFza2VyLmdldChvYmplY3QpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNm
b3JtOworICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9P
dXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKG9iamVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0pOwor
CisgICAgRmxvYXRSZWN0IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtLm1h
cFJlY3Qob2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBGbG9h
dFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNs
YW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcihvYmplY3QsIGFic29sdXRlVGFyZ2V0
UmVjdCk7CisKKyAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSAmJiAhY2xhbXBlZEFic29s
dXRlVGFyZ2V0UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHTWFza0VsZW1lbnQqIG1hc2tF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpOworICAgICAgICBp
ZiAoIW1hc2tFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlm
ICghU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVUYXJnZXRS
ZWN0LCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UsIENv
bG9yU3BhY2VMaW5lYXJSR0IpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tlckRhdGEtPm1hc2tJbWFn
ZS0+Y29udGV4dCgpOworICAgICAgICBBU1NFUlQobWFza0ltYWdlQ29udGV4dCk7CisKKyAgICAg
ICAgLy8gVGhlIHNhdmUvcmVzdG9yZSBwYWlyIGlzIG5lZWRlZCBmb3IgY2xpcFRvSW1hZ2VCdWZm
ZXIgLSBpdCBkb2Vzbid0IHdvcmsgd2l0aG91dCBpdCBvbiBub24tQ2cgcGxhdGZvcm1zLgorICAg
ICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zYXZlKCk7CisgICAgICAgIG1hc2tJbWFnZUNvbnRleHQt
PnRyYW5zbGF0ZSgtY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC54KCksIC1jbGFtcGVkQWJzb2x1
dGVUYXJnZXRSZWN0LnkoKSk7CisgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmNvbmNhdENUTShh
YnNvbHV0ZVRyYW5zZm9ybSk7CisKKyAgICAgICAgZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKG1h
c2tlckRhdGEsIG1hc2tFbGVtZW50LCBvYmplY3QpOworICAgIH0KKworICAgIGlmICghbWFza2Vy
RGF0YS0+bWFza0ltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTVkdJbWFnZUJ1
ZmZlclRvb2xzOjpjbGlwVG9JbWFnZUJ1ZmZlcihjb250ZXh0LCBhYnNvbHV0ZVRyYW5zZm9ybSwg
Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCwgbWFza2VyRGF0YS0+bWFza0ltYWdlKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6ZHJhd0NvbnRl
bnRJbnRvTWFza0ltYWdlKE1hc2tlckRhdGEqIG1hc2tlckRhdGEsIGNvbnN0IFNWR01hc2tFbGVt
ZW50KiBtYXNrRWxlbWVudCwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgR3JhcGhpY3ND
b250ZXh0KiBtYXNrSW1hZ2VDb250ZXh0ID0gbWFza2VyRGF0YS0+bWFza0ltYWdlLT5jb250ZXh0
KCk7CisgICAgQVNTRVJUKG1hc2tJbWFnZUNvbnRleHQpOworCisgICAgLy8gRXZlbnR1YWxseSBh
ZGp1c3QgdGhlIG1hc2sgaW1hZ2UgY29udGV4dCBhY2NvcmRpbmcgdG8gdGhlIHRhcmdldCBvYmpl
Y3RCb3VuZGluZ0JveC4KKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWFza0NvbnRlbnRUcmFuc2Zvcm1h
dGlvbjsKKyAgICBpZiAobWFza0VsZW1lbnQtPm1hc2tDb250ZW50VW5pdHMoKSA9PSBTVkdVbml0
VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKKyAgICAgICAgRmxvYXRS
ZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOworICAg
ICAgICBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0Jv
eC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CisgICAgICAgIG1hc2tDb250ZW50VHJhbnNm
b3JtYXRpb24uc2NhbGVOb25Vbmlmb3JtKG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVj
dEJvdW5kaW5nQm94LmhlaWdodCgpKTsKKyAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+Y29uY2F0
Q1RNKG1hc2tDb250ZW50VHJhbnNmb3JtYXRpb24pOworICAgIH0KKworICAgIC8vIERyYXcgdGhl
IGNvbnRlbnQgaW50byB0aGUgSW1hZ2VCdWZmZXIuCisgICAgZm9yIChOb2RlKiBub2RlID0gbWFz
a0VsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkp
IHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Cisg
ICAgICAgIGlmICghbm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0VsZW1l
bnQqPihub2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAg
ICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNp
YmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBTVkdJ
bWFnZUJ1ZmZlclRvb2xzOjpyZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihtYXNrZXJEYXRhLT5t
YXNrSW1hZ2UuZ2V0KCksIHJlbmRlcmVyLCBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uKTsKKyAg
ICB9CisKKyAgICBtYXNrSW1hZ2VDb250ZXh0LT5yZXN0b3JlKCk7CisKKyNpZiAhUExBVEZPUk0o
Q0cpCisgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlLT50cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9y
U3BhY2VEZXZpY2VSR0IsIENvbG9yU3BhY2VMaW5lYXJSR0IpOworI2VuZGlmCisKKyAgICAvLyBD
cmVhdGUgdGhlIGx1bWluYW5jZSBtYXNrLgorICAgIEludFJlY3QgbWFza0ltYWdlUmVjdChJbnRQ
b2ludCgpLCBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UtPnNpemUoKSk7CisgICAgUmVmUHRyPEJ5dGVB
cnJheT4gc3JjUGl4ZWxBcnJheSA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Z2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKG1hc2tJbWFnZVJlY3QpOworCisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxl
bmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgcGl4ZWxP
ZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9
IDQpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBhID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVs
T2Zmc2V0ICsgMyk7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB1bnNpZ25lZCBjaGFyIHIgPSBzcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxPZmZzZXQpOwor
ICAgICAgICB1bnNpZ25lZCBjaGFyIGcgPSBzcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxPZmZzZXQg
KyAxKTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBiID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVs
T2Zmc2V0ICsgMik7CisKKyAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAw
LjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7CisgICAgICAgIHNyY1Bp
eGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgIH0KKworICAgIG1hc2tl
ckRhdGEtPm1hc2tJbWFnZS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY1BpeGVsQXJyYXku
Z2V0KCksIG1hc2tJbWFnZVJlY3Quc2l6ZSgpLCBtYXNrSW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsK
K30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6Y2FsY3VsYXRlTWFza0NvbnRlbnRS
ZXBhaW50UmVjdCgpCit7CisgICAgZm9yIChOb2RlKiBjaGlsZE5vZGUgPSBub2RlKCktPmZpcnN0
Q2hpbGQoKTsgY2hpbGROb2RlOyBjaGlsZE5vZGUgPSBjaGlsZE5vZGUtPm5leHRTaWJsaW5nKCkp
IHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIo
KTsKKyAgICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2Fz
dDxTVkdFbGVtZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXIt
PnN0eWxlKCk7CisgICAgICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05F
IHx8IHN0eWxlLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgbV9tYXNrQ29udGVudEJvdW5kYXJpZXMudW5pdGUocmVuZGVyZXItPmxvY2Fs
VG9QYXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpKSk7CisgICAgfQorfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXI6OnJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAg
U1ZHTWFza0VsZW1lbnQqIG1hc2tFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQq
Pihub2RlKCkpOworICAgIEFTU0VSVChtYXNrRWxlbWVudCk7CisKKyAgICBGbG9hdFJlY3Qgb2Jq
ZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgRmxvYXRS
ZWN0IG1hc2tCb3VuZGFyaWVzID0gbWFza0VsZW1lbnQtPm1hc2tCb3VuZGluZ0JveChvYmplY3RC
b3VuZGluZ0JveCk7CisKKyAgICAvLyBSZXNvdXJjZSB3YXMgbm90IGxheW91dGVkIHlldC4gR2l2
ZSBiYWNrIGNsaXBwaW5nIHJlY3Qgb2YgdGhlIG1hc2suCisgICAgaWYgKHNlbGZOZWVkc0xheW91
dCgpKQorICAgICAgICByZXR1cm4gbWFza0JvdW5kYXJpZXM7CisKKyAgICBpZiAobV9tYXNrQ29u
dGVudEJvdW5kYXJpZXMuaXNFbXB0eSgpKQorICAgICAgICBjYWxjdWxhdGVNYXNrQ29udGVudFJl
cGFpbnRSZWN0KCk7CisKKyAgICBGbG9hdFJlY3QgbWFza1JlY3QgPSBtX21hc2tDb250ZW50Qm91
bmRhcmllczsKKyAgICBpZiAobWFza0VsZW1lbnQtPm1hc2tDb250ZW50VW5pdHMoKSA9PSBTVkdV
bml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKKyAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShvYmpl
Y3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CisgICAgICAgIHRyYW5z
Zm9ybS5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91
bmRpbmdCb3guaGVpZ2h0KCkpOworICAgICAgICBtYXNrUmVjdCA9IHRyYW5zZm9ybS5tYXBSZWN0
KG1hc2tSZWN0KTsKKyAgICB9CisKKyAgICBtYXNrUmVjdC5pbnRlcnNlY3QobWFza0JvdW5kYXJp
ZXMpOworICAgIHJldHVybiBtYXNrUmVjdDsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNW
RykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlTWFza2VyLmgJKHJldmlzaW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaDo3NTM0NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXJfaAorI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcl9o
CisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW50
U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCisjaW5jbHVk
ZSAiU1ZHTWFza0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKKworI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0cnVjdCBNYXNrZXJEYXRhIHsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+
IG1hc2tJbWFnZTsKK307CisKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlTWFza2VyIDogcHVibGlj
IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdSZXNv
dXJjZU1hc2tlcihTVkdNYXNrRWxlbWVudCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1Jlc291
cmNlTWFza2VyKCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25z
dCB7IHJldHVybiAiUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIiOyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0
cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVj
dCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOworICAgIHZpcnR1YWwgYm9vbCBh
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0
KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qg
cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKTsKKworICAgIFNWR1VuaXRUeXBlczo6
U1ZHVW5pdFR5cGUgbWFza1VuaXRzKCkgY29uc3QgeyByZXR1cm4gdG9Vbml0VHlwZShzdGF0aWNf
Y2FzdDxTVkdNYXNrRWxlbWVudCo+KG5vZGUoKSktPm1hc2tVbml0cygpKTsgfQorICAgIFNWR1Vu
aXRUeXBlczo6U1ZHVW5pdFR5cGUgbWFza0NvbnRlbnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIHRv
VW5pdFR5cGUoc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpLT5tYXNrQ29udGVu
dFVuaXRzKCkpOyB9CisKKyAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJj
ZVR5cGUoKSBjb25zdCB7IHJldHVybiBzX3Jlc291cmNlVHlwZTsgfQorICAgIHN0YXRpYyBSZW5k
ZXJTVkdSZXNvdXJjZVR5cGUgc19yZXNvdXJjZVR5cGU7CisKK3ByaXZhdGU6CisgICAgdm9pZCBk
cmF3Q29udGVudEludG9NYXNrSW1hZ2UoTWFza2VyRGF0YSosIGNvbnN0IFNWR01hc2tFbGVtZW50
KiwgUmVuZGVyT2JqZWN0Kik7CisgICAgdm9pZCBjYWxjdWxhdGVNYXNrQ29udGVudFJlcGFpbnRS
ZWN0KCk7CisKKyAgICBGbG9hdFJlY3QgbV9tYXNrQ29udGVudEJvdW5kYXJpZXM7CisgICAgSGFz
aE1hcDxSZW5kZXJPYmplY3QqLCBNYXNrZXJEYXRhKj4gbV9tYXNrZXI7Cit9OworCit9CisKKyNl
bmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlUGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShyZXZpc2lvbiA3NTM0NSkJKGZy
b20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6
NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
UGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgiCisKKyNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuQXR0cmli
dXRlcy5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJTVkdJbWFnZUJ1
ZmZlclRvb2xzLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1JlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm46OnNfcmVzb3VyY2VUeXBlID0gUGF0dGVyblJlc291cmNlVHlwZTsKKworUmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuOjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4oU1ZHUGF0dGVybkVsZW1lbnQq
IG5vZGUpCisgICAgOiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcihub2RlKQorICAgICwgbV9z
aG91bGRDb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXModHJ1ZSkKK3sKK30KKworUmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuOjp+UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuKCkKK3sKKyAgICBpZiAobV9w
YXR0ZXJuLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlQWxsVmFsdWVz
KG1fcGF0dGVybik7CisgICAgbV9wYXR0ZXJuLmNsZWFyKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuOjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0Zvcklu
dmFsaWRhdGlvbikKK3sKKyAgICBpZiAoIW1fcGF0dGVybi5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ZGVsZXRlQWxsVmFsdWVzKG1fcGF0dGVybik7CisgICAgICAgIG1fcGF0dGVybi5jbGVhcigpOwor
ICAgIH0KKworICAgIG1fc2hvdWxkQ29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzID0gdHJ1ZTsKKyAg
ICBtYXJrQWxsQ2xpZW50c0ZvckludmFsaWRhdGlvbihtYXJrRm9ySW52YWxpZGF0aW9uID8gUmVw
YWludEludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOworfQorCit2b2lkIFJl
bmRlclNWR1Jlc291cmNlUGF0dGVybjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVj
dCogY2xpZW50LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCit7CisgICAgQVNTRVJUKGNsaWVu
dCk7CisKKyAgICBpZiAobV9wYXR0ZXJuLmNvbnRhaW5zKGNsaWVudCkpCisgICAgICAgIGRlbGV0
ZSBtX3BhdHRlcm4udGFrZShjbGllbnQpOworCisgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlv
bihjbGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBSZXBhaW50SW52YWxpZGF0aW9uIDogUGFy
ZW50T25seUludmFsaWRhdGlvbik7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
OjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSogc3R5bGUs
IEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkK
K3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQoc3R5bGUpOworICAgIEFTU0VSVChj
b250ZXh0KTsKKyAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7
CisKKyAgICAvLyBCZSBzdXJlIHRvIHN5bmNocm9uaXplIGFsbCBTVkcgcHJvcGVydGllcyBvbiB0
aGUgcGF0dGVybkVsZW1lbnQgX2JlZm9yZV8gcHJvY2Vzc2luZyBhbnkgZnVydGhlci4KKyAgICAv
LyBPdGhlcndoaXNlIHRoZSBjYWxsIHRvIGNvbGxlY3RQYXR0ZXJuQXR0cmlidXRlcygpIGJlbG93
LCBtYXkgY2F1c2UgdGhlIFNWRyBET00gcHJvcGVydHkKKyAgICAvLyBzeW5jaHJvbml6YXRpb24g
dG8ga2ljayBpbiwgd2hpY2ggY2F1c2VzIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoKSB0byBi
ZSBjYWxsZWQsIHdoaWNoIGluIHR1cm4gZGVsZXRlcyBvdXIKKyAgICAvLyBQYXR0ZXJuRGF0YSBv
YmplY3QhIExlYXZpbmcgb3V0IHRoZSBsaW5lIGJlbG93IHdpbGwgY2F1c2Ugc3ZnL2R5bmFtaWMt
dXBkYXRlcy9TVkdQYXR0ZXJuRWxlbWVudC1zdmdkb20qIHRvIGNyYXNoLgorICAgIFNWR1BhdHRl
cm5FbGVtZW50KiBwYXR0ZXJuRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1BhdHRlcm5FbGVtZW50
Kj4obm9kZSgpKTsKKyAgICBpZiAoIXBhdHRlcm5FbGVtZW50KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAobV9zaG91bGRDb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMpIHsKKyAgICAg
ICAgcGF0dGVybkVsZW1lbnQtPnVwZGF0ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGFueVFOYW1lKCkp
OworCisgICAgICAgIG1fYXR0cmlidXRlcyA9IFBhdHRlcm5BdHRyaWJ1dGVzKCk7CisgICAgICAg
IHBhdHRlcm5FbGVtZW50LT5jb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMobV9hdHRyaWJ1dGVzKTsK
KyAgICAgICAgbV9zaG91bGRDb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMgPSBmYWxzZTsKKyAgICB9
CisKKyAgICAvLyBTcGVjOiBXaGVuIHRoZSBnZW9tZXRyeSBvZiB0aGUgYXBwbGljYWJsZSBlbGVt
ZW50IGhhcyBubyB3aWR0aCBvciBoZWlnaHQgYW5kIG9iamVjdEJvdW5kaW5nQm94IGlzIHNwZWNp
ZmllZCwKKyAgICAvLyB0aGVuIHRoZSBnaXZlbiBlZmZlY3QgKGUuZy4gYSBncmFkaWVudCBvciBh
IGZpbHRlcikgd2lsbCBiZSBpZ25vcmVkLgorICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0Jv
eCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmJv
dW5kaW5nQm94TW9kZSgpICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3BhdHRlcm4uY29udGFpbnMob2JqZWN0KSkKKyAg
ICAgICAgbV9wYXR0ZXJuLnNldChvYmplY3QsIG5ldyBQYXR0ZXJuRGF0YSk7CisKKyAgICBQYXR0
ZXJuRGF0YSogcGF0dGVybkRhdGEgPSBtX3BhdHRlcm4uZ2V0KG9iamVjdCk7CisgICAgaWYgKCFw
YXR0ZXJuRGF0YS0+cGF0dGVybikgeworICAgICAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZXRlcm1p
bmUgdGhlIHBhdHRlcm4gY29udGVudCBlbGVtZW50IHJvb3QsIHN0b3AgaGVyZS4KKyAgICAgICAg
aWYgKCFtX2F0dHJpYnV0ZXMucGF0dGVybkNvbnRlbnRFbGVtZW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gQ29tcHV0ZSBhbGwgbmVjZXNzYXJ5IHRyYW5zZm9y
bWF0aW9ucyB0byBidWlsZCB0aGUgdGlsZSBpbWFnZSAmIHRoZSBwYXR0ZXJuLgorICAgICAgICBG
bG9hdFJlY3QgdGlsZUJvdW5kYXJpZXM7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0aWxlSW1h
Z2VUcmFuc2Zvcm07CisgICAgICAgIGlmICghYnVpbGRUaWxlSW1hZ2VUcmFuc2Zvcm0ob2JqZWN0
LCBtX2F0dHJpYnV0ZXMsIHBhdHRlcm5FbGVtZW50LCB0aWxlQm91bmRhcmllcywgdGlsZUltYWdl
VHJhbnNmb3JtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm07CisgICAgICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6
OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKG9i
amVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0pOworCisgICAgICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRp
bGVCb3VuZGFyaWVzID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdCh0aWxlQm91bmRhcmllcyk7
CisKKyAgICAgICAgLy8gQnVpbGQgdGlsZSBpbWFnZS4KKyAgICAgICAgT3duUHRyPEltYWdlQnVm
ZmVyPiB0aWxlSW1hZ2UgPSBjcmVhdGVUaWxlSW1hZ2Uob2JqZWN0LCBtX2F0dHJpYnV0ZXMsIHRp
bGVCb3VuZGFyaWVzLCBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCB0aWxlSW1hZ2VUcmFuc2Zvcm0p
OworICAgICAgICBpZiAoIXRpbGVJbWFnZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcGllZEltYWdlID0gdGlsZUltYWdlLT5jb3B5SW1hZ2Uo
KTsKKyAgICAgICAgaWYgKCFjb3BpZWRJbWFnZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAvLyBCdWlsZCBwYXR0ZXJuLgorICAgICAgICBwYXR0ZXJuRGF0YS0+cGF0dGVy
biA9IFBhdHRlcm46OmNyZWF0ZShjb3BpZWRJbWFnZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIGlm
ICghcGF0dGVybkRhdGEtPnBhdHRlcm4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgLy8gQ29tcHV0ZSBwYXR0ZXJuIHNwYWNlIHRyYW5zZm9ybWF0aW9uLgorICAgICAgICBw
YXR0ZXJuRGF0YS0+dHJhbnNmb3JtLnRyYW5zbGF0ZSh0aWxlQm91bmRhcmllcy54KCksIHRpbGVC
b3VuZGFyaWVzLnkoKSk7CisgICAgICAgIHBhdHRlcm5EYXRhLT50cmFuc2Zvcm0uc2NhbGUodGls
ZUJvdW5kYXJpZXMud2lkdGgoKSAvIGFic29sdXRlVGlsZUJvdW5kYXJpZXMud2lkdGgoKSwgdGls
ZUJvdW5kYXJpZXMuaGVpZ2h0KCkgLyBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLmhlaWdodCgpKTsK
KworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybSA9IG1fYXR0cmlidXRl
cy5wYXR0ZXJuVHJhbnNmb3JtKCk7CisgICAgICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5pc0lk
ZW50aXR5KCkpCisgICAgICAgICAgICBwYXR0ZXJuRGF0YS0+dHJhbnNmb3JtLm11bHRpcGx5KHBh
dHRlcm5UcmFuc2Zvcm0pOworCisgICAgICAgIHBhdHRlcm5EYXRhLT5wYXR0ZXJuLT5zZXRQYXR0
ZXJuU3BhY2VUcmFuc2Zvcm0ocGF0dGVybkRhdGEtPnRyYW5zZm9ybSk7CisgICAgfQorCisgICAg
Ly8gRHJhdyBwYXR0ZXJuCisgICAgY29udGV4dC0+c2F2ZSgpOworCisgICAgY29uc3QgU1ZHUmVu
ZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CisgICAgQVNTRVJUKHN2Z1N0
eWxlKTsKKworICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsKKyAgICAg
ICAgY29udGV4dC0+c2V0QWxwaGEoc3ZnU3R5bGUtPmZpbGxPcGFjaXR5KCkpOworICAgICAgICBj
b250ZXh0LT5zZXRGaWxsUGF0dGVybihwYXR0ZXJuRGF0YS0+cGF0dGVybik7CisgICAgICAgIGNv
bnRleHQtPnNldEZpbGxSdWxlKHN2Z1N0eWxlLT5maWxsUnVsZSgpKTsKKyAgICB9IGVsc2UgaWYg
KHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKSB7CisgICAgICAgIGlmIChzdmdTdHls
ZS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFKQorICAgICAgICAgICAg
cGF0dGVybkRhdGEtPnBhdHRlcm4tPnNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybSh0cmFuc2Zvcm1P
bk5vblNjYWxpbmdTdHJva2Uob2JqZWN0LCBwYXR0ZXJuRGF0YS0+dHJhbnNmb3JtKSk7CisgICAg
ICAgIGNvbnRleHQtPnNldEFscGhhKHN2Z1N0eWxlLT5zdHJva2VPcGFjaXR5KCkpOworICAgICAg
ICBjb250ZXh0LT5zZXRTdHJva2VQYXR0ZXJuKHBhdHRlcm5EYXRhLT5wYXR0ZXJuKTsKKyAgICAg
ICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBz
dHlsZSwgb2JqZWN0KTsKKyAgICB9CisKKyAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1Rl
eHRNb2RlKSB7CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsK
KyAgICAgICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShUZXh0TW9kZUZpbGwpOwor
CisjaWYgUExBVEZPUk0oQ0cpCisgICAgICAgICAgICBjb250ZXh0LT5hcHBseUZpbGxQYXR0ZXJu
KCk7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ry
b2tlTW9kZSkgeworICAgICAgICAgICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKFRleHRN
b2RlU3Ryb2tlKTsKKworI2lmIFBMQVRGT1JNKENHKQorICAgICAgICAgICAgY29udGV4dC0+YXBw
bHlTdHJva2VQYXR0ZXJuKCk7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQg
c2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQoreworICAgIEFTU0VSVChjb250
ZXh0KTsKKyAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CisK
KyAgICBpZiAocGF0aCAmJiAhKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKKyAg
ICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKKyAgICAgICAgICAgIGNv
bnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKKyAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYg
QXBwbHlUb1N0cm9rZU1vZGUpCisgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRo
KTsKKyAgICB9CisKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
RmxvYXRSZWN0IGNhbGN1bGF0ZVBhdHRlcm5Cb3VuZGFyaWVzKGNvbnN0IFBhdHRlcm5BdHRyaWJ1
dGVzJiBhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNWR1BhdHRl
cm5FbGVtZW50KiBwYXR0ZXJuRWxlbWVudCkKK3sKKyAgICBBU1NFUlQocGF0dGVybkVsZW1lbnQp
OworCisgICAgaWYgKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpCisgICAgICAgIHJldHVy
biBGbG9hdFJlY3QoYXR0cmlidXRlcy54KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJv
dW5kaW5nQm94LndpZHRoKCkgKyBvYmplY3RCb3VuZGluZ0JveC54KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgYXR0cmlidXRlcy55KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJv
dW5kaW5nQm94LmhlaWdodCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZXMud2lkdGgoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2Jq
ZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVzLmhlaWdodCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC5oZWln
aHQoKSk7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0KGF0dHJpYnV0ZXMueCgpLnZhbHVlKHBhdHRl
cm5FbGVtZW50KSwKKyAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMueSgpLnZhbHVlKHBh
dHRlcm5FbGVtZW50KSwKKyAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMud2lkdGgoKS52
YWx1ZShwYXR0ZXJuRWxlbWVudCksCisgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLmhl
aWdodCgpLnZhbHVlKHBhdHRlcm5FbGVtZW50KSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuOjpidWlsZFRpbGVJbWFnZVRyYW5zZm9ybShSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNWR1BhdHRlcm5FbGVt
ZW50KiBwYXR0ZXJuRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QmIHBhdHRlcm5Cb3VuZGFyaWVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFmZmluZVRy
YW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdAoreworICAgIEFTU0VSVChyZW5kZXJl
cik7CisgICAgQVNTRVJUKHBhdHRlcm5FbGVtZW50KTsKKworICAgIEZsb2F0UmVjdCBvYmplY3RC
b3VuZGluZ0JveCA9IHJlbmRlcmVyLT5vYmplY3RCb3VuZGluZ0JveCgpOworICAgIHBhdHRlcm5C
b3VuZGFyaWVzID0gY2FsY3VsYXRlUGF0dGVybkJvdW5kYXJpZXMoYXR0cmlidXRlcywgb2JqZWN0
Qm91bmRpbmdCb3gsIHBhdHRlcm5FbGVtZW50KTsgCisgICAgaWYgKHBhdHRlcm5Cb3VuZGFyaWVz
LndpZHRoKCkgPD0gMCB8fCBwYXR0ZXJuQm91bmRhcmllcy5oZWlnaHQoKSA8PSAwKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdmlld0JveENUTSA9IHBhdHRl
cm5FbGVtZW50LT52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHBhdHRlcm5FbGVtZW50LT52aWV3Qm94
KCksIHBhdHRlcm5FbGVtZW50LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCksIHBhdHRlcm5Cb3VuZGFy
aWVzLndpZHRoKCksIHBhdHRlcm5Cb3VuZGFyaWVzLmhlaWdodCgpKTsKKworICAgIC8vIEFwcGx5
IHZpZXdCb3gvb2JqZWN0Qm91bmRpbmdCb3ggdHJhbnNmb3JtYXRpb25zLgorICAgIGlmICghdmll
d0JveENUTS5pc0lkZW50aXR5KCkpCisgICAgICAgIHRpbGVJbWFnZVRyYW5zZm9ybSA9IHZpZXdC
b3hDVE07CisgICAgZWxzZSBpZiAoYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGVDb250ZW50KCkp
IHsKKyAgICAgICAgdGlsZUltYWdlVHJhbnNmb3JtLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0Jv
eC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CisgICAgICAgIHRpbGVJbWFnZVRyYW5zZm9y
bS5zY2FsZShvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpLCBvYmplY3RCb3VuZGluZ0JveC5oZWln
aHQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NPd25QdHI8SW1hZ2VC
dWZmZXI+IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6Y3JlYXRlVGlsZUltYWdlKFJlbmRlck9i
amVjdCogb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmIGF0dHJpYnV0
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHRpbGVCb3VuZGFyaWVzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0aWxlSW1hZ2VUcmFuc2Zvcm0pIGNvbnN0Cit7CisgICAgQVNTRVJU
KG9iamVjdCk7CisKKyAgICAvLyBDbGFtcCB0aWxlIGltYWdlIHNpemUgYWdhaW5zdCBTVkcgdmll
d3BvcnQgc2l6ZSwgYXMgbGFzdCByZXNvcnQsIHRvIGF2b2lkIGFsbG9jYXRpbmcgaHVnZSBpbWFn
ZSBidWZmZXJzLgorICAgIEZsb2F0UmVjdCBjb250ZW50Qm94UmVjdCA9IFNWR1JlbmRlclN1cHBv
cnQ6OmZpbmRUcmVlUm9vdE9iamVjdChvYmplY3QpLT5jb250ZW50Qm94UmVjdCgpOworCisgICAg
RmxvYXRSZWN0IGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzID0gYWJzb2x1dGVUaWxlQm91
bmRhcmllczsKKyAgICBpZiAoY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMud2lkdGgoKSA+
IGNvbnRlbnRCb3hSZWN0LndpZHRoKCkpCisgICAgICAgIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3Vu
ZGFyaWVzLnNldFdpZHRoKGNvbnRlbnRCb3hSZWN0LndpZHRoKCkpOworCisgICAgaWYgKGNsYW1w
ZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLmhlaWdodCgpID4gY29udGVudEJveFJlY3QuaGVpZ2h0
KCkpCisgICAgICAgIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLnNldEhlaWdodChjb250
ZW50Qm94UmVjdC5oZWlnaHQoKSk7CisKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFn
ZTsKKworICAgIGlmICghU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJz
b2x1dGVUaWxlQm91bmRhcmllcywgY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMsIHRpbGVJ
bWFnZSwgQ29sb3JTcGFjZURldmljZVJHQikpCisgICAgICAgIHJldHVybiBQYXNzT3duUHRyPElt
YWdlQnVmZmVyPigpOworCisgICAgR3JhcGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250ZXh0ID0g
dGlsZUltYWdlLT5jb250ZXh0KCk7CisgICAgQVNTRVJUKHRpbGVJbWFnZUNvbnRleHQpOworCisg
ICAgLy8gVGhlIGltYWdlIGJ1ZmZlciByZXByZXNlbnRzIHRoZSBmaW5hbCByZW5kZXJlZCBzaXpl
LCBzbyB0aGUgY29udGVudCBoYXMgdG8gYmUgc2NhbGVkICh0byBhdm9pZCBwaXhlbGF0aW9uKS4K
KyAgICB0aWxlSW1hZ2VDb250ZXh0LT5zY2FsZShGbG9hdFNpemUoYWJzb2x1dGVUaWxlQm91bmRh
cmllcy53aWR0aCgpIC8gdGlsZUJvdW5kYXJpZXMud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVUaWxlQm91bmRhcmllcy5oZWlnaHQoKSAvIHRp
bGVCb3VuZGFyaWVzLmhlaWdodCgpKSk7CisKKyAgICAvLyBBcHBseSB0aWxlIGltYWdlIHRyYW5z
Zm9ybWF0aW9ucy4KKyAgICBpZiAoIXRpbGVJbWFnZVRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisg
ICAgICAgIHRpbGVJbWFnZUNvbnRleHQtPmNvbmNhdENUTSh0aWxlSW1hZ2VUcmFuc2Zvcm0pOwor
CisgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKKworICAgIC8vIERy
YXcgdGhlIGNvbnRlbnQgaW50byB0aGUgSW1hZ2VCdWZmZXIuCisgICAgZm9yIChOb2RlKiBub2Rl
ID0gYXR0cmlidXRlcy5wYXR0ZXJuQ29udGVudEVsZW1lbnQoKS0+Zmlyc3RDaGlsZCgpOyBub2Rl
OyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoIW5vZGUtPmlzU1ZH
RWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSktPmlzU3R5bGVkKCkg
fHwgIW5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgU1ZH
SW1hZ2VCdWZmZXJUb29sczo6cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIodGlsZUltYWdlLmdl
dCgpLCBub2RlLT5yZW5kZXJlcigpLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOworICAgIH0KKwor
ICAgIHJldHVybiB0aWxlSW1hZ2UucmVsZWFzZSgpOworfQorCit9CisKKyNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlUGF0dGVybi5oCShyZXZpc2lvbiA3NTM0NSkJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOjc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNW
R1Jlc291cmNlUGF0dGVybl9oCisjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybl9oCisK
KyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGF0dGVy
bi5oIgorI2luY2x1ZGUgIlBhdHRlcm5BdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIuaCIKKyNpbmNsdWRlICJTVkdQYXR0ZXJuRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFBhdHRl
cm5EYXRhIHsKKyAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybjsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gdHJhbnNmb3JtOworfTsKKworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuIDogcHVi
bGljIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdS
ZXNvdXJjZVBhdHRlcm4oU1ZHUGF0dGVybkVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4oKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4iOyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlk
YXRpb24gPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJl
bmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOworCisgICAgdmly
dHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFw
aGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYs
IHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxv
YXRSZWN0KCk7IH0KKworICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNl
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CisgICAgc3RhdGljIFJlbmRl
clNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKKworcHJpdmF0ZToKKyAgICBib29sIGJ1
aWxkVGlsZUltYWdlVHJhbnNmb3JtKFJlbmRlck9iamVjdCosIGNvbnN0IFBhdHRlcm5BdHRyaWJ1
dGVzJiwgY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqLCBGbG9hdFJlY3QmIHBhdHRlcm5Cb3VuZGFy
aWVzLCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSkgY29uc3Q7CisKKyAgICBQ
YXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVUaWxlSW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGF0dGVybkF0dHJpYnV0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVCb3VuZGFyaWVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJl
Y3QmIGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGlsZUlt
YWdlVHJhbnNmb3JtKSBjb25zdDsKKworICAgIGJvb2wgbV9zaG91bGRDb2xsZWN0UGF0dGVybkF0
dHJpYnV0ZXMgOiAxOworICAgIFBhdHRlcm5BdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKyAgICBI
YXNoTWFwPFJlbmRlck9iamVjdCosIFBhdHRlcm5EYXRhKj4gbV9wYXR0ZXJuOworfTsKKworfQor
CisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwCShy
ZXZpc2lvbiA3NTM0NSkJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlUmFkaWFsR3JhZGllbnQuY3BwOjc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFk
aWFsR3JhZGllbnQuaCIKKworI2luY2x1ZGUgIlJhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5oIgor
I2luY2x1ZGUgIlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1JlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50OjpzX3Jlc291cmNlVHlwZSA9IFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBlOworCitSZW5k
ZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50OjpSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50KFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCogbm9kZSkKKyAgICA6IFJlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQobm9kZSkKK3sKK30KKworUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVu
dDo6flJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQoKQoreworfQorCit2b2lkIFJlbmRl
clNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQ6OmNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMoU1ZH
R3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQpCit7CisgICAgbV9hdHRyaWJ1dGVzID0g
UmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzKCk7CisgICAgc3RhdGljX2Nhc3Q8U1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KS0+Y29sbGVjdEdyYWRpZW50QXR0cmlidXRl
cyhtX2F0dHJpYnV0ZXMpOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQ6OmJ1aWxkR3JhZGllbnQoR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEsIFNWR0dyYWRpZW50
RWxlbWVudCogZ3JhZGllbnRFbGVtZW50KSBjb25zdAoreworICAgIFNWR1JhZGlhbEdyYWRpZW50
RWxlbWVudCogcmFkaWFsR3JhZGllbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KTsKKworICAgIC8vIERldGVybWluZSBncmFk
aWVudCBmb2NhbC9jZW50ZXIgcG9pbnRzIGFuZCByYWRpdXMKKyAgICBGbG9hdFBvaW50IGZvY2Fs
UG9pbnQ7CisgICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludDsKKyAgICBmbG9hdCByYWRpdXM7Cisg
ICAgcmFkaWFsR3JhZGllbnRFbGVtZW50LT5jYWxjdWxhdGVGb2NhbENlbnRlclBvaW50c0FuZFJh
ZGl1cyhtX2F0dHJpYnV0ZXMsIGZvY2FsUG9pbnQsIGNlbnRlclBvaW50LCByYWRpdXMpOworCisg
ICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoZm9jYWxQb2ludCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvLyBTVkcg
ZG9lcyBub3Qgc3VwcG9ydCBhICJmb2N1cyByYWRpdXMiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyUG9pbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzKTsKKworICAgIGdyYWRpZW50RGF0YS0+
Z3JhZGllbnQtPnNldFNwcmVhZE1ldGhvZChtX2F0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCkpOwor
CisgICAgLy8gQWRkIHN0b3BzCisgICAgYWRkU3RvcHMoZ3JhZGllbnREYXRhLCBtX2F0dHJpYnV0
ZXMuc3RvcHMoKSk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3Jh
ZGllbnQuaAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Lmg6NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnRfaAorI2RlZmluZSBSZW5kZXJTVkdSZXNv
dXJjZVJhZGlhbEdyYWRpZW50X2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmFkaWFs
R3JhZGllbnRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR1JhZGlhbEdyYWRpZW50RWxl
bWVudDsKKworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudCA6IHB1YmxpYyBS
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50IHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdSZXNvdXJj
ZVJhZGlhbEdyYWRpZW50KFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCopOworICAgIHZpcnR1YWwg
flJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQoKTsKKworICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlh
bEdyYWRpZW50IjsgfQorCisgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3Vy
Y2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KKyAgICBzdGF0aWMgUmVu
ZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBlOworCisgICAgdmlydHVhbCBib29sIGJv
dW5kaW5nQm94TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5ib3VuZGluZ0JveE1v
ZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVHcmFkaWVudFRyYW5zZm9ybShBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyB0cmFuc2Zvcm0gPSBtX2F0dHJpYnV0ZXMuZ3JhZGll
bnRUcmFuc2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1
dGVzKFNWR0dyYWRpZW50RWxlbWVudCopOworICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50
KEdyYWRpZW50RGF0YSosIFNWR0dyYWRpZW50RWxlbWVudCopIGNvbnN0OworCitwcml2YXRlOgor
ICAgIFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Cit9OworCit9CisKKyNl
bmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCShyZXZpc2lvbiA3NTM0
NSkJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRD
b2xvci5jcHA6NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykK
KyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZH
UmVuZGVyU3VwcG9ydC5oIgorCisjaWYgUExBVEZPUk0oU0tJQSkKKyNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRTa2lhLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJT
VkdSZXNvdXJjZVR5cGUgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpzX3Jlc291cmNlVHlw
ZSA9IFNvbGlkQ29sb3JSZXNvdXJjZVR5cGU7CisKK1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
cjo6UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKCkKK3sKK30KKworUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yOjp+UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKCkKK3sKK30KKworYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIFJlbmRlclN0eWxlKiBzdHlsZSwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKQoreworICAgIC8vIFdlIGFyZSBOT1QgYWxsb3dl
ZCB0byBBU1NFUlQob2JqZWN0KSBoZXJlLCB1bmxpa2UgYWxsIG90aGVyIHJlc291cmNlcy4KKyAg
ICAvLyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IgaXMgdGhlIG9ubHkgcmVzb3VyY2Ugd2hp
Y2ggbWF5IGJlIHVzZWQgZnJvbSBIVE1MLCB3aGVuIHJlbmRlcmluZworICAgIC8vIFNWRyBGb250
cyBmb3IgYSBIVE1MIGRvY3VtZW50LiBUaGlzIHdpbGwgYmUgaW5kaWNhdGVkIGJ5IGEgbnVsbCBS
ZW5kZXJPYmplY3QgcG9pbnRlci4KKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgQVNTRVJUKHJl
c291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOworCisgICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUgPyBzdHlsZS0+c3ZnU3R5bGUoKSA6IDA7CisgICAgQ29s
b3JTcGFjZSBjb2xvclNwYWNlID0gc3R5bGUgPyBzdHlsZS0+Y29sb3JTcGFjZSgpIDogQ29sb3JT
cGFjZURldmljZVJHQjsKKworICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUp
IHsKKyAgICAgICAgY29udGV4dC0+c2V0QWxwaGEoc3ZnU3R5bGUgPyBzdmdTdHlsZS0+ZmlsbE9w
YWNpdHkoKSA6IDEuMGYpOworICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IobV9jb2xvciwg
Y29sb3JTcGFjZSk7CisgICAgICAgIGNvbnRleHQtPnNldEZpbGxSdWxlKHN2Z1N0eWxlID8gc3Zn
U3R5bGUtPmZpbGxSdWxlKCkgOiBSVUxFX05PTlpFUk8pOworCisgICAgICAgIGlmIChyZXNvdXJj
ZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpCisgICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJh
d2luZ01vZGUoVGV4dE1vZGVGaWxsKTsKKyAgICB9IGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFw
cGx5VG9TdHJva2VNb2RlKSB7CisgICAgICAgIGNvbnRleHQtPnNldEFscGhhKHN2Z1N0eWxlID8g
c3ZnU3R5bGUtPnN0cm9rZU9wYWNpdHkoKSA6IDEuMGYpOworICAgICAgICBjb250ZXh0LT5zZXRT
dHJva2VDb2xvcihtX2NvbG9yLCBjb2xvclNwYWNlKTsKKworICAgICAgICBpZiAoc3R5bGUpCisg
ICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNv
bnRleHQsIHN0eWxlLCBvYmplY3QpOworCisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBs
eVRvVGV4dE1vZGUpCisgICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoVGV4
dE1vZGVTdHJva2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0Kiwg
R3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBj
b25zdCBQYXRoKiBwYXRoKQoreworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBBU1NFUlQocmVz
b3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CisKKyAgICBpZiAocGF0aCAmJiAhKHJl
c291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKKyAgICAgICAgaWYgKHJlc291cmNlTW9k
ZSAmIEFwcGx5VG9GaWxsTW9kZSkKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRo
KTsKKyAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCisg
ICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICB9Cit9CisKK30KKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgJKHJldmlzaW9uIDc1MzQ1KQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmg6NzUz
NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yX2gKKyNkZWZpbmUgUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiQ29s
b3IuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvciA6IHB1YmxpYyBSZW5kZXJTVkdSZXNvdXJjZSB7CitwdWJsaWM6CisgICAgUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yKCk7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNo
ZShib29sID0gdHJ1ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNo
ZShSZW5kZXJPYmplY3QqLCBib29sID0gdHJ1ZSkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBw
bHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dCom
LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hv
cnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVz
b3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQor
CisgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3Qg
eyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KKyAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VU
eXBlIHNfcmVzb3VyY2VUeXBlOworCisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2xvcjsgfQorICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7
IG1fY29sb3IgPSBjb2xvcjsgfQorCitwcml2YXRlOgorICAgIENvbG9yIG1fY29sb3I7Cit9Owor
Cit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHA6NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA3LCAyMDA4LCAyMDA5IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNW
RykKKyNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29u
dGFpbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3Vw
cG9ydC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1NWR0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVkZSAiVHJhbnNmb3Jt
U3RhdGUuaCIKKworI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZW5kZXJTVkdSb290OjpSZW5kZXJTVkdSb290KFNWR1N0eWxlZEVsZW1l
bnQqIG5vZGUpCisgICAgOiBSZW5kZXJCb3gobm9kZSkKKyAgICAsIG1faXNMYXlvdXRTaXplQ2hh
bmdlZChmYWxzZSkKKyAgICAsIG1fbmVlZHNCb3VuZGFyaWVzT3JUcmFuc2Zvcm1VcGRhdGUodHJ1
ZSkKK3sKKyAgICBzZXRSZXBsYWNlZCh0cnVlKTsKK30KKworUmVuZGVyU1ZHUm9vdDo6flJlbmRl
clNWR1Jvb3QoKQoreworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzKCkKK3sKKyAgICBBU1NFUlQocHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5
KCkpOworCisgICAgaW50IGJvcmRlckFuZFBhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nV2lkdGgo
KTsKKyAgICBpbnQgd2lkdGggPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoZmFsc2UpICsg
Ym9yZGVyQW5kUGFkZGluZzsKKworICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQo
KSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKQorICAg
ICAgICB3aWR0aCA9IG1pbih3aWR0aCwgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICsgKHN0
eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gYm9yZGVyQW5kUGFkZGluZyA6IDAp
KTsKKworICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpIHx8IChzdHlsZSgpLT53
aWR0aCgpLmlzQXV0bygpICYmIHN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSkgeworICAg
ICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IDA7CisgICAgICAgIG1fbWF4UHJlZmVy
cmVkTG9naWNhbFdpZHRoID0gd2lkdGg7CisgICAgfSBlbHNlCisgICAgICAgIG1fbWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSB3aWR0aDsKKwor
ICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7Cit9CisKK2ludCBSZW5k
ZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lk
dGgpIGNvbnN0Cit7CisgICAgaW50IHJlcGxhY2VkV2lkdGggPSBSZW5kZXJCb3g6OmNvbXB1dGVS
ZXBsYWNlZExvZ2ljYWxXaWR0aChpbmNsdWRlTWF4V2lkdGgpOworICAgIGlmICghc3R5bGUoKS0+
bG9naWNhbFdpZHRoKCkuaXNQZXJjZW50KCkpCisgICAgICAgIHJldHVybiByZXBsYWNlZFdpZHRo
OworCisgICAgLy8gRklYTUU6IEludmVzdGlnYXRlIGluIHNpemUgcm91bmRpbmcgaXNzdWVzCisg
ICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5vZGUo
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocm91bmRmKHJlcGxhY2VkV2lkdGggKiBz
dmctPmN1cnJlbnRTY2FsZSgpKSk7Cit9CisKK2ludCBSZW5kZXJTVkdSb290Ojpjb21wdXRlUmVw
bGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBpbnQgcmVwbGFjZWRIZWlnaHQgPSBS
ZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKTsKKyAgICBpZiAoIXN0eWxl
KCktPmxvZ2ljYWxIZWlnaHQoKS5pc1BlcmNlbnQoKSkKKyAgICAgICAgcmV0dXJuIHJlcGxhY2Vk
SGVpZ2h0OworCisgICAgLy8gRklYTUU6IEludmVzdGlnYXRlIGluIHNpemUgcm91bmRpbmcgaXNz
dWVzCisgICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+
KG5vZGUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocm91bmRmKHJlcGxhY2VkSGVp
Z2h0ICogc3ZnLT5jdXJyZW50U2NhbGUoKSkpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6Omxh
eW91dCgpCit7CisgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOworCisgICAgLy8gQXJiaXRyYXJ5
IGFmZmluZSB0cmFuc2Zvcm1zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBMYXlvdXRTdGF0ZS4KKyAg
ICB2aWV3KCktPmRpc2FibGVMYXlvdXRTdGF0ZSgpOworCisgICAgYm9vbCBuZWVkc0xheW91dCA9
IHNlbGZOZWVkc0xheW91dCgpOworICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMs
IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIG5lZWRzTGF5b3V0KTsKKworICAgIElu
dFNpemUgb2xkU2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgY29tcHV0ZUxvZ2ljYWxXaWR0
aCgpOworICAgIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7CisgICAgY2FsY1ZpZXdwb3J0KCk7CisK
KyAgICBTVkdTVkdFbGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4obm9k
ZSgpKTsKKyAgICBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgPSBzdmctPmhhc1JlbGF0aXZlTGVuZ3Ro
cygpICYmIG9sZFNpemUgIT0gc2l6ZSgpOworCisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0
Q2hpbGRyZW4odGhpcywgbmVlZHNMYXlvdXQpOworICAgIG1faXNMYXlvdXRTaXplQ2hhbmdlZCA9
IGZhbHNlOworCisgICAgLy8gQXQgdGhpcyBwb2ludCBMYXlvdXRSZXBhaW50ZXIgYWxyZWFkeSBn
cmFiYmVkIHRoZSBvbGQgYm91bmRzLAorICAgIC8vIHJlY2FsY3VsYXRlIHRoZW0gbm93IHNvIHJl
cGFpbnRBZnRlckxheW91dCgpIHVzZXMgdGhlIG5ldyBib3VuZHMuCisgICAgaWYgKG1fbmVlZHNC
b3VuZGFyaWVzT3JUcmFuc2Zvcm1VcGRhdGUpIHsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRh
cmllcygpOworICAgICAgICBtX25lZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRlID0gZmFs
c2U7CisgICAgfQorCisgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOworCisgICAg
dmlldygpLT5lbmFibGVMYXlvdXRTdGF0ZSgpOworICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsK
K30KKworYm9vbCBSZW5kZXJTVkdSb290OjpzZWxmV2lsbFBhaW50KCkKK3sKKyNpZiBFTkFCTEUo
RklMVEVSUykKKyAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hl
OjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhpcyk7CisgICAgcmV0dXJuIHJlc291
cmNlcyAmJiByZXNvdXJjZXMtPmZpbHRlcigpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKQoreworICAgIGlmIChwYWludEluZm8uY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGlzVmlz
aWJsZSA9IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFOworICAgIEludFBvaW50IHBh
cmVudE9yaWdpbkluQ29udGFpbmVyKHBhcmVudFgsIHBhcmVudFkpOworICAgIEludFBvaW50IGJv
cmRlckJveE9yaWdpbkluQ29udGFpbmVyID0gcGFyZW50T3JpZ2luSW5Db250YWluZXIgKyBwYXJl
bnRPcmlnaW5Ub0JvcmRlckJveCgpOworCisgICAgaWYgKGhhc0JveERlY29yYXRpb25zKCkgJiYg
KHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGlzVmlzaWJsZSkK
KyAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIGJvcmRlckJveE9yaWdpbklu
Q29udGFpbmVyLngoKSwgYm9yZGVyQm94T3JpZ2luSW5Db250YWluZXIueSgpKTsKKworICAgIGlm
IChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gQW4gZW1wdHkgdmlld3BvcnQgZGlzYWJsZXMgcmVuZGVyaW5nLiAg
RklYTUU6IFNob3VsZCB3ZSBzdGlsbCByZW5kZXIgZmlsdGVycz8KKyAgICBpZiAobV92aWV3cG9y
dFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBEb24ndCBwYWludCBp
ZiB3ZSBkb24ndCBoYXZlIGtpZHMsIGV4Y2VwdCBpZiB3ZSBoYXZlIGZpbHRlcnMgd2Ugc2hvdWxk
IHBhaW50IHRob3NlLgorICAgIGlmICghZmlyc3RDaGlsZCgpICYmICFzZWxmV2lsbFBhaW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBQYWludEluZm8g
YmVjYXVzZSBhcHBseVRyYW5zZm9ybSB3aWxsIG1vZGlmeSB0aGUgZGFtYWdlIHJlY3QuCisgICAg
UGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7CisgICAgY2hpbGRQYWludEluZm8u
Y29udGV4dC0+c2F2ZSgpOworCisgICAgLy8gQXBwbHkgaW5pdGlhbCB2aWV3cG9ydCBjbGlwIC0g
bm90IGFmZmVjdGVkIGJ5IG92ZXJmbG93IGhhbmRsaW5nCisgICAgY2hpbGRQYWludEluZm8uY29u
dGV4dC0+Y2xpcChvdmVyZmxvd0NsaXBSZWN0KGJvcmRlckJveE9yaWdpbkluQ29udGFpbmVyLngo
KSwgYm9yZGVyQm94T3JpZ2luSW5Db250YWluZXIueSgpKSk7CisKKyAgICAvLyBDb252ZXJ0IGZy
b20gY29udGFpbmVyIG9mZnNldHMgKGh0bWwgcmVuZGVyZXJzKSB0byBhIHJlbGF0aXZlIHRyYW5z
Zm9ybSAoc3ZnIHJlbmRlcmVycykuCisgICAgLy8gVHJhbnNmb3JtIGZyb20gb3VyIHBhaW50IGNv
bnRhaW5lcidzIGNvb3JkaW5hdGUgc3lzdGVtIHRvIG91ciBsb2NhbCBjb29yZHMuCisgICAgY2hp
bGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obG9jYWxUb1JlcGFpbnRDb250YWluZXJUcmFuc2Zv
cm0ocGFyZW50T3JpZ2luSW5Db250YWluZXIpKTsKKworICAgIGJvb2wgY29udGludWVSZW5kZXJp
bmcgPSB0cnVlOworICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9y
ZWdyb3VuZCkKKyAgICAgICAgY29udGludWVSZW5kZXJpbmcgPSBTVkdSZW5kZXJTdXBwb3J0Ojpw
cmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKTsKKworICAgIGlm
IChjb250aW51ZVJlbmRlcmluZykKKyAgICAgICAgUmVuZGVyQm94OjpwYWludChjaGlsZFBhaW50
SW5mbywgMCwgMCk7CisKKyAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZUZvcmVncm91bmQpCisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0Nv
bnRlbnQodGhpcywgY2hpbGRQYWludEluZm8sIHBhaW50SW5mby5jb250ZXh0KTsKKworICAgIGNo
aWxkUGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKworICAgIGlmICgocGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
U2VsZk91dGxpbmUpICYmIHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIGlzVmlzaWJsZSkKKyAg
ICAgICAgcGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCBib3JkZXJCb3hPcmlnaW5JbkNv
bnRhaW5lci54KCksIGJvcmRlckJveE9yaWdpbkluQ29udGFpbmVyLnkoKSwgd2lkdGgoKSwgaGVp
Z2h0KCkpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OmRlc3Ryb3koKQoreworICAgIFNWR1Jl
c291cmNlc0NhY2hlOjpjbGllbnREZXN0cm95ZWQodGhpcyk7CisgICAgUmVuZGVyQm94OjpkZXN0
cm95KCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCit7CisgICAgaWYgKGRp
ZmYgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0KQorICAgICAgICBzZXROZWVkc0JvdW5kYXJpZXNV
cGRhdGUoKTsKKyAgICBSZW5kZXJCb3g6OnN0eWxlV2lsbENoYW5nZShkaWZmLCBuZXdTdHlsZSk7
Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3sKKyAgICBSZW5kZXJCb3g6OnN0
eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xp
ZW50U3R5bGVDaGFuZ2VkKHRoaXMsIGRpZmYsIHN0eWxlKCkpOworfQorCit2b2lkIFJlbmRlclNW
R1Jvb3Q6OnVwZGF0ZUZyb21FbGVtZW50KCkKK3sKKyAgICBSZW5kZXJCb3g6OnVwZGF0ZUZyb21F
bGVtZW50KCk7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFVwZGF0ZWRGcm9tRWxlbWVu
dCh0aGlzLCBzdHlsZSgpKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjpjYWxjVmlld3BvcnQo
KQoreworICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQq
Pihub2RlKCkpOworCisgICAgaWYgKCFzdmctPmhhc1NldENvbnRhaW5lclNpemUoKSkgeworICAg
ICAgICAvLyBJbiB0aGUgbm9ybWFsIGNhc2Ugb2YgPHN2Zz4gYmVpbmcgc3RhbmQtYWxvbmUgb3Ig
aW4gYSBDU1NCb3hNb2RlbCBvYmplY3Qgd2UgdXNlCisgICAgICAgIC8vIFJlbmRlckJveDo6d2lk
dGgoKS9oZWlnaHQoKSAod2hpY2ggcHVsbHMgZGF0YSBmcm9tIFJlbmRlclN0eWxlKQorICAgICAg
ICBtX3ZpZXdwb3J0U2l6ZSA9IEZsb2F0U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJbiB0aGUgU1ZHSW1hZ2UgY2FzZSBncmFiIHRoZSBT
VkdMZW5ndGggdmFsdWVzIG9mZiBvZiBTVkdTVkdFbGVtZW50IGFuZCB1c2UKKyAgICAvLyB0aGUg
c3BlY2lhbCByZWxhdGl2ZVdpZHRoVmFsdWUgYWNjZXNzb3JzIHdoaWNoIHJlc3BlY3QgdGhlIHNw
ZWNpZmllZCBjb250YWluZXJTaXplCisgICAgLy8gRklYTUU6IENoZWNrIGhvdyBTVkdJbWFnZSAr
IHpvb21pbmcgaXMgc3VwcG9zZWQgdG8gYmUgaGFuZGxlZD8KKyAgICBTVkdMZW5ndGggd2lkdGgg
PSBzdmctPndpZHRoKCk7CisgICAgU1ZHTGVuZ3RoIGhlaWdodCA9IHN2Zy0+aGVpZ2h0KCk7Cisg
ICAgbV92aWV3cG9ydFNpemUgPSBGbG9hdFNpemUod2lkdGgudW5pdFR5cGUoKSA9PSBMZW5ndGhU
eXBlUGVyY2VudGFnZSA/IHN2Zy0+cmVsYXRpdmVXaWR0aFZhbHVlKCkgOiB3aWR0aC52YWx1ZShz
dmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodC51bml0VHlwZSgpID09
IExlbmd0aFR5cGVQZXJjZW50YWdlID8gc3ZnLT5yZWxhdGl2ZUhlaWdodFZhbHVlKCkgOiBoZWln
aHQudmFsdWUoc3ZnKSk7Cit9CisKKy8vIFJlbmRlckJveCBtZXRob2RzIHdpbGwgZXhwZWN0IGNv
b3JkaW5hdGVzIHcvbyBhbnkgdHJhbnNmb3JtcyBpbiBjb29yZGluYXRlcworLy8gcmVsYXRpdmUg
dG8gb3VyIGJvcmRlckJveCBvcmlnaW4uICBUaGlzIG1ldGhvZCBnaXZlcyB1cyBleGFjdGx5IHRo
YXQuCitBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUm9vdDo6bG9jYWxUb0JvcmRlckJveFRyYW5z
Zm9ybSgpIGNvbnN0Cit7CisgICAgSW50U2l6ZSBib3JkZXJBbmRQYWRkaW5nID0gYm9yZGVyT3Jp
Z2luVG9Db250ZW50Qm94KCk7CisgICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8
U1ZHU1ZHRWxlbWVudCo+KG5vZGUoKSk7CisgICAgZmxvYXQgc2NhbGUgPSBzdmctPmN1cnJlbnRT
Y2FsZSgpOworICAgIEZsb2F0UG9pbnQgdHJhbnNsYXRlID0gc3ZnLT5jdXJyZW50VHJhbnNsYXRl
KCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bShzY2FsZSwgMCwgMCwgc2NhbGUsIGJvcmRlckFu
ZFBhZGRpbmcud2lkdGgoKSArIHRyYW5zbGF0ZS54KCksIGJvcmRlckFuZFBhZGRpbmcuaGVpZ2h0
KCkgKyB0cmFuc2xhdGUueSgpKTsKKyAgICByZXR1cm4gc3ZnLT52aWV3Qm94VG9WaWV3VHJhbnNm
b3JtKHdpZHRoKCkgLyBzY2FsZSwgaGVpZ2h0KCkgLyBzY2FsZSkgKiBjdG07Cit9CisKK0ludFNp
emUgUmVuZGVyU1ZHUm9vdDo6cGFyZW50T3JpZ2luVG9Cb3JkZXJCb3goKSBjb25zdAoreworICAg
IHJldHVybiBJbnRTaXplKHgoKSwgeSgpKTsKK30KKworSW50U2l6ZSBSZW5kZXJTVkdSb290Ojpi
b3JkZXJPcmlnaW5Ub0NvbnRlbnRCb3goKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKGJv
cmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKTsK
K30KKworQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jvb3Q6OmxvY2FsVG9SZXBhaW50Q29udGFp
bmVyVHJhbnNmb3JtKGNvbnN0IEludFBvaW50JiBwYXJlbnRPcmlnaW5JbkNvbnRhaW5lcikgY29u
c3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcGFyZW50VG9Db250YWluZXIobG9jYWxUb1BhcmVu
dFRyYW5zZm9ybSgpKTsKKyAgICByZXR1cm4gcGFyZW50VG9Db250YWluZXIudHJhbnNsYXRlUmln
aHQocGFyZW50T3JpZ2luSW5Db250YWluZXIueCgpLCBwYXJlbnRPcmlnaW5JbkNvbnRhaW5lci55
KCkpOworfQorCitjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlbmRlclNWR1Jvb3Q6OmxvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIEludFNpemUgcGFyZW50VG9Cb3JkZXJCb3hP
ZmZzZXQgPSBwYXJlbnRPcmlnaW5Ub0JvcmRlckJveCgpOworCisgICAgQWZmaW5lVHJhbnNmb3Jt
IGJvcmRlckJveE9yaWdpblRvUGFyZW50T3JpZ2luKGxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0o
KSk7CisgICAgYm9yZGVyQm94T3JpZ2luVG9QYXJlbnRPcmlnaW4udHJhbnNsYXRlUmlnaHQocGFy
ZW50VG9Cb3JkZXJCb3hPZmZzZXQud2lkdGgoKSwgcGFyZW50VG9Cb3JkZXJCb3hPZmZzZXQuaGVp
Z2h0KCkpOworCisgICAgbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtID0gYm9yZGVyQm94T3JpZ2lu
VG9QYXJlbnRPcmlnaW47CisgICAgcmV0dXJuIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKK30K
KworSW50UmVjdCBSZW5kZXJTVkdSb290OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikKK3sKKyAgICByZXR1cm4gU1ZH
UmVuZGVyU3VwcG9ydDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWlu
dENvbnRhaW5lcik7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlY3RGb3JSZXBh
aW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiByZXBh
aW50UmVjdCwgYm9vbCBmaXhlZCkKK3sKKyAgICAvLyBBcHBseSBvdXIgbG9jYWwgdHJhbnNmb3Jt
cyAoZXhjZXB0IGZvciB4L3kgdHJhbnNsYXRpb24pLCB0aGVuIG91ciBzaGFkb3csIAorICAgIC8v
IGFuZCB0aGVuIGNhbGwgUmVuZGVyQm94J3MgbWV0aG9kIHRvIGhhbmRsZSBhbGwgdGhlIG5vcm1h
bCBDU1MgQm94IG1vZGVsIGJpdHMKKyAgICByZXBhaW50UmVjdCA9IGxvY2FsVG9Cb3JkZXJCb3hU
cmFuc2Zvcm0oKS5tYXBSZWN0KHJlcGFpbnRSZWN0KTsKKworICAgIC8vIEFwcGx5IGluaXRpYWwg
dmlld3BvcnQgY2xpcCAtIG5vdCBhZmZlY3RlZCBieSBvdmVyZmxvdyBzZXR0aW5ncyAgICAKKyAg
ICByZXBhaW50UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBtX3ZpZXdwb3J0U2l6ZSkpKTsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBz
dmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgaWYgKGNvbnN0IFNoYWRvd0RhdGEq
IHNoYWRvdyA9IHN2Z1N0eWxlLT5zaGFkb3coKSkKKyAgICAgICAgc2hhZG93LT5hZGp1c3RSZWN0
Rm9yU2hhZG93KHJlcGFpbnRSZWN0KTsKKworICAgIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JS
ZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHJlcGFpbnRSZWN0LCBmaXhlZCk7Cit9CisKK3ZvaWQg
UmVuZGVyU1ZHUm9vdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCAsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNm
b3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAoreworICAgIEFTU0VSVCghZml4ZWQpOyAv
LyBXZSBzaG91bGQgaGF2ZSBubyBmaXhlZCBjb250ZW50IGluIHRoZSBTVkcgcmVuZGVyaW5nIHRy
ZWUuCisgICAgQVNTRVJUKHVzZVRyYW5zZm9ybXMpOyAvLyBtYXBwaW5nIGEgcG9pbnQgdGhyb3Vn
aCBTVkcgdy9vIHJlc3BlY3RpbmcgdHJhc25mb3JtcyBpcyB1c2VsZXNzLgorCisgICAgLy8gVHJh
bnNmb3JtIHRvIG91ciBib3JkZXIgYm94IGFuZCBsZXQgUmVuZGVyQm94IHRyYW5zZm9ybSB0aGUg
cmVzdCBvZiB0aGUgd2F5LgorICAgIHRyYW5zZm9ybVN0YXRlLmFwcGx5VHJhbnNmb3JtKGxvY2Fs
VG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSk7CisgICAgUmVuZGVyQm94OjptYXBMb2NhbFRvQ29udGFp
bmVyKHJlcGFpbnRDb250YWluZXIsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0
ZSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCit7
CisgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIG1fc3Ryb2tlQm91
bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0
UmVjdCgpOworCisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5n
Qm94ZXModGhpcywgbV9vYmplY3RCb3VuZGluZ0JveCwgbV9zdHJva2VCb3VuZGluZ0JveCwgbV9y
ZXBhaW50Qm91bmRpbmdCb3gpOworICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFp
bnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CisgICAgbV9y
ZXBhaW50Qm91bmRpbmdCb3guaW5mbGF0ZShib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7Cit9CisK
K2Jvb2wgUmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0
eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAgIEludFBvaW50IHBvaW50SW5D
b250YWluZXIoeCwgeSk7CisgICAgSW50U2l6ZSBjb250YWluZXJUb1BhcmVudE9mZnNldCh0eCwg
dHkpOworCisgICAgSW50UG9pbnQgcG9pbnRJblBhcmVudCA9IHBvaW50SW5Db250YWluZXIgLSBj
b250YWluZXJUb1BhcmVudE9mZnNldDsKKyAgICBJbnRQb2ludCBwb2ludEluQm9yZGVyQm94ID0g
cG9pbnRJblBhcmVudCAtIHBhcmVudE9yaWdpblRvQm9yZGVyQm94KCk7CisKKyAgICAvLyBOb3Rl
OiBGb3Igbm93LCB3ZSdyZSBpZ25vcmluZyBoaXRzIHRvIGJvcmRlciBhbmQgcGFkZGluZyBmb3Ig
PHN2Zz4KKyAgICBJbnRQb2ludCBwb2ludEluQ29udGVudEJveCA9IHBvaW50SW5Cb3JkZXJCb3gg
LSBib3JkZXJPcmlnaW5Ub0NvbnRlbnRCb3goKTsKKyAgICBpZiAoIWNvbnRlbnRCb3hSZWN0KCku
Y29udGFpbnMocG9pbnRJbkNvbnRlbnRCb3gpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBJbnRQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2Uo
KS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKKworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkp
IHsKKyAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRGbG9hdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
bG9jYWxQb2ludCwgaGl0VGVzdEFjdGlvbikpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDU1Mv
SFRNTCBhc3N1bWVzIHRoZSBsb2NhbCBwb2ludCBpcyByZWxhdGl2ZSB0byB0aGUgYm9yZGVyIGJv
eCwgcmlnaHQ/CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJ
bkJvcmRlckJveCk7CisgICAgICAgICAgICAvLyBGSVhNRTogbm9kZUF0RmxvYXRQb2ludCgpIGRv
ZXNuJ3QgaGFuZGxlIHJlY3QtYmFzZWQgaGl0IHRlc3RzIHlldC4KKyAgICAgICAgICAgIHJlc3Vs
dC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KGNoaWxkLT5ub2RlKCksIHgsIHkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB3ZSBk
aWRuJ3QgZWFybHkgZXhpdCBhYm92ZSwgd2UndmUganVzdCBoaXQgdGhlIGNvbnRhaW5lciA8c3Zn
PiBlbGVtZW50LiBVbmxpa2UgU1ZHIDEuMSwgMm5kIEVkaXRpb24gYWxsb3dzIGNvbnRhaW5lciBl
bGVtZW50cyB0byBiZSBoaXQuCisgICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2Nr
QmFja2dyb3VuZCkgeworICAgICAgICAvLyBPbmx5IHJldHVybiB0cnVlIGhlcmUsIGlmIHRoZSBs
YXN0IGhpdCB0ZXN0aW5nIHBoYXNlICdCbG9ja0JhY2tncm91bmQnIGlzIGV4ZWN1dGVkLiBJZiB3
ZSdkIHJldHVybiB0cnVlIGluIHRoZSAnRm9yZWdyb3VuZCcgcGhhc2UsCisgICAgICAgIC8vIGhp
dCB0ZXN0aW5nIHdvdWxkIHN0b3AgaW1tZWRpYXRlbHkuIEZvciBTVkcgb25seSB0cmVlcyB0aGlz
IGRvZXNuJ3QgbWF0dGVyLiBUaG91Z2ggd2hlbiB3ZSBoYXZlIGEgPGZvcmVpZ25PYmplY3Q+IHN1
YnRyZWUgd2UgbmVlZAorICAgICAgICAvLyB0byBiZSBhYmxlIHRvIGRldGVjdCBoaXRzIG9uIHRo
ZSBiYWNrZ3JvdW5kIG9mIGEgPGRpdj4gZWxlbWVudC4gSWYgd2UnZCByZXR1cm4gdHJ1ZSBoZXJl
IGluIHRoZSAnRm9yZWdyb3VuZCcgcGhhc2UsIHdlIGFyZSBub3QgYWJsZSAKKyAgICAgICAgLy8g
dG8gZGV0ZWN0IHRoZXNlIGhpdHMgYW55bW9yZS4KKyAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhbFBvaW50KSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Um9vdC5oCShyZXZpc2lvbiA3NTM0NSkJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jvb3QuaDo3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdSb290X2gKKyNkZWZpbmUgUmVuZGVyU1ZHUm9v
dF9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IlJlbmRlckJveC5oIgorCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR1N0eWxlZEVsZW1lbnQ7CitjbGFzcyBBZmZpbmVUcmFu
c2Zvcm07CisKK2NsYXNzIFJlbmRlclNWR1Jvb3QgOiBwdWJsaWMgUmVuZGVyQm94IHsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdSb290KFNWR1N0eWxlZEVsZW1lbnQqKTsKKyAgICB2
aXJ0dWFsIH5SZW5kZXJTVkdSb290KCk7CisKKyAgICBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExp
c3QqIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KKyAgICBSZW5kZXJP
YmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KKworICAg
IGJvb2wgaXNMYXlvdXRTaXplQ2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNMYXlvdXRTaXpl
Q2hhbmdlZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7
IG1fbmVlZHNCb3VuZGFyaWVzT3JUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CisgICAgdmlydHVh
bCB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc09yVHJh
bnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSB7IHJldHVybiBjaGlsZHJlbigpOyB9Cisg
ICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigp
IGNvbnN0IHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Jv
b3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5k
ZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1Jvb3QiOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKKyAgICB2aXJ0dWFsIGludCBj
b21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOworCisgICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3koKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOworCisgICAgdmlydHVhbCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdDsKKwor
ICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBib29s
IHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKworICAgIHZpcnR1YWwg
RmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RCb3Vu
ZGluZ0JveDsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29u
c3QgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50
Qm91bmRpbmdCb3g7IH0KKworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5
LCBIaXRUZXN0QWN0aW9uKTsKKworICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7Cisg
ICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpOwor
CisgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJh
bnNmb3JtU3RhdGUmKSBjb25zdDsKKworICAgIHZvaWQgY2FsY1ZpZXdwb3J0KCk7CisKKyAgICBi
b29sIHNlbGZXaWxsUGFpbnQoKTsKKyAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsK
KworICAgIEludFNpemUgcGFyZW50T3JpZ2luVG9Cb3JkZXJCb3goKSBjb25zdDsKKyAgICBJbnRT
aXplIGJvcmRlck9yaWdpblRvQ29udGVudEJveCgpIGNvbnN0OworICAgIEFmZmluZVRyYW5zZm9y
bSBsb2NhbFRvUmVwYWludENvbnRhaW5lclRyYW5zZm9ybShjb25zdCBJbnRQb2ludCYgcGFyZW50
T3JpZ2luSW5Db250YWluZXIpIGNvbnN0OworICAgIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRvQm9y
ZGVyQm94VHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9j
aGlsZHJlbjsKKyAgICBGbG9hdFNpemUgbV92aWV3cG9ydFNpemU7CisgICAgRmxvYXRSZWN0IG1f
b2JqZWN0Qm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1fc3Ryb2tlQm91bmRpbmdCb3g7Cisg
ICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OworICAgIG11dGFibGUgQWZmaW5lVHJh
bnNmb3JtIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKKyAgICBib29sIG1faXNMYXlvdXRTaXpl
Q2hhbmdlZCA6IDE7CisgICAgYm9vbCBtX25lZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRl
IDogMTsKK307CisKK2lubGluZSBSZW5kZXJTVkdSb290KiB0b1JlbmRlclNWR1Jvb3QoUmVuZGVy
T2JqZWN0KiBvYmplY3QpCit7IAorICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdS
b290KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSb290Kj4ob2JqZWN0KTsK
K30KKworaW5saW5lIGNvbnN0IFJlbmRlclNWR1Jvb3QqIHRvUmVuZGVyU1ZHUm9vdChjb25zdCBS
ZW5kZXJPYmplY3QqIG9iamVjdCkKK3sgCisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5p
c1NWR1Jvb3QoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1Jvb3Qq
PihvYmplY3QpOworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVj
ZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVuZGVyU1ZHUm9vdChjb25zdCBSZW5kZXJTVkdSb290Kik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5k
aWYgLy8gUmVuZGVyU1ZHUm9vdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVy
LmNwcAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHA6NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lci5oIgorCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUg
IlNWR1NoYWRvd1RyZWVFbGVtZW50cy5oIgorI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcjo6
UmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoU1ZHVXNlRWxlbWVudCogbm9kZSkKKyAg
ICA6IFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIobm9kZSkKKyAgICAsIG1fcmVjcmVh
dGVUcmVlKGZhbHNlKQoreworfQorCitSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcjo6
flJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkKK3sKKyAgICBpZiAobV9zaGFkb3dS
b290ICYmIG1fc2hhZG93Um9vdC0+YXR0YWNoZWQoKSkgeworICAgICAgICBtX3NoYWRvd1Jvb3Qt
PmRldGFjaCgpOworICAgICAgICBtX3NoYWRvd1Jvb3QtPmNsZWFyU2hhZG93SG9zdCgpOworICAg
IH0KK30KKwordm9pZCBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcjo6dXBkYXRlU3R5
bGUoTm9kZTo6U3R5bGVDaGFuZ2UgY2hhbmdlKQoreworICAgIGlmIChtX3NoYWRvd1Jvb3QgJiYg
bV9zaGFkb3dSb290LT5hdHRhY2hlZCgpKQorICAgICAgICBtX3NoYWRvd1Jvb3QtPnJlY2FsY1N0
eWxlKGNoYW5nZSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXI6
OnVwZGF0ZUZyb21FbGVtZW50KCkKK3sKKyAgICBib29sIGhhZEV4aXN0aW5nVHJlZSA9IG1fc2hh
ZG93Um9vdDsKKworICAgIFNWR1VzZUVsZW1lbnQqIHVzZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdVc2VFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBpZiAoIW1fc2hhZG93Um9vdCkgeworICAgICAg
ICBBU1NFUlQoIW1fcmVjcmVhdGVUcmVlKTsKKyAgICAgICAgbV9zaGFkb3dSb290ID0gU1ZHU2hh
ZG93VHJlZVJvb3RFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSwgdXNlRWxlbWVudCk7CisgICAg
ICAgIHVzZUVsZW1lbnQtPmJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7CisgICAgfQorCisgICAgQVNT
RVJUKG1fc2hhZG93Um9vdC0+c2hhZG93SG9zdCgpID09IHVzZUVsZW1lbnQpOworCisgICAgYm9v
bCBzaG91bGRSZWNyZWF0ZVRyZWUgPSBtX3JlY3JlYXRlVHJlZTsKKyAgICBpZiAobV9yZWNyZWF0
ZVRyZWUpIHsKKyAgICAgICAgQVNTRVJUKGhhZEV4aXN0aW5nVHJlZSk7CisKKyAgICAgICAgaWYg
KG1fc2hhZG93Um9vdC0+YXR0YWNoZWQoKSkKKyAgICAgICAgICAgIG1fc2hhZG93Um9vdC0+ZGV0
YWNoKCk7CisKKyAgICAgICAgbV9zaGFkb3dSb290LT5yZW1vdmVBbGxDaGlsZHJlbigpOworICAg
ICAgICBtX3JlY3JlYXRlVHJlZSA9IGZhbHNlOworICAgIH0KKworICAgIC8vIE9ubHkgcmVidWls
ZCB0aGUgc2hhZG93IHRyZWUsIGlmIHdlIGEpIG5ldmVyIGhhZCBhIHRyZWUgb3IgYikgd2Ugd2Vy
ZSBzcGVjaWZpY2FsbHkgYXNrZWQgdG8gZG8gc28KKyAgICAvLyBJZiB0aGUgdXNlIGVsZW1lbnQg
aXMgYSBwZW5kaW5nIHJlc291cmNlLCBhbmQgYSkgb3IgYikgaXMgdHJ1ZSwgZG8gbm90aGluZywg
YW5kIHdhaXQgZm9yIHRoZSB1c2UKKyAgICAvLyBlbGVtZW50IHRvIGJlIGFza2VkIHRvIGJ1aWxk
UGVuZGluZ1Jlc291cmNlKCksIHRoaXMgd2lsbCBjYWxsIHVzIGFnYWluLCB3aXRoIG1fcmVjcmVh
dGVUcnVlPXRydWUuCisgICAgaWYgKChzaG91bGRSZWNyZWF0ZVRyZWUgfHwgIWhhZEV4aXN0aW5n
VHJlZSkgJiYgIXVzZUVsZW1lbnQtPmlzUGVuZGluZ1Jlc291cmNlKCkpIHsKKyAgICAgICAgdXNl
RWxlbWVudC0+YnVpbGRTaGFkb3dBbmRJbnN0YW5jZVRyZWUobV9zaGFkb3dSb290LmdldCgpKTsK
KworICAgICAgICAvLyBBdHRhY2ggc2hhZG93IHJvb3QgZWxlbWVudAorICAgICAgICBtX3NoYWRv
d1Jvb3QtPmF0dGFjaEVsZW1lbnQoc3R5bGUoKSwgcmVuZGVyQXJlbmEoKSk7CisKKyAgICAgICAg
Ly8gQXR0YWNoIHN1YnRyZWUsIGFzIGlmIGl0IHdhcyBhIHJlZ3VsYXIgbm9uLXNoYWRvdyB0cmVl
CisgICAgICAgIGZvciAoTm9kZSogY2hpbGQgPSBtX3NoYWRvd1Jvb3QtPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICBjaGlsZC0+
YXR0YWNoKCk7CisgICAgfQorCisgICAgQVNTRVJUKCFtX3JlY3JlYXRlVHJlZSk7CisgICAgUmVu
ZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6dXBkYXRlRnJvbUVsZW1lbnQoKTsKK30KKwor
dm9pZCBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3sKKyAgICBS
ZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRT
dHlsZSk7CisKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBzaGFkb3dSb290UmVuZGVyZXIgPSBtX3No
YWRvd1Jvb3QgPyBtX3NoYWRvd1Jvb3QtPnJlbmRlcmVyKCkgOiAwKQorICAgICAgICBzaGFkb3dS
b290UmVuZGVyZXItPnNldFN0eWxlKHN0eWxlKCkpOworfQorCitOb2RlKiBSZW5kZXJTVkdTaGFk
b3dUcmVlUm9vdENvbnRhaW5lcjo6cm9vdEVsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBt
X3NoYWRvd1Jvb3QuZ2V0KCk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVl
Um9vdENvbnRhaW5lci5oCShyZXZpc2lvbiA3NTM0NSkJKGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmg6NzUzNDUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcl9oCisjZGVmaW5lIFJlbmRlclNW
R1NoYWRvd1RyZWVSb290Q29udGFpbmVyX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAi
UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisgICAgCitjbGFzcyBTVkdVc2VFbGVtZW50OworY2xhc3MgU1ZHU2hhZG93VHJlZVJvb3RFbGVt
ZW50OworCitjbGFzcyBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lciA6IHB1YmxpYyBS
ZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdT
aGFkb3dUcmVlUm9vdENvbnRhaW5lcihTVkdVc2VFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVu
ZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1NW
R1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
dm9pZCBtYXJrU2hhZG93VHJlZUZvclJlY3JlYXRpb24oKSB7IG1fcmVjcmVhdGVUcmVlID0gdHJ1
ZTsgfQorICAgIHZvaWQgdXBkYXRlU3R5bGUoTm9kZTo6U3R5bGVDaGFuZ2UpOworICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOworCisgICAgTm9kZSogcm9vdEVsZW1lbnQoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworCisgICAgYm9vbCBtX3Jl
Y3JlYXRlVHJlZTsKKyAgICBSZWZQdHI8U1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50PiBtX3NoYWRv
d1Jvb3Q7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHA6NzUzNDUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVy
LmgiCisKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1NoYWRvd1RyZWVFbGVt
ZW50cy5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6
OlJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQqIG5vZGUpCisgICAgOiBSZW5kZXJTVkdDb250YWluZXIobm9kZSkKKyAgICAsIG1fbmVl
ZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkKK3sKK30KKworYm9vbCBSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyOjpjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpCit7CisgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7CisKKyAgICBib29sIG5lZWRzVXBkYXRlID0gbV9u
ZWVkc1RyYW5zZm9ybVVwZGF0ZTsKKyAgICBpZiAobmVlZHNVcGRhdGUpIHsKKyAgICAgICAgbV9s
b2NhbFRyYW5zZm9ybSA9IGVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICAg
ICAgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIGlmICghZWxl
bWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6Z1RhZykgfHwgIXN0YXRpY19jYXN0PFNWR0dFbGVt
ZW50Kj4oZWxlbWVudCktPmlzU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuIG5lZWRzVXBkYXRlOworCisgICAgRmxvYXRTaXplIHRyYW5zbGF0aW9uID0gc3RhdGlj
X2Nhc3Q8U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQqPihlbGVtZW50KS0+Y29udGFpbmVy
VHJhbnNsYXRpb24oKTsKKyAgICBpZiAoIXRyYW5zbGF0aW9uLndpZHRoKCkgJiYgIXRyYW5zbGF0
aW9uLmhlaWdodCgpKQorICAgICAgICByZXR1cm4gbmVlZHNVcGRhdGU7CisKKyAgICAvLyBGSVhN
RTogQ291bGQgb3B0aW1pemUgdGhpcyBjYXNlIGZvciB1c2UgdG8gYXZvaWQgcmVmZXRjaGluZyB0
aGUgYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGhlcmUsIGlmIG9ubHkgdGhlIGNvbnRhaW5lclRy
YW5zbGF0aW9uKCkgY2hhbmdlZC4KKyAgICBpZiAoIW5lZWRzVXBkYXRlKQorICAgICAgICBtX2xv
Y2FsVHJhbnNmb3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOworCisgICAg
bV9sb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUodHJhbnNsYXRpb24ud2lkdGgoKSwgdHJhbnNsYXRp
b24uaGVpZ2h0KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUcmFu
c2Zvcm1hYmxlQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgJKHJldmlzaW9uIDc1MzQ1
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNv
bnRhaW5lci5oOjc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1Ry
YW5zZm9ybWFibGVDb250YWluZXJfaAorI2RlZmluZSBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29u
dGFpbmVyX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50OworY2xhc3MgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lciA6IHB1
YmxpYyBSZW5kZXJTVkdDb250YWluZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXIoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqKTsK
KworICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRy
dWU7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlTG9jYWxUcmFuc2Zv
cm0oKTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKworICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9y
bVVwZGF0ZSA6IDE7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07Cit9Owor
fQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZiAvLyBSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCShyZXZpc2lvbiA3NTM0
NSkJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFp
bmVyLmNwcDo3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Vmlld3BvcnRDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdT
VkdFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHVmlld3BvcnRD
b250YWluZXI6OlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKFNWR1N0eWxlZEVsZW1lbnQqIG5v
ZGUpCisgICAgOiBSZW5kZXJTVkdDb250YWluZXIobm9kZSkKK3sKK30KKwordm9pZCBSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lcjo6YXBwbHlWaWV3cG9ydENsaXAoUGFpbnRJbmZvJiBwYWludElu
Zm8pCit7CisgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4odGhpcykp
CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKG1fdmlld3BvcnQpOworfQorCit2b2lk
IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpjYWxjVmlld3BvcnQoKQoreworICAgICBTVkdF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7CisgICAg
IGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpKSB7CisgICAgICAgICBT
VkdTVkdFbGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4oZWxlbWVudCk7
CisKKyAgICAgICAgIEZsb2F0UmVjdCBvbGRWaWV3cG9ydCA9IG1fdmlld3BvcnQ7CisgICAgICAg
ICBtX3ZpZXdwb3J0ID0gRmxvYXRSZWN0KHN2Zy0+eCgpLnZhbHVlKHN2ZykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCBzdmctPnkoKS52YWx1ZShzdmcpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgc3ZnLT53aWR0aCgpLnZhbHVlKHN2ZykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCBzdmctPmhlaWdodCgpLnZhbHVlKHN2ZykpOworCisgICAg
ICAgIGlmIChvbGRWaWV3cG9ydCAhPSBtX3ZpZXdwb3J0KQorICAgICAgICAgICAgc2V0TmVlZHNC
b3VuZGFyaWVzVXBkYXRlKCk7CisgICAgfQorfQorCitBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZH
Vmlld3BvcnRDb250YWluZXI6OnZpZXdwb3J0VHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBpZiAo
bm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpKSB7CisgICAgICAgIFNWR1NWR0Vs
ZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2RlKCkpOworICAgICAg
ICByZXR1cm4gc3ZnLT52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKG1fdmlld3BvcnQud2lkdGgoKSwg
bV92aWV3cG9ydC5oZWlnaHQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9y
bSgpOworfQorCitjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFp
bmVyOjpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gdmlld3BvcnRUcmFuc2xhdGlvbih2aWV3cG9ydFRyYW5zZm9ybSgpKTsKKyAgICBtX2xvY2Fs
VG9QYXJlbnRUcmFuc2Zvcm0gPSB2aWV3cG9ydFRyYW5zbGF0aW9uLnRyYW5zbGF0ZVJpZ2h0KG1f
dmlld3BvcnQueCgpLCBtX3ZpZXdwb3J0LnkoKSk7CisgICAgcmV0dXJuIG1fbG9jYWxUb1BhcmVu
dFRyYW5zZm9ybTsKKyAgICAvLyBJZiB0aGlzIGNsYXNzIHdlcmUgZXZlciBnaXZlbiBhIGxvY2Fs
VHJhbnNmb3JtKCksIHRoZW4gdGhlIGFib3ZlIHdvdWxkIHJlYWQ6CisgICAgLy8gcmV0dXJuIHZp
ZXdwb3J0VHJhbnNmb3JtKCkgKiBsb2NhbFRyYW5zZm9ybSgpICogdmlld3BvcnRUcmFuc2xhdGlv
bjsKK30KKworYm9vbCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6cG9pbnRJc0luc2lkZVZp
ZXdwb3J0Q2xpcChjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50KQoreworICAgIC8vIFJl
c3BlY3QgdGhlIHZpZXdwb3J0IGNsaXAgKHdoaWNoIGlzIGluIHBhcmVudCBjb29yZHMpCisgICAg
aWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojppc092ZXJmbG93SGlkZGVuKHRoaXMpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gbV92aWV3cG9ydC5jb250YWlucyhwb2ludElu
UGFyZW50KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyLmgJKHJldmlzaW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaDo3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyX2gKKyNk
ZWZpbmUgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXJfaAorCisjaWYgRU5BQkxFKFNWRykKKyNp
bmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBUaGlzIGlzIHVzZWQgZm9yIG5vbi1yb290IDxzdmc+IGVsZW1lbnRzIGFuZCA8bWFya2VyPiBl
bGVtZW50cywgbmVpdGhlciBvZiB3aGljaCBhcmUgU1ZHVHJhbnNmb3JtYWJsZQorLy8gdGh1cyB3
ZSBpbmhlcml0IGZyb20gUmVuZGVyU1ZHQ29udGFpbmVyIGluc3RlYWQgb2YgUmVuZGVyU1ZHVHJh
bnNmb3JtYWJsZUNvbnRhaW5lcgorY2xhc3MgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgOiBw
dWJsaWMgUmVuZGVyU1ZHQ29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50Kik7CisKK3ByaXZhdGU6CisgICAg
dmlydHVhbCBib29sIGlzU1ZHQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc1NWR1ZpZXdwb3J0Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJu
ICJSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciI7IH0KKworICAgIEFmZmluZVRyYW5zZm9ybSB2
aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y2FsY1ZpZXdwb3J0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWaWV3cG9ydENsaXAoUGFp
bnRJbmZvJik7CisgICAgdmlydHVhbCBib29sIHBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCk7CisKKyAgICBGbG9hdFJlY3QgbV92aWV3cG9y
dDsKKyAgICBtdXRhYmxlIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07
Cit9OworICAKK2lubGluZSBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciogdG9SZW5kZXJTVkdW
aWV3cG9ydENvbnRhaW5lcihSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9i
amVjdCB8fCAhc3RyY21wKG9iamVjdC0+cmVuZGVyTmFtZSgpLCAiUmVuZGVyU1ZHVmlld3BvcnRD
b250YWluZXIiKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyKj4ob2JqZWN0KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBh
biB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKGNv
bnN0IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8gUmVuZGVyU1ZHVmlld3BvcnRD
b250YWluZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1
ZmZlclRvb2xzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCShyZXZpc2lvbiA3NTM0NSkJKGZyb20gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwOjc1MzQ1KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmgi
CisKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIEFmZmluZVRyYW5zZm9ybSYgY3VycmVudENvbnRlbnRUcmFuc2Zvcm1hdGlvbigpCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBZmZpbmVUcmFuc2Zvcm0sIHNfY3VycmVudENvbnRl
bnRUcmFuc2Zvcm1hdGlvbiwgKCkpOworICAgIHJldHVybiBzX2N1cnJlbnRDb250ZW50VHJhbnNm
b3JtYXRpb247Cit9CisKK3ZvaWQgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2FsY3VsYXRlVHJhbnNm
b3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0oY29uc3QgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSkKK3sKKyAgICBj
b25zdCBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSByZW5kZXJlcjsKKyAgICBBU1NFUlQoY3VycmVu
dCk7CisKKyAgICBhYnNvbHV0ZVRyYW5zZm9ybSA9IGN1cnJlbnRDb250ZW50VHJhbnNmb3JtYXRp
b24oKTsKKyAgICB3aGlsZSAoY3VycmVudCkgeworICAgICAgICBhYnNvbHV0ZVRyYW5zZm9ybS5t
dWx0aXBseShjdXJyZW50LT5sb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkpOworICAgICAgICBpZiAo
Y3VycmVudC0+aXNTVkdSb290KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQtPnBhcmVudCgpOworICAgIH0KK30KKworYm9vbCBTVkdJbWFnZUJ1ZmZlclRv
b2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGFyZ2V0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1h
Z2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIElu
dFNpemUgaW1hZ2VTaXplKHJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoY2xhbXBlZEFic29sdXRlVGFy
Z2V0UmVjdC5zaXplKCkpKTsKKyAgICBJbnRTaXplIHVuY2xhbXBlZEltYWdlU2l6ZShTVkdJbWFn
ZUJ1ZmZlclRvb2xzOjpyb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGFic29sdXRlVGFyZ2V0UmVjdC5z
aXplKCkpKTsKKworICAgIC8vIERvbid0IGNyZWF0ZSBlbXB0eSBJbWFnZUJ1ZmZlcnMuCisgICAg
aWYgKGltYWdlU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE93
blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlU2l6ZSwg
Y29sb3JTcGFjZSk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgR3JhcGhpY3NDb250ZXh0KiBpbWFnZUNvbnRleHQgPSBpbWFnZS0+Y29udGV4dCgpOworICAg
IEFTU0VSVChpbWFnZUNvbnRleHQpOworCisgICAgLy8gQ29tcGVuc2F0ZSByb3VuZGluZyBlZmZl
Y3RzLCBhcyB0aGUgYWJzb2x1dGUgdGFyZ2V0IHJlY3QgaXMgdXNpbmcgZmxvYXRpbmctcG9pbnQg
bnVtYmVycyBhbmQgdGhlIGltYWdlIGJ1ZmZlciBzaXplIGlzIGludGVnZXIuCisgICAgaW1hZ2VD
b250ZXh0LT5zY2FsZShGbG9hdFNpemUodW5jbGFtcGVkSW1hZ2VTaXplLndpZHRoKCkgLyBhYnNv
bHV0ZVRhcmdldFJlY3Qud2lkdGgoKSwgdW5jbGFtcGVkSW1hZ2VTaXplLmhlaWdodCgpIC8gYWJz
b2x1dGVUYXJnZXRSZWN0LmhlaWdodCgpKSk7CisKKyAgICBpbWFnZUJ1ZmZlciA9IGltYWdlLnJl
bGVhc2UoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTVkdJbWFnZUJ1ZmZlclRvb2xz
OjpyZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIFJlbmRlck9i
amVjdCogaXRlbSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdWJ0cmVlQ29udGVudFRyYW5zZm9y
bWF0aW9uKQoreworICAgIEFTU0VSVChpdGVtKTsKKyAgICBBU1NFUlQoaW1hZ2UpOworICAgIEFT
U0VSVChpbWFnZS0+Y29udGV4dCgpKTsKKworICAgIFBhaW50SW5mbyBpbmZvKGltYWdlLT5jb250
ZXh0KCksIFBhaW50SW5mbzo6aW5maW5pdGVSZWN0KCksIFBhaW50UGhhc2VGb3JlZ3JvdW5kLCAw
LCAwLCAwKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSYgY29udGVudFRyYW5zZm9ybWF0aW9uID0g
Y3VycmVudENvbnRlbnRUcmFuc2Zvcm1hdGlvbigpOworICAgIEFmZmluZVRyYW5zZm9ybSBzYXZl
ZENvbnRlbnRUcmFuc2Zvcm1hdGlvbiA9IGNvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKKyAgICBjb250
ZW50VHJhbnNmb3JtYXRpb24ubXVsdGlwbHkoc3VidHJlZUNvbnRlbnRUcmFuc2Zvcm1hdGlvbik7
CisKKyAgICBpdGVtLT5sYXlvdXRJZk5lZWRlZCgpOworICAgIGl0ZW0tPnBhaW50KGluZm8sIDAs
IDApOworCisgICAgY29udGVudFRyYW5zZm9ybWF0aW9uID0gc2F2ZWRDb250ZW50VHJhbnNmb3Jt
YXRpb247Cit9CisKK3ZvaWQgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xpcFRvSW1hZ2VCdWZmZXIo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRl
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93
blB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKQoreworICAgIEFTU0VSVChjb250ZXh0KTsK
KyAgICBBU1NFUlQoaW1hZ2VCdWZmZXIpOworCisgICAgLy8gVGhlIG1hc2sgaW1hZ2UgaGFzIGJl
ZW4gY3JlYXRlZCBpbiB0aGUgYWJzb2x1dGUgY29vcmRpbmF0ZSBzcGFjZSwgYXMgdGhlIGltYWdl
IHNob3VsZCBub3QgYmUgc2NhbGVkLgorICAgIC8vIFNvIHRoZSBhY3R1YWwgbWFza2luZyBwcm9j
ZXNzIGhhcyB0byBiZSBkb25lIGluIHRoZSBhYnNvbHV0ZSBjb29yZGluYXRlIHNwYWNlIGFzIHdl
bGwuCisgICAgY29udGV4dC0+Y29uY2F0Q1RNKGFic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKSk7
CisgICAgY29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIuZ2V0KCksIGNsYW1w
ZWRBYnNvbHV0ZVRhcmdldFJlY3QpOworICAgIGNvbnRleHQtPmNvbmNhdENUTShhYnNvbHV0ZVRy
YW5zZm9ybSk7CisKKyAgICAvLyBXaGVuIG5lc3RpbmcgcmVzb3VyY2VzLCB3aXRoIG9iamVjdEJv
dW5kaW5nQm94IGFzIGNvbnRlbnQgdW5pdCB0eXBlcywgdGhlcmUncyBubyB1c2UgaW4gY2FjaGlu
ZyB0aGUKKyAgICAvLyByZXN1bHRpbmcgaW1hZ2UgYnVmZmVyIGFzIHRoZSBwYXJlbnQgcmVzb3Vy
Y2UgYWxyZWFkeSBjYWNoZXMgdGhlIHJlc3VsdC4KKyAgICBpZiAoIWN1cnJlbnRDb250ZW50VHJh
bnNmb3JtYXRpb24oKS5pc0lkZW50aXR5KCkpCisgICAgICAgIGltYWdlQnVmZmVyLmNsZWFyKCk7
Cit9CisKK0ludFNpemUgU1ZHSW1hZ2VCdWZmZXJUb29sczo6cm91bmRlZEltYWdlQnVmZmVyU2l6
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIEludFNpemUoc3RhdGljX2Nh
c3Q8aW50Pihscm91bmRmKHNpemUud2lkdGgoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYo
c2l6ZS5oZWlnaHQoKSkpKTsKK30KKworRmxvYXRSZWN0IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNs
YW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCkKK3sKKyAgICBBU1NF
UlQocmVuZGVyZXIpOworCisgICAgY29uc3QgUmVuZGVyU1ZHUm9vdCogc3ZnUm9vdCA9IFNWR1Jl
bmRlclN1cHBvcnQ6OmZpbmRUcmVlUm9vdE9iamVjdChyZW5kZXJlcik7CisgICAgRmxvYXRSZWN0
IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRhcmdldFJlY3Q7CisgICAgY2xh
bXBlZEFic29sdXRlVGFyZ2V0UmVjdC5pbnRlcnNlY3Qoc3ZnUm9vdC0+Y29udGVudEJveFJlY3Qo
KSk7CisgICAgcmV0dXJuIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3Q7Cit9CisKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R0ltYWdlQnVmZmVyVG9vbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuaAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmg6NzUzNDUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0ltYWdl
QnVmZmVyVG9vbHNfaAorI2RlZmluZSBTVkdJbWFnZUJ1ZmZlclRvb2xzX2gKKworI2lmIEVOQUJM
RShTVkcpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07Citj
bGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7
CitjbGFzcyBSZW5kZXJPYmplY3Q7CisKK2NsYXNzIFNWR0ltYWdlQnVmZmVyVG9vbHMgOiBwdWJs
aWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGNyZWF0ZUltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mLCBDb2xvclNw
YWNlKTsKKyAgICBzdGF0aWMgdm9pZCByZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciosIFJlbmRlck9iamVjdCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIHN0YXRp
YyB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZEFic29s
dXRlVGFyZ2V0UmVjdCwgT3duUHRyPEltYWdlQnVmZmVyPiYpOworCisgICAgc3RhdGljIHZvaWQg
Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0oY29u
c3QgUmVuZGVyT2JqZWN0KiwgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSk7Cisg
ICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIo
Y29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRhcmdldFJlY3Qp
OworICAgIHN0YXRpYyBJbnRTaXplIHJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRT
aXplJik7CisKK3ByaXZhdGU6CisgICAgU1ZHSW1hZ2VCdWZmZXJUb29scygpIHsgfQorICAgIH5T
VkdJbWFnZUJ1ZmZlclRvb2xzKCkgeyB9Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtlckRhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtlckRhdGEuaAkocmV2aXNp
b24gNzUzNDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJEYXRhLmg6
NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtlckRhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBTVkdNYXJrZXJEYXRhX2gKKyNkZWZpbmUgU1ZHTWFya2VyRGF0YV9oCisKKyNpZiBFTkFCTEUo
U1ZHKQorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFJlbmRlclNWR1Jlc291cmNlTWFya2VyOworCitjbGFzcyBTVkdNYXJrZXJEYXRhIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBVbmtub3duID0gMCwKKyAgICAgICAgU3RhcnQs
CisgICAgICAgIE1pZCwKKyAgICAgICAgRW5kCisgICAgfTsKKworICAgIFNWR01hcmtlckRhdGEo
Y29uc3QgVHlwZSYgdHlwZSA9IFVua25vd24sIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJr
ZXIgPSAwKQorICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fbWFya2VyKG1hcmtl
cikKKyAgICB7CisgICAgfQorCisgICAgRmxvYXRQb2ludCBvcmlnaW4oKSBjb25zdCB7IHJldHVy
biBtX29yaWdpbjsgfQorICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXIoKSBjb25z
dCB7IHJldHVybiBtX21hcmtlcjsgfQorCisgICAgZmxvYXQgY3VycmVudEFuZ2xlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEZsb2F0U2l6ZSBpbnNsb3BlQ2hhbmdlID0gbV9pbnNsb3BlUG9pbnRz
WzFdIC0gbV9pbnNsb3BlUG9pbnRzWzBdOworICAgICAgICBGbG9hdFNpemUgb3V0c2xvcGVDaGFu
Z2UgPSBtX291dHNsb3BlUG9pbnRzWzFdIC0gbV9vdXRzbG9wZVBvaW50c1swXTsKKworICAgICAg
ICBkb3VibGUgaW5zbG9wZSA9IHJhZDJkZWcoYXRhbjIoaW5zbG9wZUNoYW5nZS5oZWlnaHQoKSwg
aW5zbG9wZUNoYW5nZS53aWR0aCgpKSk7CisgICAgICAgIGRvdWJsZSBvdXRzbG9wZSA9IHJhZDJk
ZWcoYXRhbjIob3V0c2xvcGVDaGFuZ2UuaGVpZ2h0KCksIG91dHNsb3BlQ2hhbmdlLndpZHRoKCkp
KTsKKworICAgICAgICBkb3VibGUgYW5nbGUgPSAwOworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkg
eworICAgICAgICBjYXNlIFN0YXJ0OgorICAgICAgICAgICAgYW5nbGUgPSBvdXRzbG9wZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1pZDoKKyAgICAgICAgICAgIGFuZ2xlID0g
KGluc2xvcGUgKyBvdXRzbG9wZSkgLyAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRW5kOgorICAgICAgICAgICAgYW5nbGUgPSBpbnNsb3BlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoYW5nbGUpOworICAgIH0KKworICAgIHZvaWQgdXBkYXRlVHlwZUFuZE1hcmtl
cihjb25zdCBUeXBlJiB0eXBlLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyKQorICAg
IHsKKyAgICAgICAgbV90eXBlID0gdHlwZTsKKyAgICAgICAgbV9tYXJrZXIgPSBtYXJrZXI7Cisg
ICAgfQorCisgICAgdm9pZCB1cGRhdGVPdXRzbG9wZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
KyAgICB7CisgICAgICAgIG1fb3V0c2xvcGVQb2ludHNbMF0gPSBtX29yaWdpbjsKKyAgICAgICAg
bV9vdXRzbG9wZVBvaW50c1sxXSA9IHBvaW50OworICAgIH0KKworICAgIHZvaWQgdXBkYXRlTWFy
a2VyRGF0YUZvclBhdGhFbGVtZW50KGNvbnN0IFBhdGhFbGVtZW50KiBlbGVtZW50KQorICAgIHsK
KyAgICAgICAgRmxvYXRQb2ludCogcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOworCisgICAgICAg
IHN3aXRjaCAoZWxlbWVudC0+dHlwZSkgeworICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRkUXVh
ZEN1cnZlVG9Qb2ludDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMxMTUgKFBhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2lu
dCBub3QgaGFuZGxlZCBmb3IgPG1hcmtlcj4pCisgICAgICAgICAgICBtX29yaWdpbiA9IHBvaW50
c1sxXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRkQ3Vy
dmVUb1BvaW50OgorICAgICAgICAgICAgbV9pbnNsb3BlUG9pbnRzWzBdID0gcG9pbnRzWzFdOwor
ICAgICAgICAgICAgbV9pbnNsb3BlUG9pbnRzWzFdID0gcG9pbnRzWzJdOworICAgICAgICAgICAg
bV9vcmlnaW4gPSBwb2ludHNbMl07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
YXRoRWxlbWVudE1vdmVUb1BvaW50OgorICAgICAgICAgICAgbV9zdWJwYXRoU3RhcnQgPSBwb2lu
dHNbMF07CisgICAgICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludDoKKyAgICAgICAg
ICAgIHVwZGF0ZUluc2xvcGUocG9pbnRzWzBdKTsKKyAgICAgICAgICAgIG1fb3JpZ2luID0gcG9p
bnRzWzBdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aEVsZW1lbnRDbG9z
ZVN1YnBhdGg6CisgICAgICAgICAgICB1cGRhdGVJbnNsb3BlKHBvaW50c1swXSk7CisgICAgICAg
ICAgICBtX29yaWdpbiA9IG1fc3VicGF0aFN0YXJ0OworICAgICAgICAgICAgbV9zdWJwYXRoU3Rh
cnQgPSBGbG9hdFBvaW50KCk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9p
ZCB1cGRhdGVJbnNsb3BlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgIHsKKyAgICAgICAg
bV9pbnNsb3BlUG9pbnRzWzBdID0gbV9vcmlnaW47CisgICAgICAgIG1faW5zbG9wZVBvaW50c1sx
XSA9IHBvaW50OworICAgIH0KKworICAgIFR5cGUgbV90eXBlOworICAgIFJlbmRlclNWR1Jlc291
cmNlTWFya2VyKiBtX21hcmtlcjsKKyAgICBGbG9hdFBvaW50IG1fb3JpZ2luOworICAgIEZsb2F0
UG9pbnQgbV9zdWJwYXRoU3RhcnQ7CisgICAgRmxvYXRQb2ludCBtX2luc2xvcGVQb2ludHNbMl07
CisgICAgRmxvYXRQb2ludCBtX291dHNsb3BlUG9pbnRzWzJdOworfTsKKworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNWRykKKyNlbmRpZiAvLyBTVkdNYXJrZXJEYXRhX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcAko
cmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJM
YXlvdXRJbmZvLmNwcDo3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
TWFya2VyTGF5b3V0SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDggUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQor
I2luY2x1ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKKworI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlTWFya2VyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1ZHTWFya2VyTGF5b3V0
SW5mbzo6U1ZHTWFya2VyTGF5b3V0SW5mbygpCisgICAgOiBtX21pZE1hcmtlcigwKQorICAgICwg
bV9lbGVtZW50SW5kZXgoMCkKKyAgICAsIG1fc3Ryb2tlV2lkdGgoMCkKK3sKK30KKworU1ZHTWFy
a2VyTGF5b3V0SW5mbzo6flNWR01hcmtlckxheW91dEluZm8oKQoreworfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgcHJvY2Vzc1N0YXJ0QW5kTWlkTWFya2Vycyh2b2lkKiBpbmZvUHRyLCBjb25zdCBQ
YXRoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBTVkdNYXJrZXJMYXlvdXRJbmZvJiBpbmZvID0g
KnJlaW50ZXJwcmV0X2Nhc3Q8U1ZHTWFya2VyTGF5b3V0SW5mbyo+KGluZm9QdHIpOworICAgIFNW
R01hcmtlckRhdGEmIG1hcmtlckRhdGEgPSBpbmZvLm1hcmtlckRhdGEoKTsKKyAgICBpbnQmIGVs
ZW1lbnRJbmRleCA9IGluZm8uZWxlbWVudEluZGV4KCk7CisKKyAgICAvLyBGaXJzdCB1cGRhdGUg
dGhlIG91dHNsb3BlIGZvciB0aGUgcHJldmlvdXMgZWxlbWVudAorICAgIG1hcmtlckRhdGEudXBk
YXRlT3V0c2xvcGUoZWxlbWVudC0+cG9pbnRzWzBdKTsKKworICAgIC8vIERyYXcgdGhlIG1hcmtl
ciBmb3IgdGhlIHByZXZpb3VzIGVsZW1lbnQKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciog
bWFya2VyID0gbWFya2VyRGF0YS5tYXJrZXIoKTsKKyAgICBpZiAoZWxlbWVudEluZGV4ID4gMCAm
JiBtYXJrZXIpCisgICAgICAgIGluZm8uYWRkTGF5b3V0ZWRNYXJrZXIobWFya2VyLCBtYXJrZXJE
YXRhLm9yaWdpbigpLCBtYXJrZXJEYXRhLmN1cnJlbnRBbmdsZSgpKTsKKworICAgIC8vIFVwZGF0
ZSBvdXIgbWFya2VyIGRhdGEgZm9yIHRoaXMgZWxlbWVudAorICAgIG1hcmtlckRhdGEudXBkYXRl
TWFya2VyRGF0YUZvclBhdGhFbGVtZW50KGVsZW1lbnQpOworCisgICAgLy8gQWZ0ZXIgZHJhd2lu
ZyB0aGUgc3RhcnQgbWFya2VyLCBzd2l0Y2ggdG8gZHJhd2luZyBtaWQgbWFya2VycworICAgIGlm
IChlbGVtZW50SW5kZXggPT0gMSkKKyAgICAgICAgbWFya2VyRGF0YS51cGRhdGVUeXBlQW5kTWFy
a2VyKFNWR01hcmtlckRhdGE6Ok1pZCwgaW5mby5taWRNYXJrZXIoKSk7CisKKyAgICArK2VsZW1l
bnRJbmRleDsKK30KKworRmxvYXRSZWN0IFNWR01hcmtlckxheW91dEluZm86OmNhbGN1bGF0ZUJv
dW5kYXJpZXMoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIHN0YXJ0TWFya2VyLCBSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlciogbWlkTWFya2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogZW5kTWFy
a2VyLCBmbG9hdCBzdHJva2VXaWR0aCwgY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBtX2xheW91
dC5jbGVhcigpOworICAgIG1fbWlkTWFya2VyID0gbWlkTWFya2VyOworICAgIG1fc3Ryb2tlV2lk
dGggPSBzdHJva2VXaWR0aDsKKyAgICBtX2VsZW1lbnRJbmRleCA9IDA7CisgICAgbV9tYXJrZXJE
YXRhID0gU1ZHTWFya2VyRGF0YShTVkdNYXJrZXJEYXRhOjpTdGFydCwgc3RhcnRNYXJrZXIpOwor
ICAgIHBhdGguYXBwbHkodGhpcywgcHJvY2Vzc1N0YXJ0QW5kTWlkTWFya2Vycyk7CisKKyAgICBp
ZiAoZW5kTWFya2VyKSB7CisgICAgICAgIG1fbWFya2VyRGF0YS51cGRhdGVUeXBlQW5kTWFya2Vy
KFNWR01hcmtlckRhdGE6OkVuZCwgZW5kTWFya2VyKTsKKyAgICAgICAgYWRkTGF5b3V0ZWRNYXJr
ZXIoZW5kTWFya2VyLCBtX21hcmtlckRhdGEub3JpZ2luKCksIG1fbWFya2VyRGF0YS5jdXJyZW50
QW5nbGUoKSk7CisgICAgfQorCisgICAgaWYgKG1fbGF5b3V0LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgVmVjdG9yPE1hcmtlckxheW91dD46Oml0ZXJhdG9y
IGl0ID0gbV9sYXlvdXQuYmVnaW4oKTsKKyAgICBWZWN0b3I8TWFya2VyTGF5b3V0Pjo6aXRlcmF0
b3IgZW5kID0gbV9sYXlvdXQuZW5kKCk7CisKKyAgICBGbG9hdFJlY3QgYm91bmRzOworICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTWFya2VyTGF5b3V0JiBsYXlvdXQgPSAq
aXQ7CisKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckNvbnRlbnQgPSBs
YXlvdXQubWFya2VyOworICAgICAgICBBU1NFUlQobWFya2VyQ29udGVudCk7CisKKyAgICAgICAg
Ym91bmRzLnVuaXRlKG1hcmtlckNvbnRlbnQtPm1hcmtlckJvdW5kYXJpZXMobGF5b3V0Lm1hdHJp
eCkpOworICAgIH0KKworICAgIHJldHVybiBib3VuZHM7Cit9CisKK3ZvaWQgU1ZHTWFya2VyTGF5
b3V0SW5mbzo6ZHJhd01hcmtlcnMoUGFpbnRJbmZvJiBwYWludEluZm8pCit7CisgICAgaWYgKG1f
bGF5b3V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPE1hcmtlckxh
eW91dD46Oml0ZXJhdG9yIGl0ID0gbV9sYXlvdXQuYmVnaW4oKTsKKyAgICBWZWN0b3I8TWFya2Vy
TGF5b3V0Pjo6aXRlcmF0b3IgZW5kID0gbV9sYXlvdXQuZW5kKCk7CisKKyAgICBmb3IgKDsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1hcmtlckxheW91dCYgbGF5b3V0ID0gKml0OworICAg
ICAgICBsYXlvdXQubWFya2VyLT5kcmF3KHBhaW50SW5mbywgbGF5b3V0Lm1hdHJpeCk7CisgICAg
fQorfQorCit2b2lkIFNWR01hcmtlckxheW91dEluZm86OmFkZExheW91dGVkTWFya2VyKFJlbmRl
clNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXIsIGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxv
YXQgYW5nbGUpCit7CisgICAgQVNTRVJUKG1hcmtlcik7CisgICAgbV9sYXlvdXQuYXBwZW5kKE1h
cmtlckxheW91dChtYXJrZXIsIG1hcmtlci0+bWFya2VyVHJhbnNmb3JtYXRpb24ob3JpZ2luLCBh
bmdsZSwgbV9zdHJva2VXaWR0aCkpKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5
b3V0SW5mby5oCShyZXZpc2lvbiA3NTM0NSkJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NWR01hcmtlckxheW91dEluZm8uaDo3NTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHTWFya2VyTGF5b3V0SW5mb19oCisjZGVm
aW5lIFNWR01hcmtlckxheW91dEluZm9faAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTVkdNYXJrZXJEYXRhLmgiCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGF0aDsKK2Ns
YXNzIFJlbmRlclNWR1Jlc291cmNlTWFya2VyOworCitzdHJ1Y3QgTWFya2VyTGF5b3V0IHsKKyAg
ICBNYXJrZXJMYXlvdXQoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck9iaiA9IDAsIEFm
ZmluZVRyYW5zZm9ybSBtYXRyaXhPYmogPSBBZmZpbmVUcmFuc2Zvcm0oKSkKKyAgICAgICAgOiBt
YXJrZXIobWFya2VyT2JqKQorICAgICAgICAsIG1hdHJpeChtYXRyaXhPYmopCisgICAgeworICAg
ICAgICBBU1NFUlQobWFya2VyKTsKKyAgICB9CisKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
ciogbWFya2VyOworICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7Cit9OworCitjbGFzcyBTVkdN
YXJrZXJMYXlvdXRJbmZvIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBTVkdN
YXJrZXJMYXlvdXRJbmZvKCk7CisgICAgflNWR01hcmtlckxheW91dEluZm8oKTsKKworICAgIEZs
b2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBzdGFy
dE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1pZE1hcmtlciwgUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIqIGVuZE1hcmtlciwgZmxvYXQgc3Ryb2tlV2lkdGgsIGNvbnN0IFBhdGgmKTsK
KyAgICB2b2lkIGRyYXdNYXJrZXJzKFBhaW50SW5mbyYpOworCisgICAgLy8gVXNlZCBieSBzdGF0
aWMgaW5saW5lIGhlbHBlciBmdW5jdGlvbnMgaW4gU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAKKyAg
ICBTVkdNYXJrZXJEYXRhJiBtYXJrZXJEYXRhKCkgeyByZXR1cm4gbV9tYXJrZXJEYXRhOyB9Cisg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1pZE1hcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1f
bWlkTWFya2VyOyB9CisgICAgaW50JiBlbGVtZW50SW5kZXgoKSB7IHJldHVybiBtX2VsZW1lbnRJ
bmRleDsgfQorICAgIHZvaWQgYWRkTGF5b3V0ZWRNYXJrZXIoUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXIqLCBjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlKTsKKworcHJpdmF0ZToK
KyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbV9taWRNYXJrZXI7CisKKyAgICAvLyBVc2Vk
IHdoaWxlIGxheW91dGluZyBtYXJrZXJzCisgICAgaW50IG1fZWxlbWVudEluZGV4OworICAgIFNW
R01hcmtlckRhdGEgbV9tYXJrZXJEYXRhOworICAgIGZsb2F0IG1fc3Ryb2tlV2lkdGg7CisKKyAg
ICAvLyBIb2xkcyB0aGUgZmluYWwgY29tcHV0ZWQgcmVzdWx0CisgICAgVmVjdG9yPE1hcmtlckxh
eW91dD4gbV9sYXlvdXQ7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHJldmlz
aW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9y
dC5jcHA6NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1
cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJT
VkdSZW5kZXJTdXBwb3J0LmgiCisKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgorI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2VyLmgiCisj
aW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2lu
Y2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgor
I2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lu
dFJlY3QgU1ZHUmVuZGVyU3VwcG9ydDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
KQoreworICAgIC8vIFJldHVybiBlYXJseSBmb3IgYW55IGNhc2VzIHdoZXJlIHdlIGRvbid0IGFj
dHVhbGx5IHBhaW50CisgICAgaWYgKG9iamVjdC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJ
U0lCTEUgJiYgIW9iamVjdC0+ZW5jbG9zaW5nTGF5ZXIoKS0+aGFzVmlzaWJsZUNvbnRlbnQoKSkK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIC8vIFBhc3Mgb3VyIGxvY2FsIHBhaW50
IHJlY3QgdG8gY29tcHV0ZVJlY3RGb3JSZXBhaW50KCkgd2hpY2ggd2lsbAorICAgIC8vIG1hcCB0
byBwYXJlbnQgY29vcmRzIGFuZCByZWN1cnNlIHVwIHRoZSBwYXJlbnQgY2hhaW4uCisgICAgSW50
UmVjdCByZXBhaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qob2JqZWN0LT5yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBvYmplY3QtPmNvbXB1dGVSZWN0Rm9yUmVwYWludChy
ZXBhaW50Q29udGFpbmVyLCByZXBhaW50UmVjdCk7CisgICAgcmV0dXJuIHJlcGFpbnRSZWN0Owor
fQorCit2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJP
YmplY3QqIG9iamVjdCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIElu
dFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKQoreworICAgIGNvbnN0IFNWR1JlbmRlclN0
eWxlKiBzdmdTdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBpZiAoY29u
c3QgU2hhZG93RGF0YSogc2hhZG93ID0gc3ZnU3R5bGUtPnNoYWRvdygpKQorICAgICAgICBzaGFk
b3ctPmFkanVzdFJlY3RGb3JTaGFkb3cocmVwYWludFJlY3QpOworCisgICAgLy8gVHJhbnNsYXRl
IHRvIGNvb3JkcyBpbiBvdXIgcGFyZW50IHJlbmRlcmVyLCBhbmQgdGhlbiBjYWxsIGNvbXB1dGVS
ZWN0Rm9yUmVwYWludCBvbiBvdXIgcGFyZW50CisgICAgcmVwYWludFJlY3QgPSBvYmplY3QtPmxv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlcGFpbnRSZWN0KTsKKyAgICBvYmplY3Qt
PnBhcmVudCgpLT5jb21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgcmVwYWlu
dFJlY3QsIGZpeGVkKTsKK30KKwordm9pZCBTVkdSZW5kZXJTdXBwb3J0OjptYXBMb2NhbFRvQ29u
dGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCAsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNm
b3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKQoreworICAgIEFTU0VSVCghZml4ZWQpOyAvLyBXZSBz
aG91bGQgaGF2ZSBubyBmaXhlZCBjb250ZW50IGluIHRoZSBTVkcgcmVuZGVyaW5nIHRyZWUuCisg
ICAgQVNTRVJUKHVzZVRyYW5zZm9ybXMpOyAvLyBNYXBwaW5nIGEgcG9pbnQgdGhyb3VnaCBTVkcg
dy9vIHJlc3BlY3RpbmcgdHJhbnNmb3JtcyBpcyB1c2VsZXNzLgorICAgIHRyYW5zZm9ybVN0YXRl
LmFwcGx5VHJhbnNmb3JtKG9iamVjdC0+bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpKTsKKyAgICBv
YmplY3QtPnBhcmVudCgpLT5tYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIGZp
eGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0ZSk7Cit9CisKK2Jvb2wgU1ZHUmVuZGVy
U3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqIG9iamVjdCwg
UGFpbnRJbmZvJiBwYWludEluZm8pCit7CisgICAgQVNTRVJUKG9iamVjdCk7CisKKyAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisgICAgQVNTRVJUKHN0eWxlKTsKKwor
ICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdTdHlsZSgpOwor
ICAgIEFTU0VSVChzdmdTdHlsZSk7CisKKyAgICAvLyBTZXR1cCB0cmFuc3BhcmVuY3kgbGF5ZXJz
IGJlZm9yZSBzZXR0aW5nIHVwIFNWRyByZXNvdXJjZXMhCisgICAgZmxvYXQgb3BhY2l0eSA9IHN0
eWxlLT5vcGFjaXR5KCk7CisgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gc3ZnU3R5bGUt
PnNoYWRvdygpOworICAgIGlmIChvcGFjaXR5IDwgMSB8fCBzaGFkb3cpIHsKKyAgICAgICAgRmxv
YXRSZWN0IHJlcGFpbnRSZWN0ID0gb2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpOworCisgICAgICAgIGlmIChvcGFjaXR5IDwgMSkgeworICAgICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmNsaXAocmVwYWludFJlY3QpOworICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc2hhZG93KSB7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChyZXBh
aW50UmVjdCk7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U2hhZG93KEludFNp
emUoc2hhZG93LT54KCksIHNoYWRvdy0+eSgpKSwgc2hhZG93LT5ibHVyKCksIHNoYWRvdy0+Y29s
b3IoKSwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4
dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFNW
R1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNl
c0ZvclJlbmRlck9iamVjdChvYmplY3QpOworICAgIGlmICghcmVzb3VyY2VzKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciogbWFza2VyID0g
cmVzb3VyY2VzLT5tYXNrZXIoKSkgeworICAgICAgICBpZiAoIW1hc2tlci0+YXBwbHlSZXNvdXJj
ZShvYmplY3QsIHN0eWxlLCBwYWludEluZm8uY29udGV4dCwgQXBwbHlUb0RlZmF1bHRNb2RlKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gcmVzb3VyY2VzLT5jbGlwcGVyKCkpIHsKKyAgICAgICAg
aWYgKCFjbGlwcGVyLT5hcHBseVJlc291cmNlKG9iamVjdCwgc3R5bGUsIHBhaW50SW5mby5jb250
ZXh0LCBBcHBseVRvRGVmYXVsdE1vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworI2lmIEVOQUJMRShGSUxURVJTKQorICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ciogZmlsdGVyID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkgeworICAgICAgICBpZiAoIWZpbHRlci0+
YXBwbHlSZXNvdXJjZShvYmplY3QsIHN0eWxlLCBwYWludEluZm8uY29udGV4dCwgQXBwbHlUb0Rl
ZmF1bHRNb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjZW5kaWYKKwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRl
clNWR0NvbnRlbnQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBH
cmFwaGljc0NvbnRleHQqIHNhdmVkQ29udGV4dCkKK3sKKyNpZiAhRU5BQkxFKEZJTFRFUlMpCisg
ICAgVU5VU0VEX1BBUkFNKHNhdmVkQ29udGV4dCk7CisjZW5kaWYKKworICAgIEFTU0VSVChvYmpl
Y3QpOworCisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwor
ICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUg
PSBzdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3ZnU3R5bGUpOworCisjaWYgRU5BQkxF
KEZJTFRFUlMpCisgICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNo
ZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KG9iamVjdCk7CisgICAgaWYgKHJlc291
cmNlcykgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IHJl
c291cmNlcy0+ZmlsdGVyKCkpIHsKKyAgICAgICAgICAgIGZpbHRlci0+cG9zdEFwcGx5UmVzb3Vy
Y2Uob2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgQXBwbHlUb0RlZmF1bHRNb2RlLCAvKiBwYXRo
ICovMCk7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dCA9IHNhdmVkQ29udGV4dDsKKyAg
ICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHN0eWxlLT5vcGFjaXR5KCkgPCAxKQor
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAg
IGlmIChzdmdTdHlsZS0+c2hhZG93KCkpCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5lbmRU
cmFuc3BhcmVuY3lMYXllcigpOworfQorCit2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVD
b250YWluZXJCb3VuZGluZ0JveGVzKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyLCBGbG9h
dFJlY3QmIG9iamVjdEJvdW5kaW5nQm94LCBGbG9hdFJlY3QmIHN0cm9rZUJvdW5kaW5nQm94LCBG
bG9hdFJlY3QmIHJlcGFpbnRCb3VuZGluZ0JveCkKK3sKKyAgICBmb3IgKFJlbmRlck9iamVjdCog
Y3VycmVudCA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3Vy
cmVudC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoY3VycmVudC0+aXNTVkdIaWRkZW5D
b250YWluZXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtID0gY3VycmVudC0+bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgp
OworICAgICAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkgeworICAgICAgICAgICAgb2Jq
ZWN0Qm91bmRpbmdCb3gudW5pdGUoY3VycmVudC0+b2JqZWN0Qm91bmRpbmdCb3goKSk7CisgICAg
ICAgICAgICBzdHJva2VCb3VuZGluZ0JveC51bml0ZShjdXJyZW50LT5zdHJva2VCb3VuZGluZ0Jv
eCgpKTsKKyAgICAgICAgICAgIHJlcGFpbnRCb3VuZGluZ0JveC51bml0ZShjdXJyZW50LT5yZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG9iamVjdEJvdW5kaW5nQm94LnVuaXRlKHRyYW5zZm9ybS5tYXBSZWN0KGN1cnJlbnQtPm9i
amVjdEJvdW5kaW5nQm94KCkpKTsKKyAgICAgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRl
KHRyYW5zZm9ybS5tYXBSZWN0KGN1cnJlbnQtPnN0cm9rZUJvdW5kaW5nQm94KCkpKTsKKyAgICAg
ICAgICAgIHJlcGFpbnRCb3VuZGluZ0JveC51bml0ZSh0cmFuc2Zvcm0ubWFwUmVjdChjdXJyZW50
LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2Jvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgbG9jYWxSZXBhaW50UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBsb2NhbFRyYW5zZm9ybSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCit7CisgICAgaWYg
KGxvY2FsVHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgcmV0dXJuIGxvY2FsUmVwYWlu
dFJlY3QuaW50ZXJzZWN0cyhwYWludEluZm8ucmVjdCk7CisKKyAgICByZXR1cm4gbG9jYWxUcmFu
c2Zvcm0ubWFwUmVjdChsb2NhbFJlcGFpbnRSZWN0KS5pbnRlcnNlY3RzKHBhaW50SW5mby5yZWN0
KTsKK30KKworY29uc3QgUmVuZGVyU1ZHUm9vdCogU1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVS
b290T2JqZWN0KGNvbnN0IFJlbmRlck9iamVjdCogc3RhcnQpCit7CisgICAgd2hpbGUgKHN0YXJ0
ICYmICFzdGFydC0+aXNTVkdSb290KCkpCisgICAgICAgIHN0YXJ0ID0gc3RhcnQtPnBhcmVudCgp
OworCisgICAgQVNTRVJUKHN0YXJ0KTsKKyAgICBBU1NFUlQoc3RhcnQtPmlzU1ZHUm9vdCgpKTsK
KyAgICByZXR1cm4gdG9SZW5kZXJTVkdSb290KHN0YXJ0KTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGludmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKFJlbmRlck9iamVjdCogc3RhcnQpCit7
CisgICAgQVNTRVJUKCFzdGFydC0+bmVlZHNMYXlvdXQoKSk7CisgICAgaWYgKFNWR1Jlc291cmNl
cyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRl
ck9iamVjdChzdGFydCkpCisgICAgICAgIHJlc291cmNlcy0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hl
KHN0YXJ0LCBmYWxzZSk7CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBzdGFydC0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAg
ICAgaW52YWxpZGF0ZVJlc291cmNlc09mQ2hpbGRyZW4oY2hpbGQpOworfQorCit2b2lkIFNWR1Jl
bmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKFJlbmRlck9iamVjdCogc3RhcnQsIGJvb2wgc2Vs
Zk5lZWRzTGF5b3V0KQoreworICAgIGJvb2wgbGF5b3V0U2l6ZUNoYW5nZWQgPSBmaW5kVHJlZVJv
b3RPYmplY3Qoc3RhcnQpLT5pc0xheW91dFNpemVDaGFuZ2VkKCk7CisgICAgSGFzaFNldDxSZW5k
ZXJPYmplY3QqPiBub3RsYXlvdXRlZE9iamVjdHM7CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCog
Y2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkgeworICAgICAgICBib29sIG5lZWRzTGF5b3V0ID0gc2VsZk5lZWRzTGF5b3V0Owor
CisgICAgICAgIGlmIChsYXlvdXRTaXplQ2hhbmdlZCkgeworICAgICAgICAgICAgLy8gV2hlbiBz
ZWxmTmVlZHNMYXlvdXQgaXMgZmFsc2UgYW5kIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkLCB3ZSBo
YXZlIHRvIGNoZWNrIHdoZXRoZXIgdGhpcyBjaGlsZCB1c2VzIHJlbGF0aXZlIGxlbmd0aHMKKyAg
ICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBlbGVtZW50ID0gY2hpbGQtPm5vZGUoKS0+aXNTVkdF
bGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGQtPm5vZGUoKSkgOiAwKSB7
CisgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzU3R5bGVkKCkgJiYgc3RhdGljX2Nhc3Q8
U1ZHU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkIGFuZCB3aGVu
IHVzaW5nIHJlbGF0aXZlIHZhbHVlcyB0ZWxsIHRoZSBSZW5kZXJTVkdQYXRoIHRvIHVwZGF0ZSBp
dHMgUGF0aCBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1NWR1BhdGgo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyU1ZHUGF0aChjaGlsZCktPnNldE5l
ZWRzUGF0aFVwZGF0ZSgpOworCisgICAgICAgICAgICAgICAgICAgIG5lZWRzTGF5b3V0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobmVlZHNMYXlvdXQpIHsKKyAgICAgICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91dCh0
cnVlLCBmYWxzZSk7CisgICAgICAgICAgICBjaGlsZC0+bGF5b3V0KCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpZiAoY2hpbGQtPm5lZWRzTGF5b3V0KCkpCisgICAgICAgICAgICAg
ICAgY2hpbGQtPmxheW91dCgpOworICAgICAgICAgICAgZWxzZSBpZiAobGF5b3V0U2l6ZUNoYW5n
ZWQpCisgICAgICAgICAgICAgICAgbm90bGF5b3V0ZWRPYmplY3RzLmFkZChjaGlsZCk7CisgICAg
ICAgIH0KKworICAgICAgICBBU1NFUlQoIWNoaWxkLT5uZWVkc0xheW91dCgpKTsKKyAgICB9CisK
KyAgICBpZiAoIWxheW91dFNpemVDaGFuZ2VkKSB7CisgICAgICAgIEFTU0VSVChub3RsYXlvdXRl
ZE9iamVjdHMuaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElm
IHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkLCBpbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgYWxs
IGNoaWxkcmVuIHRoYXQgZGlkbid0IGdvIHRocm91Z2ggdGhlIGxheW91dCgpIGNvZGUgcGF0aC4K
KyAgICBIYXNoU2V0PFJlbmRlck9iamVjdCo+OjppdGVyYXRvciBlbmQgPSBub3RsYXlvdXRlZE9i
amVjdHMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlbmRlck9iamVjdCo+OjppdGVyYXRvciBp
dCA9IG5vdGxheW91dGVkT2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
IGludmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKCppdCk7Cit9CisKK2Jvb2wgU1ZHUmVuZGVy
U3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sK
KyAgICAvLyBTVkcgZG9lc24ndCBzdXBwb3J0IGluZGVwZW5kZW50IHgveSBvdmVyZmxvdworICAg
IEFTU0VSVChvYmplY3QtPnN0eWxlKCktPm92ZXJmbG93WCgpID09IG9iamVjdC0+c3R5bGUoKS0+
b3ZlcmZsb3dZKCkpOworCisgICAgLy8gT1NDUk9MTCBpcyBuZXZlciBzZXQgZm9yIFNWRyAtIHNl
ZSBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZQorICAgIEFTU0VSVChvYmplY3Qt
PnN0eWxlKCktPm92ZXJmbG93WCgpICE9IE9TQ1JPTEwpOworCisgICAgLy8gUmVuZGVyU1ZHUm9v
dCBzaG91bGQgbmV2ZXIgcXVlcnkgZm9yIG92ZXJmbG93IHN0YXRlIC0gaXQgc2hvdWxkIGFsd2F5
cyBjbGlwIGl0c2VsZiB0byB0aGUgaW5pdGlhbCB2aWV3cG9ydCBzaXplLgorICAgIEFTU0VSVCgh
b2JqZWN0LT5pc1Jvb3QoKSk7CisKKyAgICByZXR1cm4gb2JqZWN0LT5zdHlsZSgpLT5vdmVyZmxv
d1goKSA9PSBPSElEREVOOworfQorCit2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJl
cGFpbnRSZWN0V2l0aFJlc291cmNlcyhjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgRmxvYXRS
ZWN0JiByZXBhaW50UmVjdCkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKworICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKKyAgICBBU1NFUlQoc3R5bGUpOworCisgICAg
Y29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CisgICAg
QVNTRVJUKHN2Z1N0eWxlKTsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb25zdF9j
YXN0PFJlbmRlck9iamVjdCo+KG9iamVjdCk7CisgICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMg
PSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHJlbmRl
cmVyKTsKKyAgICBpZiAoIXJlc291cmNlcykgeworICAgICAgICBpZiAoY29uc3QgU2hhZG93RGF0
YSogc2hhZG93ID0gc3ZnU3R5bGUtPnNoYWRvdygpKQorICAgICAgICAgICAgc2hhZG93LT5hZGp1
c3RSZWN0Rm9yU2hhZG93KHJlcGFpbnRSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
I2lmIEVOQUJMRShGSUxURVJTKQorICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciogZmls
dGVyID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkKKyAgICAgICAgcmVwYWludFJlY3QgPSBmaWx0ZXIt
PnJlc291cmNlQm91bmRpbmdCb3gocmVuZGVyZXIpOworI2VuZGlmCisKKyAgICBpZiAoUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gcmVzb3VyY2VzLT5jbGlwcGVyKCkpCisgICAg
ICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChjbGlwcGVyLT5yZXNvdXJjZUJvdW5kaW5nQm94KHJl
bmRlcmVyKSk7CisKKyAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9IHJl
c291cmNlcy0+bWFza2VyKCkpCisgICAgICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChtYXNrZXIt
PnJlc291cmNlQm91bmRpbmdCb3gocmVuZGVyZXIpKTsKKworICAgIGlmIChjb25zdCBTaGFkb3dE
YXRhKiBzaGFkb3cgPSBzdmdTdHlsZS0+c2hhZG93KCkpCisgICAgICAgIHNoYWRvdy0+YWRqdXN0
UmVjdEZvclNoYWRvdyhyZXBhaW50UmVjdCk7Cit9CisKK2Jvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6
cG9pbnRJbkNsaXBwaW5nQXJlYShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpCit7CisgICAgQVNTRVJUKG9iamVjdCk7CisKKyAgICAvLyBXZSBqdXN0IHRha2Ug
Y2xpcHBlcnMgaW50byBhY2NvdW50IHRvIGRldGVybWluZSBpZiBhIHBvaW50IGlzIG9uIHRoZSBu
b2RlLiBUaGUgU3BlY2lmaWNhdGlvbiBtYXkKKyAgICAvLyBjaGFuZ2UgbGF0ZXIgYW5kIHdlIGFs
c28gbmVlZCB0byBjaGVjayBtYXNrZXJzLgorICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0g
U1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChvYmplY3Qp
OworICAgIGlmICghcmVzb3VyY2VzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSByZXNvdXJjZXMtPmNsaXBwZXIoKSkK
KyAgICAgICAgcmV0dXJuIGNsaXBwZXItPmhpdFRlc3RDbGlwQ29udGVudChvYmplY3QtPm9iamVj
dEJvdW5kaW5nQm94KCksIHBvaW50KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNW
R1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlck9iamVjdCog
b2JqZWN0KQoreworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBBU1NFUlQoc3R5bGUpOworICAg
IEFTU0VSVChvYmplY3QpOworICAgIEFTU0VSVChvYmplY3QtPm5vZGUoKSk7CisgICAgQVNTRVJU
KG9iamVjdC0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3ZnU3R5bGUp
OworCisgICAgU1ZHRWxlbWVudCogbGVuZ3RoQ29udGV4dCA9IHN0YXRpY19jYXN0PFNWR0VsZW1l
bnQqPihvYmplY3QtPm5vZGUoKSk7CisgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHN2
Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKGxlbmd0aENvbnRleHQpKTsKKyAgICBjb250ZXh0
LT5zZXRMaW5lQ2FwKHN2Z1N0eWxlLT5jYXBTdHlsZSgpKTsKKyAgICBjb250ZXh0LT5zZXRMaW5l
Sm9pbihzdmdTdHlsZS0+am9pblN0eWxlKCkpOworICAgIGlmIChzdmdTdHlsZS0+am9pblN0eWxl
KCkgPT0gTWl0ZXJKb2luKQorICAgICAgICBjb250ZXh0LT5zZXRNaXRlckxpbWl0KHN2Z1N0eWxl
LT5zdHJva2VNaXRlckxpbWl0KCkpOworCisgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD4mIGRh
c2hlcyA9IHN2Z1N0eWxlLT5zdHJva2VEYXNoQXJyYXkoKTsKKyAgICBpZiAoZGFzaGVzLmlzRW1w
dHkoKSkKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOworICAg
IGVsc2UgeworICAgICAgICBEYXNoQXJyYXkgZGFzaEFycmF5OworICAgICAgICBjb25zdCBWZWN0
b3I8U1ZHTGVuZ3RoPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGFzaGVzLmVuZCgpOworICAgICAg
ICBmb3IgKFZlY3RvcjxTVkdMZW5ndGg+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhc2hlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBkYXNoQXJyYXkuYXBwZW5kKCgqaXQp
LnZhbHVlKGxlbmd0aENvbnRleHQpKTsKKworICAgICAgICBjb250ZXh0LT5zZXRMaW5lRGFzaChk
YXNoQXJyYXksIHN2Z1N0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCkudmFsdWUobGVuZ3RoQ29udGV4
dCkpOworICAgIH0KK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCShyZXZpc2lvbiA3NTM0NSkJKGZyb20g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaDo3NTM0NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHUmVuZGVyU3VwcG9y
dF9oCisjZGVmaW5lIFNWR1JlbmRlclN1cHBvcnRfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNs
dWRlICJQYWludEluZm8uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFBv
aW50OworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBSZW5kZXJC
b3hNb2RlbE9iamVjdDsKK2NsYXNzIFJlbmRlck9iamVjdDsKK2NsYXNzIFJlbmRlclN0eWxlOwor
Y2xhc3MgUmVuZGVyU1ZHUm9vdDsKK2NsYXNzIFRyYW5zZm9ybVN0YXRlOworCisvLyBTVkdSZW5k
ZXJlclN1cHBvcnQgaXMgYSBoZWxwZXIgY2xhc3Mgc2hhcmluZyBjb2RlIGJldHdlZW4gYWxsIFNW
RyByZW5kZXJlcnMuCitjbGFzcyBTVkdSZW5kZXJTdXBwb3J0IHsKK3B1YmxpYzoKKyAgICAvLyBV
c2VkIGJ5IGFsbCBTVkcgcmVuZGVyZXJzIHdobyBhcHBseSBjbGlwL2ZpbHRlci9ldGMuIHJlc291
cmNlcyB0byB0aGUgcmVuZGVyZXIgY29udGVudAorICAgIHN0YXRpYyBib29sIHByZXBhcmVUb1Jl
bmRlclNWR0NvbnRlbnQoUmVuZGVyT2JqZWN0KiwgUGFpbnRJbmZvJik7CisgICAgc3RhdGljIHZv
aWQgZmluaXNoUmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqLCBQYWludEluZm8mLCBHcmFw
aGljc0NvbnRleHQqIHNhdmVkQ29udGV4dCk7CisKKyAgICAvLyBTaGFyZXMgY2hpbGQgbGF5b3V0
aW5nIGNvZGUgYmV0d2VlbiBSZW5kZXJTVkdSb290L1JlbmRlclNWRyhIaWRkZW4pQ29udGFpbmVy
CisgICAgc3RhdGljIHZvaWQgbGF5b3V0Q2hpbGRyZW4oUmVuZGVyT2JqZWN0KiwgYm9vbCBzZWxm
TmVlZHNMYXlvdXQpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGRldGVybWluaW5nIHdoZXRl
ciBvdmVyZmxvdyBpcyBoaWRkZW4KKyAgICBzdGF0aWMgYm9vbCBpc092ZXJmbG93SGlkZGVuKGNv
bnN0IFJlbmRlck9iamVjdCopOworCisgICAgLy8gQ2FsY3VsYXRlcyB0aGUgcmVwYWludFJlY3Qg
aW4gY29tYmluYXRpb24gd2l0aCBmaWx0ZXIsIGNsaXBwZXIgYW5kIG1hc2tlciBpbiBsb2NhbCBj
b29yZGluYXRlcy4KKyAgICBzdGF0aWMgdm9pZCBpbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNv
dXJjZXMoY29uc3QgUmVuZGVyT2JqZWN0KiwgRmxvYXRSZWN0Jik7CisKKyAgICAvLyBEZXRlcm1p
bmVzIHdoZXRoZXIgdGhlIHBhc3NlZCBwb2ludCBsaWVzIGluIGEgY2xpcHBpbmcgYXJlYQorICAg
IHN0YXRpYyBib29sIHBvaW50SW5DbGlwcGluZ0FyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgRmxv
YXRQb2ludCYpOworCisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94
ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRp
bmdCb3gsIEZsb2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJv
dW5kaW5nQm94KTsKKyAgICBzdGF0aWMgYm9vbCBwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiBsb2NhbFJlcGFpbnRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGxvY2FsVHJhbnNmb3JtLCBjb25zdCBQYWludEluZm8mKTsKKworICAgIC8vIEltcG9ydGFu
dCBmdW5jdGlvbnMgdXNlZCBieSBuZWFybHkgYWxsIFNWRyByZW5kZXJlcnMgY2VudHJhbGl6aW5n
IGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb25zIC8gcmVwYWludCByZWN0IGNhbGN1bGF0aW9ucwor
ICAgIHN0YXRpYyBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlck9i
amVjdCosIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKKyAgICBzdGF0
aWMgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmLCBib29sIGZpeGVkKTsKKyAgICBz
dGF0aWMgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCosIFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIHVzZVRyYW5zZm9ybXMsIGJv
b2wgZml4ZWQsIFRyYW5zZm9ybVN0YXRlJik7CisKKyAgICAvLyBTaGFyZWQgYmV0d2VlbiBTVkcg
cmVuZGVyZXJzIGFuZCByZXNvdXJjZXMuCisgICAgc3RhdGljIHZvaWQgYXBwbHlTdHJva2VTdHls
ZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJl
bmRlck9iamVjdCopOworCisgICAgLy8gRklYTUU6IFRoZXNlIG1ldGhvZHMgZG8gbm90IGJlbG9u
ZyBoZXJlLgorICAgIHN0YXRpYyBjb25zdCBSZW5kZXJTVkdSb290KiBmaW5kVHJlZVJvb3RPYmpl
Y3QoY29uc3QgUmVuZGVyT2JqZWN0Kik7CisKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBjbGFzcyBp
cyBub3QgY29uc3RydWN0YWJsZS4KKyAgICBTVkdSZW5kZXJTdXBwb3J0KCk7CisgICAgflNWR1Jl
bmRlclN1cHBvcnQoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShTVkcpCisjZW5kaWYgLy8gU1ZHUmVuZGVyU3VwcG9ydF9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJ
KHJldmlzaW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5jcHA6NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICogICAgICAgICAgIChDKSAyMDA2IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCisKKyNpbmNs
dWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
SW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUgIkxpbmVhckdyYWRpZW50QXR0cmlidXRlcy5oIgor
I2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRl
ICJQYXR0ZXJuQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIlJhZGlhbEdyYWRpZW50QXR0cmlidXRl
cy5oIgorI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFp
bmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHSW1hZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVUZXh0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHUGF0aC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5o
IgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCisjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTGluZWFy
R3JhZGllbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgorI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5o
IgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgorI2luY2x1ZGUgIlJl
bmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyVHJlZUFzVGV4dC5oIgorI2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdFbGxpcHNlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIKKyNp
bmNsdWRlICJTVkdMaW5lRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0xpbmVhckdyYWRpZW50RWxl
bWVudC5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJTVkdQYXRoUGFyc2VyRmFjdG9yeS5oIgorI2luY2x1ZGUgIlNWR1BhdHRl
cm5FbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCisjaW5jbHVkZSAiU1ZHUG9s
eUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJTVkdSZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKKyNp
bmNsdWRlICJTVkdTdG9wRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIK
KworI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKiogY2xhc3Mg
KyBpb21hbmlwIHRvIGhlbHAgc3RyZWFtaW5nIGxpc3Qgc2VwYXJhdG9ycywgaS5lLiAiLCAiIGlu
IHN0cmluZyAiYSwgYiwgYywgZCIKKyAqIENhbiBiZSB1c2VkIGluIGNhc2VzIHdoZXJlIHlvdSBk
b24ndCBrbm93IHdoaWNoIGl0ZW0gaW4gdGhlIGxpc3QgaXMgdGhlIGZpcnN0CisgKiBvbmUgdG8g
YmUgcHJpbnRlZCwgYnV0IHN0aWxsIHdhbnQgdG8gYXZvaWQgc3RyaW5ncyBsaWtlICIsIGIsIGMi
LgorICovCitjbGFzcyBUZXh0U3RyZWFtU2VwYXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUZXh0U3Ry
ZWFtU2VwYXJhdG9yKGNvbnN0IFN0cmluZyYgcykKKyAgICAgICAgOiBtX3NlcGFyYXRvcihzKQor
ICAgICAgICAsIG1fbmVlZFRvU2VwYXJhdGUoZmFsc2UpCisgICAgeworICAgIH0KKworcHJpdmF0
ZToKKyAgICBmcmllbmQgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgVGV4dFN0
cmVhbVNlcGFyYXRvciYpOworCisgICAgU3RyaW5nIG1fc2VwYXJhdG9yOworICAgIGJvb2wgbV9u
ZWVkVG9TZXBhcmF0ZTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIFRleHRTdHJlYW1TZXBhcmF0b3ImIHNlcCkKK3sKKyAgICBpZiAoc2VwLm1fbmVlZFRvU2Vw
YXJhdGUpCisgICAgICAgIHRzIDw8IHNlcC5tX3NlcGFyYXRvcjsKKyAgICBlbHNlCisgICAgICAg
IHNlcC5tX25lZWRUb1NlcGFyYXRlID0gdHJ1ZTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlVHlwZT4KK3N0YXRpYyB2b2lkIHdyaXRlTmFtZVZhbHVlUGFpcihU
ZXh0U3RyZWFtJiB0cywgY29uc3QgY2hhciogbmFtZSwgVmFsdWVUeXBlIHZhbHVlKQoreworICAg
IHRzIDw8ICIgWyIgPDwgbmFtZSA8PCAiPSIgPDwgdmFsdWUgPDwgIl0iOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+CitzdGF0aWMgdm9pZCB3cml0ZU5hbWVBbmRRdW90ZWRWYWx1
ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgY2hhciogbmFtZSwgVmFsdWVUeXBlIHZhbHVlKQorewor
ICAgIHRzIDw8ICIgWyIgPDwgbmFtZSA8PCAiPVwiIiA8PCB2YWx1ZSA8PCAiXCJdIjsKK30KKwor
c3RhdGljIHZvaWQgd3JpdGVJZk5vdEVtcHR5KFRleHRTdHJlYW0mIHRzLCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKQor
ICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsIG5hbWUsIHZhbHVlKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVmFsdWVUeXBlPgorc3RhdGljIHZvaWQgd3JpdGVJZk5vdERlZmF1bHQoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IGNoYXIqIG5hbWUsIFZhbHVlVHlwZSB2YWx1ZSwgVmFsdWVUeXBl
IGRlZmF1bHRWYWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgIT0gZGVmYXVsdFZhbHVlKQorICAgICAg
ICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsIG5hbWUsIHZhbHVlKTsKK30KKworVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRSZWN0ICZyKQoreworICAgIHRz
IDw8ICJhdCAoIjsgCisgICAgaWYgKGhhc0ZyYWN0aW9ucyhyLngoKSkpIAorICAgICAgICB0cyA8
PCByLngoKTsKKyAgICBlbHNlIAorICAgICAgICB0cyA8PCBpbnQoci54KCkpOworICAgIHRzIDw8
ICIsIjsKKyAgICBpZiAoaGFzRnJhY3Rpb25zKHIueSgpKSkgCisgICAgICAgIHRzIDw8IHIueSgp
OworICAgIGVsc2UgCisgICAgICAgIHRzIDw8IGludChyLnkoKSk7CisgICAgdHMgPDwgIikgc2l6
ZSAiOworICAgIGlmIChoYXNGcmFjdGlvbnMoci53aWR0aCgpKSkgCisgICAgICAgIHRzIDw8IHIu
d2lkdGgoKTsgCisgICAgZWxzZSAKKyAgICAgICAgdHMgPDwgaW50KHIud2lkdGgoKSk7IAorICAg
IHRzIDw8ICJ4IjsKKyAgICBpZiAoaGFzRnJhY3Rpb25zKHIuaGVpZ2h0KCkpKSAKKyAgICAgICAg
dHMgPDwgci5oZWlnaHQoKTsKKyAgICBlbHNlIAorICAgICAgICB0cyA8PCBpbnQoci5oZWlnaHQo
KSk7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAodHJh
bnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgdHMgPDwgImlkZW50aXR5IjsKKyAgICBlbHNl
CisgICAgICAgIHRzIDw8ICJ7bT0oKCIKKyAgICAgICAgICAgPDwgdHJhbnNmb3JtLmEoKSA8PCAi
LCIgPDwgdHJhbnNmb3JtLmIoKQorICAgICAgICAgICA8PCAiKSgiCisgICAgICAgICAgIDw8IHRy
YW5zZm9ybS5jKCkgPDwgIiwiIDw8IHRyYW5zZm9ybS5kKCkKKyAgICAgICAgICAgPDwgIikpIHQ9
KCIKKyAgICAgICAgICAgPDwgdHJhbnNmb3JtLmUoKSA8PCAiLCIgPDwgdHJhbnNmb3JtLmYoKQor
ICAgICAgICAgICA8PCAiKX0iOworCisgICAgcmV0dXJuIHRzOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgV2luZFJ1bGUgcnVsZSkKK3sK
KyAgICBzd2l0Y2ggKHJ1bGUpIHsKKyAgICBjYXNlIFJVTEVfTk9OWkVSTzoKKyAgICAgICAgdHMg
PDwgIk5PTi1aRVJPIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSVUxFX0VWRU5PREQ6Cisg
ICAgICAgIHRzIDw8ICJFVkVOLU9ERCI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiB0czsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUmIHVuaXRUeXBlKQoreworICAgIHN3
aXRjaCAodW5pdFR5cGUpIHsKKyAgICBjYXNlIFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9V
TktOT1dOOgorICAgICAgICB0cyA8PCAidW5rbm93biI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFOgorICAgICAgICB0
cyA8PCAidXNlclNwYWNlT25Vc2UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNWR1VuaXRU
eXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDoKKyAgICAgICAgdHMgPDwgIm9i
amVjdEJvdW5kaW5nQm94IjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRz
OworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU1ZHTWFya2VyRWxlbWVudDo6U1ZHTWFya2VyVW5pdHNUeXBlJiBtYXJrZXJVbml0KQorewor
ICAgIHN3aXRjaCAobWFya2VyVW5pdCkgeworICAgIGNhc2UgU1ZHTWFya2VyRWxlbWVudDo6U1ZH
X01BUktFUlVOSVRTX1VOS05PV046CisgICAgICAgIHRzIDw8ICJ1bmtub3duIjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTVkdNYXJrZXJFbGVtZW50OjpTVkdfTUFSS0VSVU5JVFNfVVNFUlNQ
QUNFT05VU0U6CisgICAgICAgIHRzIDw8ICJ1c2VyU3BhY2VPblVzZSI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgU1ZHTWFya2VyRWxlbWVudDo6U1ZHX01BUktFUlVOSVRTX1NUUk9LRVdJRFRI
OgorICAgICAgICB0cyA8PCAic3Ryb2tlV2lkdGgiOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENvbG9yJiBjKQoreworICAgIHJldHVybiB0cyA8PCBjLm5hbWUoKTsKK30KKwor
Ly8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIEtDYW52YXNSZW5kZXJpbmdTdHlsZS5j
cHAKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
YXNoQXJyYXkmIGEpCit7CisgICAgdHMgPDwgInsiOworICAgIERhc2hBcnJheTo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gYS5lbmQoKTsKKyAgICBmb3IgKERhc2hBcnJheTo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBhLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQgIT0gYS5i
ZWdpbigpKQorICAgICAgICAgICAgdHMgPDwgIiwgIjsKKyAgICAgICAgdHMgPDwgKml0OworICAg
IH0KKyAgICB0cyA8PCAifSI7CisgICAgcmV0dXJuIHRzOworfQorCisvLyBGSVhNRTogTWF5YmUg
dGhpcyBzaG91bGQgYmUgaW4gR3JhcGhpY3NUeXBlcy5jcHAKK3N0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lQ2FwIHN0eWxlKQoreworICAgIHN3aXRjaCAo
c3R5bGUpIHsKKyAgICBjYXNlIEJ1dHRDYXA6CisgICAgICAgIHRzIDw8ICJCVVRUIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBSb3VuZENhcDoKKyAgICAgICAgdHMgPDwgIlJPVU5EIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBTcXVhcmVDYXA6CisgICAgICAgIHRzIDw8ICJTUVVBUkUi
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCisvLyBGSVhNRTog
TWF5YmUgdGhpcyBzaG91bGQgYmUgaW4gR3JhcGhpY3NUeXBlcy5jcHAKK3N0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBzdHlsZSkKK3sKKyAgICBz
d2l0Y2ggKHN0eWxlKSB7CisgICAgY2FzZSBNaXRlckpvaW46CisgICAgICAgIHRzIDw8ICJNSVRF
UiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUm91bmRKb2luOgorICAgICAgICB0cyA8PCAi
Uk9VTkQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJldmVsSm9pbjoKKyAgICAgICAgdHMg
PDwgIkJFVkVMIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30KKwor
Ly8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIEdyYWRpZW50LmNwcAorc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEdyYWRpZW50U3ByZWFkTWV0aG9k
IG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBTcHJlYWRNZXRob2RQYWQ6
CisgICAgICAgIHRzIDw8ICJQQUQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNwcmVhZE1l
dGhvZFJlcGVhdDoKKyAgICAgICAgdHMgPDwgIlJFUEVBVCI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU3ByZWFkTWV0aG9kUmVmbGVjdDoKKyAgICAgICAgdHMgPDwgIlJFRkxFQ1QiOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHM7Cit9CisKK3N0YXRpYyB2b2lkIHdy
aXRlU1ZHUGFpbnRpbmdSZXNvdXJjZShUZXh0U3RyZWFtJiB0cywgUmVuZGVyU1ZHUmVzb3VyY2Uq
IHJlc291cmNlKQoreworICAgIGlmIChyZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gU29saWRD
b2xvclJlc291cmNlVHlwZSkgeworICAgICAgICB0cyA8PCAiW3R5cGU9U09MSURdIFtjb2xvcj0i
IDw8IHN0YXRpY19jYXN0PFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcio+KHJlc291cmNlKS0+
Y29sb3IoKSA8PCAiXSI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBbGwgb3Ro
ZXIgcmVzb3VyY2VzIGRlcml2ZSBmcm9tIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyCisgICAg
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGNvbnRhaW5lciA9IHN0YXRpY19jYXN0PFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyKj4ocmVzb3VyY2UpOworICAgIE5vZGUqIG5vZGUgPSBjb250
YWluZXItPm5vZGUoKTsKKyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKG5vZGUtPmlzU1ZH
RWxlbWVudCgpKTsKKworICAgIGlmIChyZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gUGF0dGVy
blJlc291cmNlVHlwZSkKKyAgICAgICAgdHMgPDwgIlt0eXBlPVBBVFRFUk5dIjsKKyAgICBlbHNl
IGlmIChyZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5
cGUpCisgICAgICAgIHRzIDw8ICJbdHlwZT1MSU5FQVItR1JBRElFTlRdIjsKKyAgICBlbHNlIGlm
IChyZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGUp
CisgICAgICAgIHRzIDw8ICJbdHlwZT1SQURJQUwtR1JBRElFTlRdIjsKKworICAgIHRzIDw8ICIg
W2lkPVwiIiA8PCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSktPmdldElkQXR0cmlidXRl
KCkgPDwgIlwiXSI7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQoreworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSA9IG9iamVjdC5zdHlsZSgpOworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHls
ZSA9IHN0eWxlLT5zdmdTdHlsZSgpOworCisgICAgaWYgKCFvYmplY3QubG9jYWxUcmFuc2Zvcm0o
KS5pc0lkZW50aXR5KCkpCisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInRyYW5zZm9y
bSIsIG9iamVjdC5sb2NhbFRyYW5zZm9ybSgpKTsKKyAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywg
ImltYWdlIHJlbmRlcmluZyIsIHN2Z1N0eWxlLT5pbWFnZVJlbmRlcmluZygpLCBTVkdSZW5kZXJT
dHlsZTo6aW5pdGlhbEltYWdlUmVuZGVyaW5nKCkpOworICAgIHdyaXRlSWZOb3REZWZhdWx0KHRz
LCAib3BhY2l0eSIsIHN0eWxlLT5vcGFjaXR5KCksIFJlbmRlclN0eWxlOjppbml0aWFsT3BhY2l0
eSgpKTsKKyAgICBpZiAob2JqZWN0LmlzU1ZHUGF0aCgpKSB7CisgICAgICAgIGNvbnN0IFJlbmRl
clNWR1BhdGgmIHBhdGggPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoJj4ob2JqZWN0
KTsKKyAgICAgICAgQVNTRVJUKHBhdGgubm9kZSgpKTsKKyAgICAgICAgQVNTRVJUKHBhdGgubm9k
ZSgpLT5pc1NWR0VsZW1lbnQoKSk7CisKKyAgICAgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAg
ICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVu
ZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJT
VkdQYXRoKj4oJnBhdGgpLCBwYXRoLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAg
ICAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKKyAgICAgICAgICAgIHRzIDw8ICIgW3N0
cm9rZT17IiA8PCBzOworICAgICAgICAgICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNlKHRzLCBz
dHJva2VQYWludGluZ1Jlc291cmNlKTsKKworICAgICAgICAgICAgU1ZHRWxlbWVudCogZWxlbWVu
dCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXRoLm5vZGUoKSk7CisgICAgICAgICAgICBk
b3VibGUgZGFzaE9mZnNldCA9IHN2Z1N0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCkudmFsdWUoZWxl
bWVudCk7CisgICAgICAgICAgICBkb3VibGUgc3Ryb2tlV2lkdGggPSBzdmdTdHlsZS0+c3Ryb2tl
V2lkdGgoKS52YWx1ZShlbGVtZW50KTsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdMZW5n
dGg+JiBkYXNoZXMgPSBzdmdTdHlsZS0+c3Ryb2tlRGFzaEFycmF5KCk7CisKKyAgICAgICAgICAg
IERhc2hBcnJheSBkYXNoQXJyYXk7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHTGVuZ3Ro
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGFzaGVzLmVuZCgpOworICAgICAgICAgICAgZm9yIChW
ZWN0b3I8U1ZHTGVuZ3RoPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXNoZXMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICAgICAgICAgIGRhc2hBcnJheS5hcHBlbmQoKCppdCkudmFs
dWUoZWxlbWVudCkpOworCisgICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNp
dHkiLCBzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpLCAxLjBmKTsKKyAgICAgICAgICAgIHdyaXRl
SWZOb3REZWZhdWx0KHRzLCAic3Ryb2tlIHdpZHRoIiwgc3Ryb2tlV2lkdGgsIDEuMCk7CisgICAg
ICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm1pdGVyIGxpbWl0Iiwgc3ZnU3R5bGUtPnN0
cm9rZU1pdGVyTGltaXQoKSwgNC4wZik7CisgICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0
cywgImxpbmUgY2FwIiwgc3ZnU3R5bGUtPmNhcFN0eWxlKCksIEJ1dHRDYXApOworICAgICAgICAg
ICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJsaW5lIGpvaW4iLCBzdmdTdHlsZS0+am9pblN0eWxl
KCksIE1pdGVySm9pbik7CisgICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImRhc2gg
b2Zmc2V0IiwgZGFzaE9mZnNldCwgMC4wKTsKKyAgICAgICAgICAgIGlmICghZGFzaEFycmF5Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJkYXNoIGFy
cmF5IiwgZGFzaEFycmF5KTsKKworICAgICAgICAgICAgdHMgPDwgIn1dIjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBS
ZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJT
VkdQYXRoKj4oJnBhdGgpLCBwYXRoLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAg
ICAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKKyAgICAgICAgICAgIHRzIDw8ICIgW2Zp
bGw9eyIgPDwgczsKKyAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgZmls
bFBhaW50aW5nUmVzb3VyY2UpOworCisgICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywg
Im9wYWNpdHkiLCBzdmdTdHlsZS0+ZmlsbE9wYWNpdHkoKSwgMS4wZik7CisgICAgICAgICAgICB3
cml0ZUlmTm90RGVmYXVsdCh0cywgImZpbGwgcnVsZSIsIHN2Z1N0eWxlLT5maWxsUnVsZSgpLCBS
VUxFX05PTlpFUk8pOworICAgICAgICAgICAgdHMgPDwgIn1dIjsKKyAgICAgICAgfQorICAgICAg
ICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImNsaXAgcnVsZSIsIHN2Z1N0eWxlLT5jbGlwUnVsZSgp
LCBSVUxFX05PTlpFUk8pOworICAgIH0KKworICAgIHdyaXRlSWZOb3RFbXB0eSh0cywgInN0YXJ0
IG1hcmtlciIsIHN2Z1N0eWxlLT5tYXJrZXJTdGFydFJlc291cmNlKCkpOworICAgIHdyaXRlSWZO
b3RFbXB0eSh0cywgIm1pZGRsZSBtYXJrZXIiLCBzdmdTdHlsZS0+bWFya2VyTWlkUmVzb3VyY2Uo
KSk7CisgICAgd3JpdGVJZk5vdEVtcHR5KHRzLCAiZW5kIG1hcmtlciIsIHN2Z1N0eWxlLT5tYXJr
ZXJFbmRSZXNvdXJjZSgpKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIHdyaXRlUG9zaXRpb25B
bmRTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCit7Cisg
ICAgdHMgPDwgIiAiIDw8IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4ob2JqZWN0KS5hYnNvbHV0
ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKKyAgICB3cml0ZVN0eWxlKHRzLCBvYmplY3QpOworICAg
IHJldHVybiB0czsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlclNWR1BhdGgmIHBhdGgpCit7CisgICAgd3JpdGVQb3NpdGlvbkFu
ZFN0eWxlKHRzLCBwYXRoKTsKKworICAgIEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50
KCkpOworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4ocGF0aC5ub2RlKCkpOworCisgICAgaWYgKHN2Z0VsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OnJlY3RUYWcpKSB7CisgICAgICAgIFNWR1JlY3RFbGVtZW50KiBlbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHUmVjdEVsZW1lbnQqPihzdmdFbGVtZW50KTsKKyAgICAgICAgd3JpdGVOYW1lVmFs
dWVQYWlyKHRzLCAieCIsIGVsZW1lbnQtPngoKS52YWx1ZShlbGVtZW50KSk7CisgICAgICAgIHdy
aXRlTmFtZVZhbHVlUGFpcih0cywgInkiLCBlbGVtZW50LT55KCkudmFsdWUoZWxlbWVudCkpOwor
ICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ3aWR0aCIsIGVsZW1lbnQtPndpZHRoKCku
dmFsdWUoZWxlbWVudCkpOworICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJoZWlnaHQi
LCBlbGVtZW50LT5oZWlnaHQoKS52YWx1ZShlbGVtZW50KSk7CisgICAgfSBlbHNlIGlmIChzdmdF
bGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpsaW5lVGFnKSkgeworICAgICAgICBTVkdMaW5l
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0xpbmVFbGVtZW50Kj4oc3ZnRWxlbWVu
dCk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgIngxIiwgZWxlbWVudC0+eDEoKS52
YWx1ZShlbGVtZW50KSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInkxIiwgZWxl
bWVudC0+eTEoKS52YWx1ZShlbGVtZW50KSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0
cywgIngyIiwgZWxlbWVudC0+eDIoKS52YWx1ZShlbGVtZW50KSk7CisgICAgICAgIHdyaXRlTmFt
ZVZhbHVlUGFpcih0cywgInkyIiwgZWxlbWVudC0+eTIoKS52YWx1ZShlbGVtZW50KSk7CisgICAg
fSBlbHNlIGlmIChzdmdFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjplbGxpcHNlVGFnKSkg
eworICAgICAgICBTVkdFbGxpcHNlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0Vs
bGlwc2VFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0
cywgImN4IiwgZWxlbWVudC0+Y3goKS52YWx1ZShlbGVtZW50KSk7CisgICAgICAgIHdyaXRlTmFt
ZVZhbHVlUGFpcih0cywgImN5IiwgZWxlbWVudC0+Y3koKS52YWx1ZShlbGVtZW50KSk7CisgICAg
ICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInJ4IiwgZWxlbWVudC0+cngoKS52YWx1ZShlbGVt
ZW50KSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInJ5IiwgZWxlbWVudC0+cnko
KS52YWx1ZShlbGVtZW50KSk7CisgICAgfSBlbHNlIGlmIChzdmdFbGVtZW50LT5oYXNUYWdOYW1l
KFNWR05hbWVzOjpjaXJjbGVUYWcpKSB7CisgICAgICAgIFNWR0NpcmNsZUVsZW1lbnQqIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdDaXJjbGVFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CisgICAgICAg
IHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImN4IiwgZWxlbWVudC0+Y3goKS52YWx1ZShlbGVtZW50
KSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImN5IiwgZWxlbWVudC0+Y3koKS52
YWx1ZShlbGVtZW50KSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInIiLCBlbGVt
ZW50LT5yKCkudmFsdWUoZWxlbWVudCkpOworICAgIH0gZWxzZSBpZiAoc3ZnRWxlbWVudC0+aGFz
VGFnTmFtZShTVkdOYW1lczo6cG9seWdvblRhZykgfHwgc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShT
VkdOYW1lczo6cG9seWxpbmVUYWcpKSB7CisgICAgICAgIFNWR1BvbHlFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHUG9seUVsZW1lbnQqPihzdmdFbGVtZW50KTsKKyAgICAgICAgd3Jp
dGVOYW1lQW5kUXVvdGVkVmFsdWUodHMsICJwb2ludHMiLCBlbGVtZW50LT5wb2ludExpc3QoKS52
YWx1ZUFzU3RyaW5nKCkpOworICAgIH0gZWxzZSBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShT
VkdOYW1lczo6cGF0aFRhZykpIHsKKyAgICAgICAgU1ZHUGF0aEVsZW1lbnQqIGVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdQYXRoRWxlbWVudCo+KHN2Z0VsZW1lbnQpOworICAgICAgICBTdHJpbmcg
cGF0aFN0cmluZzsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzd2l0Y2ggdG8gVW5hbHRl
cmVkUGFyc2luZyBoZXJlIC0gdGhpcyB3aWxsIGFmZmVjdCB0aGUgcGF0aCBkdW1waW5nIG91dHB1
dCBvZiBkb3plbnMgb2YgdGVzdHMuCisgICAgICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpzZWxm
KCktPmJ1aWxkU3RyaW5nRnJvbUJ5dGVTdHJlYW0oZWxlbWVudC0+cGF0aEJ5dGVTdHJlYW0oKSwg
cGF0aFN0cmluZywgTm9ybWFsaXplZFBhcnNpbmcpOworICAgICAgICB3cml0ZU5hbWVBbmRRdW90
ZWRWYWx1ZSh0cywgImRhdGEiLCBwYXRoU3RyaW5nKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRzOworfQorCitzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUm9vdCYgcm9vdCkK
K3sKKyAgICByZXR1cm4gd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCByb290KTsKK30KKworc3Rh
dGljIHZvaWQgd3JpdGVSZW5kZXJTVkdUZXh0Qm94KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5k
ZXJCbG9jayYgdGV4dCkKK3sKKyAgICBTVkdSb290SW5saW5lQm94KiBib3ggPSBzdGF0aWNfY2Fz
dDxTVkdSb290SW5saW5lQm94Kj4odGV4dC5maXJzdFJvb3RCb3goKSk7CisgICAgaWYgKCFib3gp
CisgICAgICAgIHJldHVybjsKKworICAgIHRzIDw8ICIgYXQgKCIgPDwgdGV4dC54KCkgPDwgIiwi
IDw8IHRleHQueSgpIDw8ICIpIHNpemUgIiA8PCBib3gtPmxvZ2ljYWxXaWR0aCgpIDw8ICJ4IiA8
PCBib3gtPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMg
aGFjaywgb25jZSB0aGUgbmV3IHRleHQgbGF5b3V0IGVuZ2luZSBpcyBjb21wbGV0bHkgbGFuZGVk
LiBXZSB3YW50IHRvIHByZXNlcnZlIHRoZSBvbGQgbGF5b3V0IHRlc3QgcmVzdWx0cyBmb3Igbm93
LgorICAgIHRzIDw8ICIgY29udGFpbnMgMSBjaHVuayhzKSI7CisKKyAgICBpZiAodGV4dC5wYXJl
bnQoKSAmJiAodGV4dC5wYXJlbnQoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpICE9IHRleHQuc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpKSkKKyAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiY29sb3Ii
LCB0ZXh0LnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5u
YW1lKCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVTVkdJbmxpbmVUZXh0Qm94KFRl
eHRTdHJlYW0mIHRzLCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBpbnQgaW5kZW50KQorewor
ICAgIFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSB0ZXh0Qm94LT50ZXh0RnJh
Z21lbnRzKCk7CisgICAgaWYgKGZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFJlbmRlclNWR0lubGluZVRleHQqIHRleHRSZW5kZXJlciA9IHRvUmVuZGVyU1ZHSW5s
aW5lVGV4dCh0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKSk7CisgICAgQVNTRVJUKHRleHRSZW5kZXJl
cik7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSB0ZXh0UmVuZGVyZXIt
PnN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgU3RyaW5nIHRleHQgPSB0ZXh0Qm94LT50ZXh0UmVu
ZGVyZXIoKS0+dGV4dCgpOworCisgICAgdW5zaWduZWQgZnJhZ21lbnRzU2l6ZSA9IGZyYWdtZW50
cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYWdtZW50c1NpemU7ICsr
aSkgeworICAgICAgICBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkp
OworICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7CisKKyAgICAgICAgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQgPSBmcmFnbWVudC5wb3NpdGlvbkxpc3RPZmZzZXQ7CisgICAgICAgIHVu
c2lnbmVkIGVuZE9mZnNldCA9IGZyYWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldCArIGZyYWdtZW50
Lmxlbmd0aDsKKworICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgaGFjaywgb25jZSB0aGUg
bmV3IHRleHQgbGF5b3V0IGVuZ2luZSBpcyBjb21wbGV0bHkgbGFuZGVkLiBXZSB3YW50IHRvIHBy
ZXNlcnZlIHRoZSBvbGQgbGF5b3V0IHRlc3QgcmVzdWx0cyBmb3Igbm93LgorICAgICAgICB0cyA8
PCAiY2h1bmsgMSAiOworICAgICAgICBFVGV4dEFuY2hvciBhbmNob3IgPSBzdmdTdHlsZS0+dGV4
dEFuY2hvcigpOworICAgICAgICBib29sIGlzVmVydGljYWxUZXh0ID0gc3ZnU3R5bGUtPmlzVmVy
dGljYWxXcml0aW5nTW9kZSgpOworICAgICAgICBpZiAoYW5jaG9yID09IFRBX01JRERMRSkgewor
ICAgICAgICAgICAgdHMgPDwgIihtaWRkbGUgYW5jaG9yIjsKKyAgICAgICAgICAgIGlmIChpc1Zl
cnRpY2FsVGV4dCkKKyAgICAgICAgICAgICAgICB0cyA8PCAiLCB2ZXJ0aWNhbCI7CisgICAgICAg
ICAgICB0cyA8PCAiKSAiOworICAgICAgICB9IGVsc2UgaWYgKGFuY2hvciA9PSBUQV9FTkQpIHsK
KyAgICAgICAgICAgIHRzIDw8ICIoZW5kIGFuY2hvciI7CisgICAgICAgICAgICBpZiAoaXNWZXJ0
aWNhbFRleHQpCisgICAgICAgICAgICAgICAgdHMgPDwgIiwgdmVydGljYWwiOworICAgICAgICAg
ICAgdHMgPDwgIikgIjsKKyAgICAgICAgfSBlbHNlIGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAgICAg
ICAgICAgIHRzIDw8ICIodmVydGljYWwpICI7CisgICAgICAgIHN0YXJ0T2Zmc2V0IC09IHRleHRC
b3gtPnN0YXJ0KCk7CisgICAgICAgIGVuZE9mZnNldCAtPSB0ZXh0Qm94LT5zdGFydCgpOworICAg
ICAgICAvLyA8L2hhY2s+CisKKyAgICAgICAgdHMgPDwgInRleHQgcnVuICIgPDwgaSArIDEgPDwg
IiBhdCAoIiA8PCBmcmFnbWVudC54IDw8ICIsIiA8PCBmcmFnbWVudC55IDw8ICIpIjsKKyAgICAg
ICAgdHMgPDwgIiBzdGFydE9mZnNldCAiIDw8IHN0YXJ0T2Zmc2V0IDw8ICIgZW5kT2Zmc2V0ICIg
PDwgZW5kT2Zmc2V0OworICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICB0
cyA8PCAiIGhlaWdodCAiIDw8IGZyYWdtZW50LmhlaWdodDsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgdHMgPDwgIiB3aWR0aCAiIDw8IGZyYWdtZW50LndpZHRoOworCisgICAgICAgIGlmICgh
dGV4dEJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIHx8IHRleHRCb3gtPm1fZGlyT3ZlcnJp
ZGUpIHsKKyAgICAgICAgICAgIHRzIDw8ICh0ZXh0Qm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyAiIExUUiIgOiAiIFJUTCIpOworICAgICAgICAgICAgaWYgKHRleHRCb3gtPm1fZGlyT3Zl
cnJpZGUpCisgICAgICAgICAgICAgICAgdHMgPDwgIiBvdmVycmlkZSI7CisgICAgICAgIH0KKwor
ICAgICAgICB0cyA8PCAiOiAiIDw8IHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyh0ZXh0LnN1
YnN0cmluZyhmcmFnbWVudC5wb3NpdGlvbkxpc3RPZmZzZXQsIGZyYWdtZW50Lmxlbmd0aCkpIDw8
ICJcbiI7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVTVkdJbmxpbmVUZXh0
Qm94ZXMoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIHRleHQsIGludCBpbmRlbnQp
Cit7CisgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSB0ZXh0LmZpcnN0VGV4dEJveCgpOyBi
b3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkKKyAgICAgICAgd3JpdGVTVkdJbmxpbmVUZXh0
Qm94KHRzLCBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oYm94KSwgaW5kZW50KTsKK30K
Kworc3RhdGljIHZvaWQgd3JpdGVTdGFuZGFyZFByZWZpeChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvYmplY3QsIGludCBpbmRlbnQpCit7CisgICAgd3JpdGVJbmRlbnQodHMs
IGluZGVudCk7CisgICAgdHMgPDwgb2JqZWN0LnJlbmRlck5hbWUoKTsKKworICAgIGlmIChvYmpl
Y3Qubm9kZSgpKQorICAgICAgICB0cyA8PCAiIHsiIDw8IG9iamVjdC5ub2RlKCktPm5vZGVOYW1l
KCkgPDwgIn0iOworfQorCitzdGF0aWMgdm9pZCB3cml0ZUNoaWxkcmVuKFRleHRTdHJlYW0mIHRz
LCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgaW50IGluZGVudCkKK3sKKyAgICBmb3IgKFJl
bmRlck9iamVjdCogY2hpbGQgPSBvYmplY3QuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgd3JpdGUodHMsICpjaGlsZCwgaW5kZW50ICsg
MSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGJvdW5kaW5nQm94TW9kZVN0cmluZyhib29s
IGJvdW5kaW5nQm94TW9kZSkKK3sKKyAgICByZXR1cm4gYm91bmRpbmdCb3hNb2RlID8gIm9iamVj
dEJvdW5kaW5nQm94IiA6ICJ1c2VyU3BhY2VPblVzZSI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p
ZCB3cml0ZUNvbW1vbkdyYWRpZW50UHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgR3JhZGllbnRT
cHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50
VHJhbnNmb3JtLCBib29sIGJvdW5kaW5nQm94TW9kZSkKK3sKKyAgICB3cml0ZU5hbWVWYWx1ZVBh
aXIodHMsICJncmFkaWVudFVuaXRzIiwgYm91bmRpbmdCb3hNb2RlU3RyaW5nKGJvdW5kaW5nQm94
TW9kZSkpOworCisgICAgaWYgKHNwcmVhZE1ldGhvZCAhPSBTcHJlYWRNZXRob2RQYWQpCisgICAg
ICAgIHRzIDw8ICIgW3NwcmVhZE1ldGhvZD0iIDw8IHNwcmVhZE1ldGhvZCA8PCAiXSI7CisKKyAg
ICBpZiAoIWdyYWRpZW50VHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgdHMgPDwgIiBb
Z3JhZGllbnRUcmFuc2Zvcm09IiA8PCBncmFkaWVudFRyYW5zZm9ybSA8PCAiXSI7Cit9CisKK3Zv
aWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
T2JqZWN0JiBvYmplY3QsIGludCBpbmRlbnQpCit7CisgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0
cywgb2JqZWN0LCBpbmRlbnQpOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihvYmplY3Qubm9kZSgpKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0g
ZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKKyAgICB3cml0ZU5hbWVBbmRRdW90ZWRWYWx1ZSh0
cywgImlkIiwgaWQpOyAgICAKKworICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNv
dXJjZSA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4ob2JqZWN0KS50b1JlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyKCk7CisgICAgQVNTRVJUKHJlc291cmNlKTsKKworICAgIGlmIChyZXNvdXJj
ZS0+cmVzb3VyY2VUeXBlKCkgPT0gTWFza2VyUmVzb3VyY2VUeXBlKSB7CisgICAgICAgIFJlbmRl
clNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlcio+KHJlc291cmNlKTsKKyAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAibWFz
a1VuaXRzIiwgbWFza2VyLT5tYXNrVW5pdHMoKSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFp
cih0cywgIm1hc2tDb250ZW50VW5pdHMiLCBtYXNrZXItPm1hc2tDb250ZW50VW5pdHMoKSk7Cisg
ICAgICAgIHRzIDw8ICJcbiI7CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgfSBlbHNlIGlmIChy
ZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gRmlsdGVyUmVzb3VyY2VUeXBlKSB7CisgICAgICAg
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcio+KHJlc291cmNlKTsKKyAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRz
LCAiZmlsdGVyVW5pdHMiLCBmaWx0ZXItPmZpbHRlclVuaXRzKCkpOworICAgICAgICB3cml0ZU5h
bWVWYWx1ZVBhaXIodHMsICJwcmltaXRpdmVVbml0cyIsIGZpbHRlci0+cHJpbWl0aXZlVW5pdHMo
KSk7CisgICAgICAgIHRzIDw8ICJcbiI7CisgICAgICAgIC8vIENyZWF0aW5nIGEgcGxhY2Vob2xk
ZXIgZmlsdGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgYnVpbGRlci4KKyAgICAgICAgRmxvYXRS
ZWN0IGR1bW15UmVjdDsKKyAgICAgICAgUmVmUHRyPFNWR0ZpbHRlcj4gZHVtbXlGaWx0ZXIgPSBT
VkdGaWx0ZXI6OmNyZWF0ZShBZmZpbmVUcmFuc2Zvcm0oKSwgZHVtbXlSZWN0LCBkdW1teVJlY3Qs
IGR1bW15UmVjdCwgdHJ1ZSk7CisgICAgICAgIGlmIChSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4g
YnVpbGRlciA9IGZpbHRlci0+YnVpbGRQcmltaXRpdmVzKGR1bW15RmlsdGVyLmdldCgpKSkgewor
ICAgICAgICAgICAgaWYgKEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RF
ZmZlY3QoKSkKKyAgICAgICAgICAgICAgICBsYXN0RWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCBpbmRlbnQgKyAxKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfSBlbHNlIGlmIChy
ZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gQ2xpcHBlclJlc291cmNlVHlwZSkgeworICAgICAg
ICBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIqPihyZXNvdXJjZSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFp
cih0cywgImNsaXBQYXRoVW5pdHMiLCBjbGlwcGVyLT5jbGlwUGF0aFVuaXRzKCkpOworICAgICAg
ICB0cyA8PCAiXG4iOworICAgIH0gZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09
IE1hcmtlclJlc291cmNlVHlwZSkgeworICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciog
bWFya2VyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqPihyZXNvdXJjZSk7
CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgIm1hcmtlclVuaXRzIiwgbWFya2VyLT5t
YXJrZXJVbml0cygpKTsKKyAgICAgICAgdHMgPDwgIiBbcmVmIGF0ICIgPDwgbWFya2VyLT5yZWZl
cmVuY2VQb2ludCgpIDw8ICJdIjsKKyAgICAgICAgdHMgPDwgIiBbYW5nbGU9IjsKKyAgICAgICAg
aWYgKG1hcmtlci0+YW5nbGUoKSA9PSAtMSkKKyAgICAgICAgICAgIHRzIDw8ICJhdXRvIiA8PCAi
XVxuIjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHMgPDwgbWFya2VyLT5hbmdsZSgpIDw8
ICJdXG4iOworICAgIH0gZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IFBhdHRl
cm5SZXNvdXJjZVR5cGUpIHsKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuKiBwYXR0
ZXJuID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuKj4ocmVzb3VyY2UpOwor
CisgICAgICAgIC8vIER1bXAgZmluYWwgcmVzdWx0cyB0aGF0IGFyZSB1c2VkIGZvciByZW5kZXJp
bmcuIE5vIHVzZSBpbiBhc2tpbmcgU1ZHUGF0dGVybkVsZW1lbnQgZm9yIGl0cyBwYXR0ZXJuVW5p
dHMoKSwgYXMgaXQgbWF5CisgICAgICAgIC8vIGxpbmsgdG8gb3RoZXIgcGF0dGVybnMgdXNpbmcg
eGxpbms6aHJlZiwgd2UgbmVlZCB0byBidWlsZCB0aGUgZnVsbCBpbmhlcml0YW5jZSBjaGFpbiwg
YWthLiBjb2xsZWN0UGF0dGVyblByb3BlcnRpZXMoKQorICAgICAgICBQYXR0ZXJuQXR0cmlidXRl
cyBhdHRyaWJ1dGVzOworICAgICAgICBzdGF0aWNfY2FzdDxTVkdQYXR0ZXJuRWxlbWVudCo+KHBh
dHRlcm4tPm5vZGUoKSktPmNvbGxlY3RQYXR0ZXJuQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKKwor
ICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJwYXR0ZXJuVW5pdHMiLCBib3VuZGluZ0Jv
eE1vZGVTdHJpbmcoYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSkpOworICAgICAgICB3cml0
ZU5hbWVWYWx1ZVBhaXIodHMsICJwYXR0ZXJuQ29udGVudFVuaXRzIiwgYm91bmRpbmdCb3hNb2Rl
U3RyaW5nKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlQ29udGVudCgpKSk7CisKKyAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGF0dHJpYnV0ZXMucGF0dGVyblRyYW5zZm9ybSgp
OworICAgICAgICBpZiAoIXRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgICAgICB0cyA8
PCAiIFtwYXR0ZXJuVHJhbnNmb3JtPSIgPDwgdHJhbnNmb3JtIDw8ICJdIjsKKyAgICAgICAgdHMg
PDwgIlxuIjsKKyAgICB9IGVsc2UgaWYgKHJlc291cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBMaW5l
YXJHcmFkaWVudFJlc291cmNlVHlwZSkgeworICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUxpbmVh
ckdyYWRpZW50KiBncmFkaWVudCA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1Jlc291cmNlTGluZWFy
R3JhZGllbnQqPihyZXNvdXJjZSk7CisKKyAgICAgICAgLy8gRHVtcCBmaW5hbCByZXN1bHRzIHRo
YXQgYXJlIHVzZWQgZm9yIHJlbmRlcmluZy4gTm8gdXNlIGluIGFza2luZyBTVkdHcmFkaWVudEVs
ZW1lbnQgZm9yIGl0cyBncmFkaWVudFVuaXRzKCksIGFzIGl0IG1heQorICAgICAgICAvLyBsaW5r
IHRvIG90aGVyIGdyYWRpZW50cyB1c2luZyB4bGluazpocmVmLCB3ZSBuZWVkIHRvIGJ1aWxkIHRo
ZSBmdWxsIGluaGVyaXRhbmNlIGNoYWluLCBha2EuIGNvbGxlY3RHcmFkaWVudFByb3BlcnRpZXMo
KQorICAgICAgICBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQqIGxpbmVhckdyYWRpZW50RWxlbWVu
dCA9IHN0YXRpY19jYXN0PFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCo+KGdyYWRpZW50LT5ub2Rl
KCkpOworCisgICAgICAgIExpbmVhckdyYWRpZW50QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAg
ICAgICBsaW5lYXJHcmFkaWVudEVsZW1lbnQtPmNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMoYXR0
cmlidXRlcyk7CisgICAgICAgIHdyaXRlQ29tbW9uR3JhZGllbnRQcm9wZXJ0aWVzKHRzLCBhdHRy
aWJ1dGVzLnNwcmVhZE1ldGhvZCgpLCBhdHRyaWJ1dGVzLmdyYWRpZW50VHJhbnNmb3JtKCksIGF0
dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpOworCisgICAgICAgIEZsb2F0UG9pbnQgc3RhcnRQ
b2ludDsKKyAgICAgICAgRmxvYXRQb2ludCBlbmRQb2ludDsKKyAgICAgICAgbGluZWFyR3JhZGll
bnRFbGVtZW50LT5jYWxjdWxhdGVTdGFydEVuZFBvaW50cyhhdHRyaWJ1dGVzLCBzdGFydFBvaW50
LCBlbmRQb2ludCk7CisKKyAgICAgICAgdHMgPDwgIiBbc3RhcnQ9IiA8PCBzdGFydFBvaW50IDw8
ICJdIFtlbmQ9IiA8PCBlbmRQb2ludCA8PCAiXVxuIjsKKyAgICB9ICBlbHNlIGlmIChyZXNvdXJj
ZS0+cmVzb3VyY2VUeXBlKCkgPT0gUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGUpIHsKKyAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudCogZ3JhZGllbnQgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Kj4ocmVzb3VyY2UpOworCisgICAgICAg
IC8vIER1bXAgZmluYWwgcmVzdWx0cyB0aGF0IGFyZSB1c2VkIGZvciByZW5kZXJpbmcuIE5vIHVz
ZSBpbiBhc2tpbmcgU1ZHR3JhZGllbnRFbGVtZW50IGZvciBpdHMgZ3JhZGllbnRVbml0cygpLCBh
cyBpdCBtYXkKKyAgICAgICAgLy8gbGluayB0byBvdGhlciBncmFkaWVudHMgdXNpbmcgeGxpbms6
aHJlZiwgd2UgbmVlZCB0byBidWlsZCB0aGUgZnVsbCBpbmhlcml0YW5jZSBjaGFpbiwgYWthLiBj
b2xsZWN0R3JhZGllbnRQcm9wZXJ0aWVzKCkKKyAgICAgICAgU1ZHUmFkaWFsR3JhZGllbnRFbGVt
ZW50KiByYWRpYWxHcmFkaWVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdSYWRpYWxHcmFkaWVu
dEVsZW1lbnQqPihncmFkaWVudC0+bm9kZSgpKTsKKworICAgICAgICBSYWRpYWxHcmFkaWVudEF0
dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAgICAgICAgcmFkaWFsR3JhZGllbnRFbGVtZW50LT5jb2xs
ZWN0R3JhZGllbnRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOworICAgICAgICB3cml0ZUNvbW1vbkdy
YWRpZW50UHJvcGVydGllcyh0cywgYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSwgYXR0cmlidXRl
cy5ncmFkaWVudFRyYW5zZm9ybSgpLCBhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsKKwor
ICAgICAgICBGbG9hdFBvaW50IGZvY2FsUG9pbnQ7CisgICAgICAgIEZsb2F0UG9pbnQgY2VudGVy
UG9pbnQ7CisgICAgICAgIGZsb2F0IHJhZGl1czsKKyAgICAgICAgcmFkaWFsR3JhZGllbnRFbGVt
ZW50LT5jYWxjdWxhdGVGb2NhbENlbnRlclBvaW50c0FuZFJhZGl1cyhhdHRyaWJ1dGVzLCBmb2Nh
bFBvaW50LCBjZW50ZXJQb2ludCwgcmFkaXVzKTsKKworICAgICAgICB0cyA8PCAiIFtjZW50ZXI9
IiA8PCBjZW50ZXJQb2ludCA8PCAiXSBbZm9jYWw9IiA8PCBmb2NhbFBvaW50IDw8ICJdIFtyYWRp
dXM9IiA8PCByYWRpdXMgPDwgIl1cbiI7CisgICAgfSBlbHNlCisgICAgICAgIHRzIDw8ICJcbiI7
CisgICAgd3JpdGVDaGlsZHJlbih0cywgb2JqZWN0LCBpbmRlbnQpOworfQorCit2b2lkIHdyaXRl
U1ZHQ29udGFpbmVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIGNvbnRhaW5l
ciwgaW50IGluZGVudCkKK3sKKyAgICAvLyBDdXJyZW50bHkgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXJQcmltaXRpdmUgaGFzIG5vIG1lYW5pbmdmdWwgb3V0cHV0LgorICAgIGlmIChjb250YWluZXIu
aXNTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSgpKQorICAgICAgICByZXR1cm47CisgICAgd3Jp
dGVTdGFuZGFyZFByZWZpeCh0cywgY29udGFpbmVyLCBpbmRlbnQpOworICAgIHdyaXRlUG9zaXRp
b25BbmRTdHlsZSh0cywgY29udGFpbmVyKTsKKyAgICB0cyA8PCAiXG4iOworICAgIHdyaXRlUmVz
b3VyY2VzKHRzLCBjb250YWluZXIsIGluZGVudCk7CisgICAgd3JpdGVDaGlsZHJlbih0cywgY29u
dGFpbmVyLCBpbmRlbnQpOworfQorCit2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBS
ZW5kZXJTVkdSb290JiByb290LCBpbnQgaW5kZW50KQoreworICAgIHdyaXRlU3RhbmRhcmRQcmVm
aXgodHMsIHJvb3QsIGluZGVudCk7CisgICAgdHMgPDwgcm9vdCA8PCAiXG4iOworICAgIHdyaXRl
Q2hpbGRyZW4odHMsIHJvb3QsIGluZGVudCk7Cit9CisKK3ZvaWQgd3JpdGVTVkdUZXh0KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBSZW5kZXJCbG9jayYgdGV4dCwgaW50IGluZGVudCkKK3sKKyAgICB3
cml0ZVN0YW5kYXJkUHJlZml4KHRzLCB0ZXh0LCBpbmRlbnQpOworICAgIHdyaXRlUmVuZGVyU1ZH
VGV4dEJveCh0cywgdGV4dCk7CisgICAgdHMgPDwgIlxuIjsKKyAgICB3cml0ZVJlc291cmNlcyh0
cywgdGV4dCwgaW5kZW50KTsKKyAgICB3cml0ZUNoaWxkcmVuKHRzLCB0ZXh0LCBpbmRlbnQpOwor
fQorCit2b2lkIHdyaXRlU1ZHSW5saW5lVGV4dChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
VGV4dCYgdGV4dCwgaW50IGluZGVudCkKK3sKKyAgICB3cml0ZVN0YW5kYXJkUHJlZml4KHRzLCB0
ZXh0LCBpbmRlbnQpOworCisgICAgLy8gV2h5IG5vdCBqdXN0IGxpbmVzQm91bmRpbmdCb3goKT8K
KyAgICB0cyA8PCAiICIgPDwgRmxvYXRSZWN0KHRleHQuZmlyc3RSdW5PcmlnaW4oKSwgdGV4dC5s
aW5lc0JvdW5kaW5nQm94KCkuc2l6ZSgpKSA8PCAiXG4iOworICAgIHdyaXRlUmVzb3VyY2VzKHRz
LCB0ZXh0LCBpbmRlbnQpOworICAgIHdyaXRlU1ZHSW5saW5lVGV4dEJveGVzKHRzLCB0ZXh0LCBp
bmRlbnQpOworfQorCit2b2lkIHdyaXRlU1ZHSW1hZ2UoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJl
bmRlclNWR0ltYWdlJiBpbWFnZSwgaW50IGluZGVudCkKK3sKKyAgICB3cml0ZVN0YW5kYXJkUHJl
Zml4KHRzLCBpbWFnZSwgaW5kZW50KTsKKyAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMsIGlt
YWdlKTsKKyAgICB0cyA8PCAiXG4iOworICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBpbWFnZSwgaW5k
ZW50KTsKK30KKwordm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUGF0
aCYgcGF0aCwgaW50IGluZGVudCkKK3sKKyAgICB3cml0ZVN0YW5kYXJkUHJlZml4KHRzLCBwYXRo
LCBpbmRlbnQpOworICAgIHRzIDw8IHBhdGggPDwgIlxuIjsKKyAgICB3cml0ZVJlc291cmNlcyh0
cywgcGF0aCwgaW5kZW50KTsKK30KKwordm9pZCB3cml0ZVNWR0dyYWRpZW50U3RvcChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHR3JhZGllbnRTdG9wJiBzdG9wLCBpbnQgaW5kZW50KQor
eworICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHN0b3AsIGluZGVudCk7CisKKyAgICBTVkdT
dG9wRWxlbWVudCogc3RvcEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdG9wRWxlbWVudCo+KHN0
b3Aubm9kZSgpKTsKKyAgICBBU1NFUlQoc3RvcEVsZW1lbnQpOworCisgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gc3RvcC5zdHlsZSgpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybjsK
KworICAgIHRzIDw8ICIgW29mZnNldD0iIDw8IHN0b3BFbGVtZW50LT5vZmZzZXQoKSA8PCAiXSBb
Y29sb3I9IiA8PCBzdG9wRWxlbWVudC0+c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSgpIDw8ICJd
XG4iOworfQorCit2b2lkIHdyaXRlUmVzb3VyY2VzKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5k
ZXJPYmplY3QmIG9iamVjdCwgaW50IGluZGVudCkKK3sKKyAgICBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUgPSBvYmplY3Quc3R5bGUoKTsKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5
bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKKworICAgIC8vIEZJWE1FOiBXZSB3YW50IHRvIHVzZSBT
VkdSZXNvdXJjZXNDYWNoZSB0byBkZXRlcm1pbmUgd2hpY2ggcmVzb3VyY2VzIGFyZSBwcmVzZW50
LCBpbnN0ZWFkIG9mIHF1ZXJpbmcgdGhlIHJlc291cmNlIDwtPiBpZCBjYWNoZS4KKyAgICAvLyBG
b3Igbm93IGxlYXZlIHRoZSBEUlQgb3V0cHV0IGFzIGlzLCBidXQgbGF0ZXIgb24gd2Ugc2hvdWxk
IGNoYW5nZSB0aGlzIHNvIGN5Y2xlcyBhcmUgcHJvcGVybHkgaWdub3JlZCBpbiB0aGUgRFJUIG91
dHB1dC4KKyAgICBSZW5kZXJPYmplY3QmIHJlbmRlcmVyID0gY29uc3RfY2FzdDxSZW5kZXJPYmpl
Y3QmPihvYmplY3QpOworICAgIGlmICghc3ZnU3R5bGUtPm1hc2tlclJlc291cmNlKCkuaXNFbXB0
eSgpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciogbWFza2VyID0gZ2V0
UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlTWFza2VyPihvYmplY3QuZG9j
dW1lbnQoKSwgc3ZnU3R5bGUtPm1hc2tlclJlc291cmNlKCkpKSB7CisgICAgICAgICAgICB3cml0
ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICAgICAgICAgIHRzIDw8ICIgIjsKKyAgICAgICAgICAg
IHdyaXRlTmFtZUFuZFF1b3RlZFZhbHVlKHRzLCAibWFza2VyIiwgc3ZnU3R5bGUtPm1hc2tlclJl
c291cmNlKCkpOworICAgICAgICAgICAgdHMgPDwgIiAiOworICAgICAgICAgICAgd3JpdGVTdGFu
ZGFyZFByZWZpeCh0cywgKm1hc2tlciwgMCk7CisgICAgICAgICAgICB0cyA8PCAiICIgPDwgbWFz
a2VyLT5yZXNvdXJjZUJvdW5kaW5nQm94KCZyZW5kZXJlcikgPDwgIlxuIjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBpZiAoIXN2Z1N0eWxlLT5jbGlwcGVyUmVzb3VyY2UoKS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBlciA9IGdldFJlbmRl
clNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI+KG9iamVjdC5kb2N1bWVu
dCgpLCBzdmdTdHlsZS0+Y2xpcHBlclJlc291cmNlKCkpKSB7CisgICAgICAgICAgICB3cml0ZUlu
ZGVudCh0cywgaW5kZW50KTsKKyAgICAgICAgICAgIHRzIDw8ICIgIjsKKyAgICAgICAgICAgIHdy
aXRlTmFtZUFuZFF1b3RlZFZhbHVlKHRzLCAiY2xpcFBhdGgiLCBzdmdTdHlsZS0+Y2xpcHBlclJl
c291cmNlKCkpOworICAgICAgICAgICAgdHMgPDwgIiAiOworICAgICAgICAgICAgd3JpdGVTdGFu
ZGFyZFByZWZpeCh0cywgKmNsaXBwZXIsIDApOworICAgICAgICAgICAgdHMgPDwgIiAiIDw8IGNs
aXBwZXItPnJlc291cmNlQm91bmRpbmdCb3goJnJlbmRlcmVyKSA8PCAiXG4iOworICAgICAgICB9
CisgICAgfQorI2lmIEVOQUJMRShGSUxURVJTKQorICAgIGlmICghc3ZnU3R5bGUtPmZpbHRlclJl
c291cmNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ciogZmlsdGVyID0gZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlRmls
dGVyPihvYmplY3QuZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRlclJlc291cmNlKCkpKSB7Cisg
ICAgICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICAgICAgICAgIHRzIDw8ICIg
IjsKKyAgICAgICAgICAgIHdyaXRlTmFtZUFuZFF1b3RlZFZhbHVlKHRzLCAiZmlsdGVyIiwgc3Zn
U3R5bGUtPmZpbHRlclJlc291cmNlKCkpOworICAgICAgICAgICAgdHMgPDwgIiAiOworICAgICAg
ICAgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgKmZpbHRlciwgMCk7CisgICAgICAgICAgICB0
cyA8PCAiICIgPDwgZmlsdGVyLT5yZXNvdXJjZUJvdW5kaW5nQm94KCZyZW5kZXJlcikgPDwgIlxu
IjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDc1MzQ1KQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oOjc1MzQ1KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTVkdSZW5kZXJUcmVlQXNUZXh0X2gKKyNkZWZpbmUgU1ZHUmVuZGVyVHJlZUFzVGV4dF9oCisK
KyNpZiBFTkFCTEUoU1ZHKQorCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENvbG9yOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgRmxvYXRT
aXplOworY2xhc3MgTm9kZTsKK2NsYXNzIFJlbmRlckJsb2NrOworY2xhc3MgUmVuZGVySW1hZ2U7
CitjbGFzcyBSZW5kZXJPYmplY3Q7CitjbGFzcyBSZW5kZXJTVkdHcmFkaWVudFN0b3A7CitjbGFz
cyBSZW5kZXJTVkdJbWFnZTsKK2NsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBSZW5kZXJTVkdS
b290OworY2xhc3MgUmVuZGVyVGV4dDsKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIFNW
R1VuaXRUeXBlczsKKworLy8gZnVuY3Rpb25zIHVzZWQgYnkgdGhlIG1haW4gUmVuZGVyVHJlZUFz
VGV4dCBjb2RlCit2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdQYXRoJiwg
aW50IGluZGVudCk7Cit2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdSb290
JiwgaW50IGluZGVudCk7Cit2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0mLCBj
b25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGVTVkdS
ZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyT2JqZWN0JiwgaW50IGlu
ZGVudCk7Cit2b2lkIHdyaXRlU1ZHQ29udGFpbmVyKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJP
YmplY3QmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGVTVkdJbWFnZShUZXh0U3RyZWFtJiwgY29u
c3QgUmVuZGVyU1ZHSW1hZ2UmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGVTVkdJbmxpbmVUZXh0
KFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJUZXh0JiwgaW50IGluZGVudCk7Cit2b2lkIHdyaXRl
U1ZHVGV4dChUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyQmxvY2smLCBpbnQgaW5kZW50KTsKK3Zv
aWQgd3JpdGVSZXNvdXJjZXMoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlck9iamVjdCYsIGludCBp
bmRlbnQpOworCisvLyBoZWxwZXIgb3BlcmF0b3JzIGRlZmluZWQgdXNlZCBpbiB2YXJpb3VzIGNs
YXNzZXMgdG8gZHVtcCB0aGUgcmVuZGVyIHRyZWUuCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKK1RleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYsIGNvbnN0IENvbG9yJik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mLCBjb25zdCBGbG9hdFJlY3QmKTsKKworLy8gaGVscGVyIG9wZXJhdG9ycyBzcGVj
aWZpYyB0byBkdW1waW5nIHRoZSByZW5kZXIgdHJlZS4gdGhlc2UgYXJlIHVzZWQgaW4gdmFyaW91
cyBjbGFzc2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0cmVlCisvLyB0aGVzZSBjb3VsZCBiZSBkZWZp
bmVkIGluIHNlcGFyYXRlIG5hbWVzcGFjZSB0byBhdm9pZCBtYXRjaGluZyB0aGVzZSBnZW5lcmlj
IHNpZ25hdHVyZXMgdW5pbnRlbnRpb25hbGx5LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVtPgor
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVmVjdG9yPEl0ZW0q
PiYgdikKK3sKKyAgICB0cyA8PCAiWyI7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
di5zaXplKCk7IGkrKykgeworICAgICAgICB0cyA8PCAqdltpXTsKKyAgICAgICAgaWYgKGkgPCB2
LnNpemUoKSAtIDEpCisgICAgICAgICAgICB0cyA8PCAiLCAiOworICAgIH0KKworICAgIHRzIDw8
ICJdIjsKKyAgICByZXR1cm4gdHM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBvaW50ZXI+CitU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBQb2ludGVyKiB0KQoreworICAg
IHRzIDw8IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHQpOworICAgIHJldHVybiB0czsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKworI2Vu
ZGlmIC8vIFNWR1JlbmRlclRyZWVBc1RleHRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuY3BwOjc1MzQ1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU1ZHUmVzb3VyY2VzLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlQ2xpcHBlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKKyNp
bmNsdWRlICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2lu
Y2x1ZGUgIlNWR1BhaW50LmgiCisjaW5jbHVkZSAiU1ZHUGF0dGVybkVsZW1lbnQuaCIKKyNpbmNs
dWRlICJTVkdSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1NWR1Jlc291cmNlczo6U1ZHUmVzb3VyY2VzKCkKKyAgICA6
IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEoMCkKKyAgICAsIG1fbWFya2VyRGF0YSgwKQorICAg
ICwgbV9maWxsU3Ryb2tlRGF0YSgwKQorICAgICwgbV9saW5rZWRSZXNvdXJjZSgwKQoreworfQor
CitzdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsaXBwZXJGaWx0ZXJNYXNrZXJU
YWdzKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+LCBzX3RhZ0xpc3QsICgpKTsKKyAgICBpZiAoc190YWdMaXN0LmlzRW1wdHkoKSkgeworICAg
ICAgICAvLyAiY29udGFpbmVyIGVsZW1lbnRzIjogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEv
aW50cm8uaHRtbCNUZXJtQ29udGFpbmVyRWxlbWVudAorICAgICAgICAvLyAiZ3JhcGhpY3MgZWxl
bWVudHMiIDogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8uaHRtbCNUZXJtR3JhcGhp
Y3NFbGVtZW50CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmFUYWcubG9jYWxOYW1l
KCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6Y2lyY2xlVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmVsbGlw
c2VUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1l
czo6Z2x5cGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChT
VkdOYW1lczo6Z1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRk
KFNWR05hbWVzOjppbWFnZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xp
c3QuYWRkKFNWR05hbWVzOjpsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNf
dGFnTGlzdC5hZGQoU1ZHTmFtZXM6Om1hcmtlclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAg
ICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjptYXNrVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7
CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6Om1pc3NpbmdfZ2x5cGhUYWcubG9jYWxO
YW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6cGF0aFRhZy5s
b2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpwb2x5
Z29uVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFt
ZXM6OnBvbHlsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5h
ZGQoU1ZHTmFtZXM6OnJlY3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdM
aXN0LmFkZChTVkdOYW1lczo6c3ZnVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNf
dGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnRleHRUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAg
ICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6dXNlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisK
KyAgICAgICAgLy8gTm90IGxpc3RlZCBpbiB0aGUgZGVmaW5pdGlvbnMgaXMgdGhlIGNsaXBQYXRo
IGVsZW1lbnQsIHRoZSBTVkcgc3BlYyBzYXlzIHRob3VnaDoKKyAgICAgICAgLy8gVGhlICJjbGlw
UGF0aCIgZWxlbWVudCBvciBhbnkgb2YgaXRzIGNoaWxkcmVuIGNhbiBzcGVjaWZ5IHByb3BlcnR5
ICJjbGlwLXBhdGgiLgorICAgICAgICAvLyBTbyB3ZSBoYXZlIHRvIGFkZCBjbGlwUGF0aFRhZyBo
ZXJlLCBvdGhlcndoaXNlIGNsaXAtcGF0aCBvbiBjbGlwUGF0aCB3aWxsIGZhaWwuCisgICAgICAg
IC8vIChBbHJlYWR5IG1haWxlZCBTVkcgV0csIHdhaXRpbmcgZm9yIGEgc29sdXRpb24pCisgICAg
ICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmNsaXBQYXRoVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSk7CisKKyAgICAgICAgLy8gTm90IGxpc3RlZCBpbiB0aGUgZGVmaW5pdGlvbnMgYXJlIHRoZSB0
ZXh0IGNvbnRlbnQgZWxlbWVudHMsIHRob3VnaCBmaWx0ZXIvY2xpcHBlci9tYXNrZXIgb24gdHNw
YW4vdGV4dC8uLiBpcyBhbGxvd2VkLgorICAgICAgICAvLyAoQWxyZWFkeSBtYWlsZWQgU1ZHIFdH
LCB3YWl0aW5nIGZvciBhIHNvbHV0aW9uKQorICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVz
OjphbHRHbHlwaFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRk
KFNWR05hbWVzOjp0ZXh0UGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3Rh
Z0xpc3QuYWRkKFNWR05hbWVzOjp0cmVmVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAg
IHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnRzcGFuVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisK
KyAgICAgICAgLy8gRWxlbWVudHMgdGhhdCB3ZSBpZ25vcmUsIGFzIGl0IGRvZXNuJ3QgbWFrZSBh
bnkgc2Vuc2UuCisgICAgICAgIC8vIGRlZnMsIHBhdHRlcm4sIHN3aXRjaCAoRklYTUU6IE1haWwg
U1ZHIFdHIGFib3V0IHRoZXNlKQorICAgICAgICAvLyBzeW1ib2wgKGlzIGNvbnZlcnRlZCB0byBh
IHN2ZyBlbGVtZW50LCB3aGVuIHJlZmVyZW5jZWQgYnkgdXNlLCB3ZSBjYW4gc2FmZWx5IGlnbm9y
ZSBpdC4pCisgICAgfQorCisgICAgcmV0dXJuIHNfdGFnTGlzdDsKK30KKworc3RhdGljIEhhc2hT
ZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBtYXJrZXJUYWdzKCkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+LCBzX3RhZ0xpc3QsICgpKTsKKyAgICBp
ZiAoc190YWdMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVz
OjpsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZH
TmFtZXM6OnBhdGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFk
ZChTVkdOYW1lczo6cG9seWdvblRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3Rh
Z0xpc3QuYWRkKFNWR05hbWVzOjpwb2x5bGluZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAg
IH0KKworICAgIHJldHVybiBzX3RhZ0xpc3Q7Cit9CisKK3N0YXRpYyBIYXNoU2V0PEF0b21pY1N0
cmluZ0ltcGwqPiYgZmlsbEFuZFN0cm9rZVRhZ3MoKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4sIHNfdGFnTGlzdCwgKCkpOworICAgIGlmIChz
X3RhZ0xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmFs
dEdseXBoVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZH
TmFtZXM6OmNpcmNsZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3Qu
YWRkKFNWR05hbWVzOjplbGxpcHNlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNf
dGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmxpbmVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAg
ICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6cGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwor
ICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpwb2x5Z29uVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnBvbHlsaW5lVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnJlY3RUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6dGV4
dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVz
Ojp0ZXh0UGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRk
KFNWR05hbWVzOjp0cmVmVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlz
dC5hZGQoU1ZHTmFtZXM6OnRzcGFuVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHNfdGFnTGlzdDsKK30KKworc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+JiBjaGFpbmFibGVSZXNvdXJjZVRhZ3MoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
SGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4sIHNfdGFnTGlzdCwgKCkpOworICAgIGlmIChzX3Rh
Z0xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmxpbmVh
ckdyYWRpZW50VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQo
U1ZHTmFtZXM6OmZpbHRlclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xp
c3QuYWRkKFNWR05hbWVzOjpwYXR0ZXJuVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAg
IHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnJhZGlhbEdyYWRpZW50VGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHNfdGFnTGlzdDsKK30KKworc3RhdGljIGlubGlu
ZSBTdHJpbmcgdGFyZ2V0UmVmZXJlbmNlRnJvbVJlc291cmNlKFNWR0VsZW1lbnQqIGVsZW1lbnQp
Cit7CisgICAgU3RyaW5nIHRhcmdldDsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShTVkdO
YW1lczo6cGF0dGVyblRhZykpCisgICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PFNWR1BhdHRl
cm5FbGVtZW50Kj4oZWxlbWVudCktPmhyZWYoKTsKKyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNU
YWdOYW1lKFNWR05hbWVzOjpsaW5lYXJHcmFkaWVudFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6cmFkaWFsR3JhZGllbnRUYWcpKQorICAgICAgICB0YXJnZXQgPSBzdGF0aWNf
Y2FzdDxTVkdHcmFkaWVudEVsZW1lbnQqPihlbGVtZW50KS0+aHJlZigpOworI2lmIEVOQUJMRShG
SUxURVJTKQorICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZpbHRl
clRhZykpCisgICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQqPihl
bGVtZW50KS0+aHJlZigpOworI2VuZGlmCisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKworICAgIHJldHVybiBTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldCh0YXJnZXQp
OworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBwYWludGlu
Z1Jlc291cmNlRnJvbVNWR1BhaW50KERvY3VtZW50KiBkb2N1bWVudCwgU1ZHUGFpbnQqIHBhaW50
LCBBdG9taWNTdHJpbmcmIGlkLCBib29sJiBoYXNQZW5kaW5nUmVzb3VyY2UpCit7CisgICAgQVNT
RVJUKHBhaW50KTsKKworICAgIFNWR1BhaW50OjpTVkdQYWludFR5cGUgcGFpbnRUeXBlID0gcGFp
bnQtPnBhaW50VHlwZSgpOworICAgIGlmIChwYWludFR5cGUgIT0gU1ZHUGFpbnQ6OlNWR19QQUlO
VFRZUEVfVVJJICYmIHBhaW50VHlwZSAhPSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfUkdC
Q09MT1IpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWQgPSBTVkdVUklSZWZlcmVuY2U6Omdl
dFRhcmdldChwYWludC0+dXJpKCkpOworICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBj
b250YWluZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lckJ5SWQoZG9jdW1lbnQsIGlk
KTsKKyAgICBpZiAoIWNvbnRhaW5lcikgeworICAgICAgICBoYXNQZW5kaW5nUmVzb3VyY2UgPSB0
cnVlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZW5kZXJTVkdSZXNvdXJjZVR5
cGUgcmVzb3VyY2VUeXBlID0gY29udGFpbmVyLT5yZXNvdXJjZVR5cGUoKTsKKyAgICBpZiAocmVz
b3VyY2VUeXBlICE9IFBhdHRlcm5SZXNvdXJjZVR5cGUgJiYgcmVzb3VyY2VUeXBlICE9IExpbmVh
ckdyYWRpZW50UmVzb3VyY2VUeXBlICYmIHJlc291cmNlVHlwZSAhPSBSYWRpYWxHcmFkaWVudFJl
c291cmNlVHlwZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY29udGFpbmVyOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UoU1ZHRG9jdW1l
bnRFeHRlbnNpb25zKiBleHRlbnNpb25zLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBTVkdFbGVt
ZW50KiBlbGVtZW50KQoreworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBpZiAoIWVsZW1lbnQt
PmlzU3R5bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGV4dGVuc2lvbnMtPmFkZFBlbmRp
bmdSZXNvdXJjZShpZCwgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpKTsK
K30KKworYm9vbCBTVkdSZXNvdXJjZXM6OmJ1aWxkQ2FjaGVkUmVzb3VyY2VzKGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0LCBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUpCit7CisgICAgQVNT
RVJUKG9iamVjdCk7CisgICAgQVNTRVJUKHN0eWxlKTsKKworICAgIE5vZGUqIG5vZGUgPSBvYmpl
Y3QtPm5vZGUoKTsKKyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKG5vZGUtPmlzU1ZHRWxl
bWVudCgpKTsKKworICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVt
ZW50Kj4obm9kZSk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBvYmplY3QtPmRvY3VtZW50KCk7CisgICAgQVNTRVJU
KGRvY3VtZW50KTsKKworICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGRv
Y3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7CisgICAgQVNTRVJUKGV4dGVuc2lvbnMpOwor
CisgICAgQXRvbWljU3RyaW5nSW1wbCogdGFnTmFtZUltcGwgPSBlbGVtZW50LT50YWdRTmFtZSgp
LmxvY2FsTmFtZSgpLmltcGwoKTsKKyAgICBpZiAoIXRhZ05hbWVJbXBsKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBib29sIGZvdW5kUmVzb3VyY2VzID0gZmFsc2U7CisgICAgaWYgKGNs
aXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkuY29udGFpbnModGFnTmFtZUltcGwpKSB7CisgICAgICAg
IGlmIChzdHlsZS0+aGFzQ2xpcHBlcigpKSB7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgaWQo
c3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgpKTsKKyAgICAgICAgICAgIGlmIChzZXRDbGlwcGVyKGdl
dFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI+KGRvY3VtZW50
LCBpZCkpKQorICAgICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShleHRlbnNp
b25zLCBpZCwgZWxlbWVudCk7CisgICAgICAgIH0KKworI2lmIEVOQUJMRShGSUxURVJTKQorICAg
ICAgICBpZiAoc3R5bGUtPmhhc0ZpbHRlcigpKSB7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcg
aWQoc3R5bGUtPmZpbHRlclJlc291cmNlKCkpOworICAgICAgICAgICAgaWYgKHNldEZpbHRlcihn
ZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KGRvY3VtZW50
LCBpZCkpKQorICAgICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShleHRlbnNp
b25zLCBpZCwgZWxlbWVudCk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGlmIChzdHls
ZS0+aGFzTWFza2VyKCkpIHsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBpZChzdHlsZS0+bWFz
a2VyUmVzb3VyY2UoKSk7CisgICAgICAgICAgICBpZiAoc2V0TWFza2VyKGdldFJlbmRlclNWR1Jl
c291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcj4oZG9jdW1lbnQsIGlkKSkpCisgICAg
ICAgICAgICAgICAgZm91bmRSZXNvdXJjZXMgPSB0cnVlOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKGV4dGVuc2lvbnMsIGlkLCBlbGVt
ZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtYXJrZXJUYWdzKCkuY29udGFpbnMo
dGFnTmFtZUltcGwpICYmIHN0eWxlLT5oYXNNYXJrZXJzKCkpIHsKKyAgICAgICAgQXRvbWljU3Ry
aW5nIG1hcmtlclN0YXJ0SWQoc3R5bGUtPm1hcmtlclN0YXJ0UmVzb3VyY2UoKSk7CisgICAgICAg
IGlmIChzZXRNYXJrZXJTdGFydChnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXI+KGRvY3VtZW50LCBtYXJrZXJTdGFydElkKSkpCisgICAgICAgICAgICBmb3Vu
ZFJlc291cmNlcyA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlZ2lzdGVyUGVu
ZGluZ1Jlc291cmNlKGV4dGVuc2lvbnMsIG1hcmtlclN0YXJ0SWQsIGVsZW1lbnQpOworCisgICAg
ICAgIEF0b21pY1N0cmluZyBtYXJrZXJNaWRJZChzdHlsZS0+bWFya2VyTWlkUmVzb3VyY2UoKSk7
CisgICAgICAgIGlmIChzZXRNYXJrZXJNaWQoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRl
clNWR1Jlc291cmNlTWFya2VyPihkb2N1bWVudCwgbWFya2VyTWlkSWQpKSkKKyAgICAgICAgICAg
IGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVnaXN0
ZXJQZW5kaW5nUmVzb3VyY2UoZXh0ZW5zaW9ucywgbWFya2VyTWlkSWQsIGVsZW1lbnQpOworCisg
ICAgICAgIEF0b21pY1N0cmluZyBtYXJrZXJFbmRJZChzdHlsZS0+bWFya2VyRW5kUmVzb3VyY2Uo
KSk7CisgICAgICAgIGlmIChzZXRNYXJrZXJFbmQoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJl
bmRlclNWR1Jlc291cmNlTWFya2VyPihkb2N1bWVudCwgbWFya2VyRW5kSWQpKSkKKyAgICAgICAg
ICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVn
aXN0ZXJQZW5kaW5nUmVzb3VyY2UoZXh0ZW5zaW9ucywgbWFya2VyRW5kSWQsIGVsZW1lbnQpOwor
ICAgIH0KKworICAgIGlmIChmaWxsQW5kU3Ryb2tlVGFncygpLmNvbnRhaW5zKHRhZ05hbWVJbXBs
KSkgeworICAgICAgICBpZiAoc3R5bGUtPmhhc0ZpbGwoKSkgeworICAgICAgICAgICAgYm9vbCBo
YXNQZW5kaW5nUmVzb3VyY2UgPSBmYWxzZTsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBpZDsK
KyAgICAgICAgICAgIGlmIChzZXRGaWxsKHBhaW50aW5nUmVzb3VyY2VGcm9tU1ZHUGFpbnQoZG9j
dW1lbnQsIHN0eWxlLT5maWxsUGFpbnQoKSwgaWQsIGhhc1BlbmRpbmdSZXNvdXJjZSkpKQorICAg
ICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGhhc1BlbmRpbmdSZXNvdXJjZSkKKyAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNv
dXJjZShleHRlbnNpb25zLCBpZCwgZWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c3R5bGUtPmhhc1N0cm9rZSgpKSB7CisgICAgICAgICAgICBib29sIGhhc1BlbmRpbmdSZXNvdXJj
ZSA9IGZhbHNlOworICAgICAgICAgICAgQXRvbWljU3RyaW5nIGlkOworICAgICAgICAgICAgaWYg
KHNldFN0cm9rZShwYWludGluZ1Jlc291cmNlRnJvbVNWR1BhaW50KGRvY3VtZW50LCBzdHlsZS0+
c3Ryb2tlUGFpbnQoKSwgaWQsIGhhc1BlbmRpbmdSZXNvdXJjZSkpKQorICAgICAgICAgICAgICAg
IGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGhhc1BlbmRpbmdS
ZXNvdXJjZSkKKyAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShleHRlbnNp
b25zLCBpZCwgZWxlbWVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2hhaW5hYmxl
UmVzb3VyY2VUYWdzKCkuY29udGFpbnModGFnTmFtZUltcGwpKSB7CisgICAgICAgIEF0b21pY1N0
cmluZyBpZCh0YXJnZXRSZWZlcmVuY2VGcm9tUmVzb3VyY2UoZWxlbWVudCkpOworICAgICAgICBp
ZiAoc2V0TGlua2VkUmVzb3VyY2UoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXJCeUlkKGRv
Y3VtZW50LCBpZCkpKQorICAgICAgICAgICAgZm91bmRSZXNvdXJjZXMgPSB0cnVlOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShleHRlbnNpb25zLCBp
ZCwgZWxlbWVudCk7CisgICAgfQorCisgICAgcmV0dXJuIGZvdW5kUmVzb3VyY2VzOworfQorCit2
b2lkIFNWR1Jlc291cmNlczo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFtX2NsaXBw
ZXJGaWx0ZXJNYXNrZXJEYXRhICYmICFtX21hcmtlckRhdGEgJiYgIW1fZmlsbFN0cm9rZURhdGEg
JiYgIW1fbGlua2VkUmVzb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2xpbmtl
ZFJlc291cmNlKSB7CisgICAgICAgIEFTU0VSVCghbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSk7
CisgICAgICAgIEFTU0VSVCghbV9tYXJrZXJEYXRhKTsKKyAgICAgICAgQVNTRVJUKCFtX2ZpbGxT
dHJva2VEYXRhKTsKKyAgICAgICAgbV9saW5rZWRSZXNvdXJjZS0+cmVtb3ZlQ2xpZW50RnJvbUNh
Y2hlKG9iamVjdCwgbWFya0ZvckludmFsaWRhdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSkgeworICAgICAgICBpZiAobV9j
bGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlcikKKyAgICAgICAgICAgIG1fY2xpcHBlckZp
bHRlck1hc2tlckRhdGEtPmNsaXBwZXItPnJlbW92ZUNsaWVudEZyb21DYWNoZShvYmplY3QsIG1h
cmtGb3JJbnZhbGlkYXRpb24pOworI2lmIEVOQUJMRShGSUxURVJTKQorICAgICAgICBpZiAobV9j
bGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyKQorICAgICAgICAgICAgbV9jbGlwcGVyRmls
dGVyTWFza2VyRGF0YS0+ZmlsdGVyLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0LCBtYXJr
Rm9ySW52YWxpZGF0aW9uKTsKKyNlbmRpZgorICAgICAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFz
a2VyRGF0YS0+bWFza2VyKQorICAgICAgICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+
bWFza2VyLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0LCBtYXJrRm9ySW52YWxpZGF0aW9u
KTsKKyAgICB9CisKKyAgICBpZiAobV9tYXJrZXJEYXRhKSB7CisgICAgICAgIGlmIChtX21hcmtl
ckRhdGEtPm1hcmtlclN0YXJ0KQorICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFy
dC0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKG9iamVjdCwgbWFya0ZvckludmFsaWRhdGlvbik7Cisg
ICAgICAgIGlmIChtX21hcmtlckRhdGEtPm1hcmtlck1pZCkKKyAgICAgICAgICAgIG1fbWFya2Vy
RGF0YS0+bWFya2VyTWlkLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0LCBtYXJrRm9ySW52
YWxpZGF0aW9uKTsKKyAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2VyRW5kKQorICAgICAg
ICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQtPnJlbW92ZUNsaWVudEZyb21DYWNoZShvYmpl
Y3QsIG1hcmtGb3JJbnZhbGlkYXRpb24pOworICAgIH0KKworICAgIGlmIChtX2ZpbGxTdHJva2VE
YXRhKSB7CisgICAgICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhLT5maWxsKQorICAgICAgICAgICAg
bV9maWxsU3Ryb2tlRGF0YS0+ZmlsbC0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKG9iamVjdCwgbWFy
a0ZvckludmFsaWRhdGlvbik7CisgICAgICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2Up
CisgICAgICAgICAgICBtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UtPnJlbW92ZUNsaWVudEZyb21D
YWNoZShvYmplY3QsIG1hcmtGb3JJbnZhbGlkYXRpb24pOworICAgIH0KK30KKwordm9pZCBTVkdS
ZXNvdXJjZXM6OnJlc291cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBy
ZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQocmVzb3VyY2UpOworICAgIGlmICghbV9jbGlwcGVyRmls
dGVyTWFza2VyRGF0YSAmJiAhbV9tYXJrZXJEYXRhICYmICFtX2ZpbGxTdHJva2VEYXRhICYmICFt
X2xpbmtlZFJlc291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9saW5rZWRSZXNv
dXJjZSA9PSByZXNvdXJjZSkgeworICAgICAgICBBU1NFUlQoIW1fY2xpcHBlckZpbHRlck1hc2tl
ckRhdGEpOworICAgICAgICBBU1NFUlQoIW1fbWFya2VyRGF0YSk7CisgICAgICAgIEFTU0VSVCgh
bV9maWxsU3Ryb2tlRGF0YSk7CisgICAgICAgIG1fbGlua2VkUmVzb3VyY2UtPnJlbW92ZUFsbENs
aWVudHNGcm9tQ2FjaGUoKTsKKyAgICAgICAgbV9saW5rZWRSZXNvdXJjZSA9IDA7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHJlc291cmNlLT5yZXNvdXJjZVR5cGUoKSkg
eworICAgIGNhc2UgTWFza2VyUmVzb3VyY2VUeXBlOgorICAgICAgICBpZiAoIW1fY2xpcHBlckZp
bHRlck1hc2tlckRhdGEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG1fY2xpcHBl
ckZpbHRlck1hc2tlckRhdGEtPm1hc2tlciA9PSByZXNvdXJjZSkgeworICAgICAgICAgICAgbV9j
bGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+bWFza2VyLT5yZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hl
KCk7CisgICAgICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXIgPSAwOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWFya2VyUmVzb3VyY2VUeXBlOgor
ICAgICAgICBpZiAoIW1fbWFya2VyRGF0YSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBp
ZiAobV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydCA9PSByZXNvdXJjZSkgeworICAgICAgICAgICAg
bV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydC0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOwor
ICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydCA9IDA7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2VyTWlkID09IHJlc291cmNlKSB7CisgICAgICAg
ICAgICBtX21hcmtlckRhdGEtPm1hcmtlck1pZC0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgp
OworICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJNaWQgPSAwOworICAgICAgICB9Cisg
ICAgICAgIGlmIChtX21hcmtlckRhdGEtPm1hcmtlckVuZCA9PSByZXNvdXJjZSkgeworICAgICAg
ICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQtPnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUo
KTsKKyAgICAgICAgICAgIG1fbWFya2VyRGF0YS0+bWFya2VyRW5kID0gMDsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhdHRlcm5SZXNvdXJjZVR5cGU6CisgICAgY2FzZSBM
aW5lYXJHcmFkaWVudFJlc291cmNlVHlwZToKKyAgICBjYXNlIFJhZGlhbEdyYWRpZW50UmVzb3Vy
Y2VUeXBlOgorICAgICAgICBpZiAoIW1fZmlsbFN0cm9rZURhdGEpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgaWYgKG1fZmlsbFN0cm9rZURhdGEtPmZpbGwgPT0gcmVzb3VyY2UpIHsKKyAg
ICAgICAgICAgIG1fZmlsbFN0cm9rZURhdGEtPmZpbGwtPnJlbW92ZUFsbENsaWVudHNGcm9tQ2Fj
aGUoKTsKKyAgICAgICAgICAgIG1fZmlsbFN0cm9rZURhdGEtPmZpbGwgPSAwOworICAgICAgICB9
CisgICAgICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UgPT0gcmVzb3VyY2UpIHsKKyAg
ICAgICAgICAgIG1fZmlsbFN0cm9rZURhdGEtPnN0cm9rZS0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21D
YWNoZSgpOworICAgICAgICAgICAgbV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlID0gMDsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbHRlclJlc291cmNlVHlwZToKKyNpZiBF
TkFCTEUoRklMVEVSUykKKyAgICAgICAgaWYgKCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRh
LT5maWx0ZXIgPT0gcmVzb3VyY2UpIHsKKyAgICAgICAgICAgIG1fY2xpcHBlckZpbHRlck1hc2tl
ckRhdGEtPmZpbHRlci0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOworICAgICAgICAgICAg
bV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyID0gMDsKKyAgICAgICAgfQorI2Vsc2UK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDbGlwcGVyUmVzb3VyY2VUeXBlOgorICAgICAgICBpZiAoIW1fY2xpcHBlckZpbHRl
ck1hc2tlckRhdGEpCisgICAgICAgICAgICBicmVhazsgCisgICAgICAgIGlmIChtX2NsaXBwZXJG
aWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyID09IHJlc291cmNlKSB7CisgICAgICAgICAgICBtX2Ns
aXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyLT5yZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hl
KCk7CisgICAgICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyID0gMDsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNvbGlkQ29sb3JSZXNvdXJjZVR5
cGU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBTVkdS
ZXNvdXJjZXM6OmJ1aWxkU2V0T2ZSZXNvdXJjZXMoSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lcio+JiBzZXQpCit7CisgICAgaWYgKCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhICYm
ICFtX21hcmtlckRhdGEgJiYgIW1fZmlsbFN0cm9rZURhdGEgJiYgIW1fbGlua2VkUmVzb3VyY2Up
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2xpbmtlZFJlc291cmNlKSB7CisgICAgICAg
IEFTU0VSVCghbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSk7CisgICAgICAgIEFTU0VSVCghbV9t
YXJrZXJEYXRhKTsKKyAgICAgICAgQVNTRVJUKCFtX2ZpbGxTdHJva2VEYXRhKTsKKyAgICAgICAg
c2V0LmFkZChtX2xpbmtlZFJlc291cmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKSB7CisgICAgICAgIGlmIChtX2NsaXBwZXJG
aWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyKQorICAgICAgICAgICAgc2V0LmFkZChtX2NsaXBwZXJG
aWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyKTsKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICAgICAg
aWYgKG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlcikKKyAgICAgICAgICAgIHNldC5h
ZGQobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyKTsKKyNlbmRpZgorICAgICAgICBp
ZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+bWFza2VyKQorICAgICAgICAgICAgc2V0LmFk
ZChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXIpOworICAgIH0KKworICAgIGlmICht
X21hcmtlckRhdGEpIHsKKyAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2VyU3RhcnQpCisg
ICAgICAgICAgICBzZXQuYWRkKG1fbWFya2VyRGF0YS0+bWFya2VyU3RhcnQpOworICAgICAgICBp
ZiAobV9tYXJrZXJEYXRhLT5tYXJrZXJNaWQpCisgICAgICAgICAgICBzZXQuYWRkKG1fbWFya2Vy
RGF0YS0+bWFya2VyTWlkKTsKKyAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2VyRW5kKQor
ICAgICAgICAgICAgc2V0LmFkZChtX21hcmtlckRhdGEtPm1hcmtlckVuZCk7CisgICAgfQorCisg
ICAgaWYgKG1fZmlsbFN0cm9rZURhdGEpIHsKKyAgICAgICAgaWYgKG1fZmlsbFN0cm9rZURhdGEt
PmZpbGwpCisgICAgICAgICAgICBzZXQuYWRkKG1fZmlsbFN0cm9rZURhdGEtPmZpbGwpOworICAg
ICAgICBpZiAobV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlKQorICAgICAgICAgICAgc2V0LmFkZCht
X2ZpbGxTdHJva2VEYXRhLT5zdHJva2UpOworICAgIH0KK30KKworYm9vbCBTVkdSZXNvdXJjZXM6
OnNldENsaXBwZXIoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyKQoreworICAgIGlm
ICghY2xpcHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGNsaXBwZXIt
PnJlc291cmNlVHlwZSgpID09IENsaXBwZXJSZXNvdXJjZVR5cGUpOworCisgICAgaWYgKCFtX2Ns
aXBwZXJGaWx0ZXJNYXNrZXJEYXRhKQorICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRh
ID0gQ2xpcHBlckZpbHRlck1hc2tlckRhdGE6OmNyZWF0ZSgpOworCisgICAgbV9jbGlwcGVyRmls
dGVyTWFza2VyRGF0YS0+Y2xpcHBlciA9IGNsaXBwZXI7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgU1ZHUmVzb3VyY2VzOjpyZXNldENsaXBwZXIoKQoreworICAgIEFTU0VSVChtX2NsaXBw
ZXJGaWx0ZXJNYXNrZXJEYXRhKTsKKyAgICBBU1NFUlQobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0
YS0+Y2xpcHBlcik7CisgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlciA9IDA7
Cit9CisKKyNpZiBFTkFCTEUoRklMVEVSUykKK2Jvb2wgU1ZHUmVzb3VyY2VzOjpzZXRGaWx0ZXIo
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBpZiAoIWZpbHRlcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGZpbHRlci0+cmVzb3VyY2VUeXBlKCkg
PT0gRmlsdGVyUmVzb3VyY2VUeXBlKTsKKworICAgIGlmICghbV9jbGlwcGVyRmlsdGVyTWFza2Vy
RGF0YSkKKyAgICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSA9IENsaXBwZXJGaWx0ZXJN
YXNrZXJEYXRhOjpjcmVhdGUoKTsKKworICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZp
bHRlciA9IGZpbHRlcjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTVkdSZXNvdXJjZXM6
OnJlc2V0RmlsdGVyKCkKK3sKKyAgICBBU1NFUlQobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSk7
CisgICAgQVNTRVJUKG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlcik7CisgICAgbV9j
bGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyID0gMDsKK30KKyNlbmRpZgorCitib29sIFNW
R1Jlc291cmNlczo6c2V0TWFya2VyU3RhcnQoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtl
clN0YXJ0KQoreworICAgIGlmICghbWFya2VyU3RhcnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEFTU0VSVChtYXJrZXJTdGFydC0+cmVzb3VyY2VUeXBlKCkgPT0gTWFya2VyUmVzb3Vy
Y2VUeXBlKTsKKworICAgIGlmICghbV9tYXJrZXJEYXRhKQorICAgICAgICBtX21hcmtlckRhdGEg
PSBNYXJrZXJEYXRhOjpjcmVhdGUoKTsKKworICAgIG1fbWFya2VyRGF0YS0+bWFya2VyU3RhcnQg
PSBtYXJrZXJTdGFydDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTVkdSZXNvdXJjZXM6
OnJlc2V0TWFya2VyU3RhcnQoKQoreworICAgIEFTU0VSVChtX21hcmtlckRhdGEpOworICAgIEFT
U0VSVChtX21hcmtlckRhdGEtPm1hcmtlclN0YXJ0KTsKKyAgICBtX21hcmtlckRhdGEtPm1hcmtl
clN0YXJ0ID0gMDsKK30KKworYm9vbCBTVkdSZXNvdXJjZXM6OnNldE1hcmtlck1pZChSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkKQoreworICAgIGlmICghbWFya2VyTWlkKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobWFya2VyTWlkLT5yZXNvdXJjZVR5cGUo
KSA9PSBNYXJrZXJSZXNvdXJjZVR5cGUpOworCisgICAgaWYgKCFtX21hcmtlckRhdGEpCisgICAg
ICAgIG1fbWFya2VyRGF0YSA9IE1hcmtlckRhdGE6OmNyZWF0ZSgpOworCisgICAgbV9tYXJrZXJE
YXRhLT5tYXJrZXJNaWQgPSBtYXJrZXJNaWQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
U1ZHUmVzb3VyY2VzOjpyZXNldE1hcmtlck1pZCgpCit7CisgICAgQVNTRVJUKG1fbWFya2VyRGF0
YSk7CisgICAgQVNTRVJUKG1fbWFya2VyRGF0YS0+bWFya2VyTWlkKTsKKyAgICBtX21hcmtlckRh
dGEtPm1hcmtlck1pZCA9IDA7Cit9CisKK2Jvb2wgU1ZHUmVzb3VyY2VzOjpzZXRNYXJrZXJFbmQo
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCkKK3sKKyAgICBpZiAoIW1hcmtlckVu
ZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG1hcmtlckVuZC0+cmVzb3Vy
Y2VUeXBlKCkgPT0gTWFya2VyUmVzb3VyY2VUeXBlKTsKKworICAgIGlmICghbV9tYXJrZXJEYXRh
KQorICAgICAgICBtX21hcmtlckRhdGEgPSBNYXJrZXJEYXRhOjpjcmVhdGUoKTsKKworICAgIG1f
bWFya2VyRGF0YS0+bWFya2VyRW5kID0gbWFya2VyRW5kOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFNWR1Jlc291cmNlczo6cmVzZXRNYXJrZXJFbmQoKQoreworICAgIEFTU0VSVChtX21h
cmtlckRhdGEpOworICAgIEFTU0VSVChtX21hcmtlckRhdGEtPm1hcmtlckVuZCk7CisgICAgbV9t
YXJrZXJEYXRhLT5tYXJrZXJFbmQgPSAwOworfQorCitib29sIFNWR1Jlc291cmNlczo6c2V0TWFz
a2VyKFJlbmRlclNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIpCit7CisgICAgaWYgKCFtYXNrZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChtYXNrZXItPnJlc291cmNlVHlw
ZSgpID09IE1hc2tlclJlc291cmNlVHlwZSk7CisKKyAgICBpZiAoIW1fY2xpcHBlckZpbHRlck1h
c2tlckRhdGEpCisgICAgICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEgPSBDbGlwcGVyRmls
dGVyTWFza2VyRGF0YTo6Y3JlYXRlKCk7CisKKyAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRh
LT5tYXNrZXIgPSBtYXNrZXI7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1ZHUmVzb3Vy
Y2VzOjpyZXNldE1hc2tlcigpCit7CisgICAgQVNTRVJUKG1fY2xpcHBlckZpbHRlck1hc2tlckRh
dGEpOworICAgIEFTU0VSVChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXIpOworICAg
IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tlciA9IDA7Cit9CisKK2Jvb2wgU1ZHUmVz
b3VyY2VzOjpzZXRGaWxsKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBmaWxsKQoreworICAg
IGlmICghZmlsbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGZpbGwtPnJl
c291cmNlVHlwZSgpID09IFBhdHRlcm5SZXNvdXJjZVR5cGUKKyAgICAgICAgICAgfHwgZmlsbC0+
cmVzb3VyY2VUeXBlKCkgPT0gTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGUKKyAgICAgICAgICAg
fHwgZmlsbC0+cmVzb3VyY2VUeXBlKCkgPT0gUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGUpOwor
CisgICAgaWYgKCFtX2ZpbGxTdHJva2VEYXRhKQorICAgICAgICBtX2ZpbGxTdHJva2VEYXRhID0g
RmlsbFN0cm9rZURhdGE6OmNyZWF0ZSgpOworCisgICAgbV9maWxsU3Ryb2tlRGF0YS0+ZmlsbCA9
IGZpbGw7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1ZHUmVzb3VyY2VzOjpyZXNldEZp
bGwoKQoreworICAgIEFTU0VSVChtX2ZpbGxTdHJva2VEYXRhKTsKKyAgICBBU1NFUlQobV9maWxs
U3Ryb2tlRGF0YS0+ZmlsbCk7CisgICAgbV9maWxsU3Ryb2tlRGF0YS0+ZmlsbCA9IDA7Cit9CisK
K2Jvb2wgU1ZHUmVzb3VyY2VzOjpzZXRTdHJva2UoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIq
IHN0cm9rZSkKK3sKKyAgICBpZiAoIXN0cm9rZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgQVNTRVJUKHN0cm9rZS0+cmVzb3VyY2VUeXBlKCkgPT0gUGF0dGVyblJlc291cmNlVHlwZQor
ICAgICAgICAgICB8fCBzdHJva2UtPnJlc291cmNlVHlwZSgpID09IExpbmVhckdyYWRpZW50UmVz
b3VyY2VUeXBlCisgICAgICAgICAgIHx8IHN0cm9rZS0+cmVzb3VyY2VUeXBlKCkgPT0gUmFkaWFs
R3JhZGllbnRSZXNvdXJjZVR5cGUpOworCisgICAgaWYgKCFtX2ZpbGxTdHJva2VEYXRhKQorICAg
ICAgICBtX2ZpbGxTdHJva2VEYXRhID0gRmlsbFN0cm9rZURhdGE6OmNyZWF0ZSgpOworCisgICAg
bV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlID0gc3Ryb2tlOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFNWR1Jlc291cmNlczo6cmVzZXRTdHJva2UoKQoreworICAgIEFTU0VSVChtX2ZpbGxT
dHJva2VEYXRhKTsKKyAgICBBU1NFUlQobV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlKTsKKyAgICBt
X2ZpbGxTdHJva2VEYXRhLT5zdHJva2UgPSAwOworfQorCitib29sIFNWR1Jlc291cmNlczo6c2V0
TGlua2VkUmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGxpbmtlZFJlc291cmNl
KQoreworICAgIGlmICghbGlua2VkUmVzb3VyY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1fbGlua2VkUmVzb3VyY2UgPSBsaW5rZWRSZXNvdXJjZTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBTVkdSZXNvdXJjZXM6OnJlc2V0TGlua2VkUmVzb3VyY2UoKQoreworICAgIEFT
U0VSVChtX2xpbmtlZFJlc291cmNlKTsKKyAgICBtX2xpbmtlZFJlc291cmNlID0gMDsKK30KKwor
I2lmbmRlZiBOREVCVUcKK3ZvaWQgU1ZHUmVzb3VyY2VzOjpkdW1wKGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0KQoreworICAgIEFTU0VSVChvYmplY3QpOworICAgIEFTU0VSVChvYmplY3QtPm5v
ZGUoKSk7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIi0+IHRoaXM9JXAsIFNWR1Jlc291cmNlcyhy
ZW5kZXJlcj0lcCwgbm9kZT0lcClcbiIsIHRoaXMsIG9iamVjdCwgb2JqZWN0LT5ub2RlKCkpOwor
ICAgIGZwcmludGYoc3RkZXJyLCAiIHwgRE9NIFRyZWU6XG4iKTsKKyAgICBvYmplY3QtPm5vZGUo
KS0+c2hvd1RyZWVGb3JUaGlzKCk7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIHwgTGlzdCBv
ZiByZXNvdXJjZXM6XG4iKTsKKyAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSkgewor
ICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gbV9jbGlwcGVy
RmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlcikKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
IHwtPiBDbGlwcGVyICAgIDogJXAgKG5vZGU9JXApXG4iLCBjbGlwcGVyLCBjbGlwcGVyLT5ub2Rl
KCkpOworI2lmIEVOQUJMRShGSUxURVJTKQorICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIqIGZpbHRlciA9IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlcikKKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHwtPiBGaWx0ZXIgICAgIDogJXAgKG5vZGU9JXApXG4i
LCBmaWx0ZXIsIGZpbHRlci0+bm9kZSgpKTsKKyNlbmRpZgorICAgICAgICBpZiAoUmVuZGVyU1ZH
UmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tl
cikKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHwtPiBNYXNrZXIgICAgIDogJXAgKG5v
ZGU9JXApXG4iLCBtYXNrZXIsIG1hc2tlci0+bm9kZSgpKTsKKyAgICB9CisKKyAgICBpZiAobV9t
YXJrZXJEYXRhKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2Vy
U3RhcnQgPSBtX21hcmtlckRhdGEtPm1hcmtlclN0YXJ0KQorICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICIgfC0+IE1hcmtlclN0YXJ0OiAlcCAobm9kZT0lcClcbiIsIG1hcmtlclN0YXJ0LCBt
YXJrZXJTdGFydC0+bm9kZSgpKTsKKyAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFya2Vy
KiBtYXJrZXJNaWQgPSBtX21hcmtlckRhdGEtPm1hcmtlck1pZCkKKyAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiIHwtPiBNYXJrZXJNaWQgIDogJXAgKG5vZGU9JXApXG4iLCBtYXJrZXJNaWQs
IG1hcmtlck1pZC0+bm9kZSgpKTsKKyAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFya2Vy
KiBtYXJrZXJFbmQgPSBtX21hcmtlckRhdGEtPm1hcmtlckVuZCkKKyAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiIHwtPiBNYXJrZXJFbmQgIDogJXAgKG5vZGU9JXApXG4iLCBtYXJrZXJFbmQs
IG1hcmtlckVuZC0+bm9kZSgpKTsKKyAgICB9CisKKyAgICBpZiAobV9maWxsU3Ryb2tlRGF0YSkg
eworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGZpbGwgPSBtX2ZpbGxT
dHJva2VEYXRhLT5maWxsKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfC0+IEZpbGwg
ICAgICAgOiAlcCAobm9kZT0lcClcbiIsIGZpbGwsIGZpbGwtPm5vZGUoKSk7CisgICAgICAgIGlm
IChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogc3Ryb2tlID0gbV9maWxsU3Ryb2tlRGF0YS0+
c3Ryb2tlKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfC0+IFN0cm9rZSAgICAgOiAl
cCAobm9kZT0lcClcbiIsIHN0cm9rZSwgc3Ryb2tlLT5ub2RlKCkpOworICAgIH0KKworICAgIGlm
IChtX2xpbmtlZFJlc291cmNlKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiB8LT4geGxpbms6
aHJlZiA6ICVwIChub2RlPSVwKVxuIiwgbV9saW5rZWRSZXNvdXJjZSwgbV9saW5rZWRSZXNvdXJj
ZS0+bm9kZSgpKTsKK30KKyNlbmRpZgorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5oCShyZXZpc2lvbiA3NTM0NSkJKGZyb20g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlcy5oOjc1MzQ1KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdSZXNvdXJjZXNfaAor
I2RlZmluZSBTVkdSZXNvdXJjZXNfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgUmVuZGVyT2JqZWN0OworY2xhc3MgUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyOworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI7Citj
bGFzcyBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjsKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyOworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI7CitjbGFzcyBTVkdSZW5kZXJTdHls
ZTsKKworLy8gSG9sZHMgYSBzZXQgb2YgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIFJlbmRl
ck9iamVjdAorY2xhc3MgU1ZHUmVzb3VyY2VzIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1Ymxp
YzoKKyAgICBTVkdSZXNvdXJjZXMoKTsKKworICAgIGJvb2wgYnVpbGRDYWNoZWRSZXNvdXJjZXMo
Y29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgU1ZHUmVuZGVyU3R5bGUqKTsKKworICAgIC8vIE9y
ZGluYXJ5IHJlc291cmNlcworICAgIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBlcigp
IGNvbnN0IHsgcmV0dXJuIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEgPyBtX2NsaXBwZXJGaWx0
ZXJNYXNrZXJEYXRhLT5jbGlwcGVyIDogMDsgfQorI2lmIEVOQUJMRShGSUxURVJTKQorICAgIFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2NsaXBwZXJG
aWx0ZXJNYXNrZXJEYXRhID8gbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyIDogMDsg
fQorI2VuZGlmCisgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0KCkgY29u
c3QgeyByZXR1cm4gbV9tYXJrZXJEYXRhID8gbV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydCA6IDA7
IH0KKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkKCkgY29uc3QgeyByZXR1
cm4gbV9tYXJrZXJEYXRhID8gbV9tYXJrZXJEYXRhLT5tYXJrZXJNaWQgOiAwOyB9CisgICAgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2Vy
RGF0YSA/IG1fbWFya2VyRGF0YS0+bWFya2VyRW5kIDogMDsgfQorICAgIFJlbmRlclNWR1Jlc291
cmNlTWFza2VyKiBtYXNrZXIoKSBjb25zdCB7IHJldHVybiBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJE
YXRhID8gbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+bWFza2VyIDogMDsgfQorCisgICAgLy8g
UGFpbnQgc2VydmVycworICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBmaWxsKCkgY29u
c3QgeyByZXR1cm4gbV9maWxsU3Ryb2tlRGF0YSA/IG1fZmlsbFN0cm9rZURhdGEtPmZpbGwgOiAw
OyB9CisgICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHN0cm9rZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZmlsbFN0cm9rZURhdGEgPyBtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UgOiAwOyB9CisK
KyAgICAvLyBDaGFpbmFibGUgcmVzb3VyY2VzIC0gbGlua2VkIHRocm91Z2ggeGxpbms6aHJlZgor
ICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBsaW5rZWRSZXNvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlua2VkUmVzb3VyY2U7IH0KKworICAgIHZvaWQgYnVpbGRTZXRPZlJlc291cmNl
cyhIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj4mKTsKKworICAgIC8vIE1ldGhv
ZHMgb3BlcmF0aW5nIG9uIGFsbCBjYWNoZWQgcmVzb3VyY2VzCisgICAgdm9pZCByZW1vdmVDbGll
bnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1
ZSkgY29uc3Q7CisgICAgdm9pZCByZXNvdXJjZURlc3Ryb3llZChSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lciopOworCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcChjb25zdCBSZW5kZXJP
YmplY3QqKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTVkdSZXNvdXJj
ZXNDeWNsZVNvbHZlcjsKKworICAgIC8vIE9ubHkgdXNlZCBieSBTVkdSZXNvdXJjZXNDYWNoZSBj
eWNsZSBkZXRlY3Rpb24gbG9naWMKKyAgICB2b2lkIHJlc2V0Q2xpcHBlcigpOworI2lmIEVOQUJM
RShGSUxURVJTKQorICAgIHZvaWQgcmVzZXRGaWx0ZXIoKTsKKyNlbmRpZgorICAgIHZvaWQgcmVz
ZXRNYXJrZXJTdGFydCgpOworICAgIHZvaWQgcmVzZXRNYXJrZXJNaWQoKTsKKyAgICB2b2lkIHJl
c2V0TWFya2VyRW5kKCk7CisgICAgdm9pZCByZXNldE1hc2tlcigpOworICAgIHZvaWQgcmVzZXRG
aWxsKCk7CisgICAgdm9pZCByZXNldFN0cm9rZSgpOworICAgIHZvaWQgcmVzZXRMaW5rZWRSZXNv
dXJjZSgpOworCitwcml2YXRlOgorICAgIGJvb2wgc2V0Q2xpcHBlcihSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIqKTsKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBib29sIHNldEZpbHRlcihSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlciopOworI2VuZGlmCisgICAgYm9vbCBzZXRNYXJrZXJTdGFydChS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlciopOworICAgIGJvb2wgc2V0TWFya2VyTWlkKFJlbmRlclNW
R1Jlc291cmNlTWFya2VyKik7CisgICAgYm9vbCBzZXRNYXJrZXJFbmQoUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXIqKTsKKyAgICBib29sIHNldE1hc2tlcihSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciop
OworICAgIGJvb2wgc2V0RmlsbChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciopOworICAgIGJv
b2wgc2V0U3Ryb2tlKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKik7CisgICAgYm9vbCBzZXRM
aW5rZWRSZXNvdXJjZShSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciopOworCisgICAgLy8gRnJv
bSBTVkcgMS4xIDJuZCBFZGl0aW9uCisgICAgLy8gY2xpcHBlcjogJ2NvbnRhaW5lciBlbGVtZW50
cycgYW5kICdncmFwaGljcyBlbGVtZW50cycKKyAgICAvLyBmaWx0ZXI6ICAnY29udGFpbmVyIGVs
ZW1lbnRzJyBhbmQgJ2dyYXBoaWNzIGVsZW1lbnRzJworICAgIC8vIG1hc2tlcjogICdjb250YWlu
ZXIgZWxlbWVudHMnIGFuZCAnZ3JhcGhpY3MgZWxlbWVudHMnCisgICAgLy8gLT4gYSwgY2lyY2xl
LCBkZWZzLCBlbGxpcHNlLCBnbHlwaCwgZywgaW1hZ2UsIGxpbmUsIG1hcmtlciwgbWFzaywgbWlz
c2luZy1nbHlwaCwgcGF0aCwgcGF0dGVybiwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHN2Zywg
c3dpdGNoLCBzeW1ib2wsIHRleHQsIHVzZQorICAgIHN0cnVjdCBDbGlwcGVyRmlsdGVyTWFza2Vy
RGF0YSB7CisgICAgICAgIENsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKCkKKyAgICAgICAgICAgIDog
Y2xpcHBlcigwKQorI2lmIEVOQUJMRShGSUxURVJTKQorICAgICAgICAgICAgLCBmaWx0ZXIoMCkK
KyNlbmRpZgorICAgICAgICAgICAgLCBtYXNrZXIoMCkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8Q2xpcHBlckZpbHRlck1hc2tlckRhdGE+IGNyZWF0
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2xpcHBlckZpbHRlck1hc2tl
ckRhdGE7CisgICAgICAgIH0KKworICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNs
aXBwZXI7CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgICAgIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyKiBmaWx0ZXI7CisjZW5kaWYKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqIG1h
c2tlcjsKKyAgICB9OworCisgICAgLy8gRnJvbSBTVkcgMS4xIDJuZCBFZGl0aW9uCisgICAgLy8g
bWFya2VyOiBsaW5lLCBwYXRoLCBwb2x5Z29uLCBwb2x5bGluZQorICAgIHN0cnVjdCBNYXJrZXJE
YXRhIHsKKyAgICAgICAgTWFya2VyRGF0YSgpCisgICAgICAgICAgICA6IG1hcmtlclN0YXJ0KDAp
CisgICAgICAgICAgICAsIG1hcmtlck1pZCgwKQorICAgICAgICAgICAgLCBtYXJrZXJFbmQoMCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TWFya2Vy
RGF0YT4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXJrZXJE
YXRhOworICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtl
clN0YXJ0OworICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkOworICAg
ICAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRW5kOworICAgIH07CisKKyAgICAv
LyBGcm9tIFNWRyAxLjEgMm5kIEVkaXRpb24KKyAgICAvLyBmaWxsOiAgICAgICAnc2hhcGVzJyBh
bmQgJ3RleHQgY29udGVudCBlbGVtZW50cycKKyAgICAvLyBzdHJva2U6ICAgICAnc2hhcGVzJyBh
bmQgJ3RleHQgY29udGVudCBlbGVtZW50cycKKyAgICAvLyAtPiBhbHRHbHlwaCwgY2lyY2xlLCBl
bGxpcHNlLCBsaW5lLCBwYXRoLCBwb2x5Z29uLCBwb2x5bGluZSwgcmVjdCwgdGV4dCwgdGV4dFBh
dGgsIHRyZWYsIHRzcGFuCisgICAgc3RydWN0IEZpbGxTdHJva2VEYXRhIHsKKyAgICAgICAgRmls
bFN0cm9rZURhdGEoKQorICAgICAgICAgICAgOiBmaWxsKDApCisgICAgICAgICAgICAsIHN0cm9r
ZSgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgUGFzc093blB0cjxG
aWxsU3Ryb2tlRGF0YT4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5l
dyBGaWxsU3Ryb2tlRGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyKiBmaWxsOworICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogc3Ry
b2tlOworICAgIH07CisKKyAgICBPd25QdHI8Q2xpcHBlckZpbHRlck1hc2tlckRhdGE+IG1fY2xp
cHBlckZpbHRlck1hc2tlckRhdGE7CisgICAgT3duUHRyPE1hcmtlckRhdGE+IG1fbWFya2VyRGF0
YTsKKyAgICBPd25QdHI8RmlsbFN0cm9rZURhdGE+IG1fZmlsbFN0cm9rZURhdGE7CisgICAgUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIG1fbGlua2VkUmVzb3VyY2U7Cit9OworCit9CisKKyNl
bmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291
cmNlc0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1Jlc291cmNlc0NhY2hlLmNwcAkocmV2aXNpb24gNzUzNDUpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5jcHA6NzUzNDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRF
eHRlbnNpb25zLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCisjaW5jbHVkZSAiU1ZHUmVz
b3VyY2VzQ3ljbGVTb2x2ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVkdSZXNvdXJj
ZXNDYWNoZTo6U1ZHUmVzb3VyY2VzQ2FjaGUoKQoreworfQorCitTVkdSZXNvdXJjZXNDYWNoZTo6
flNWR1Jlc291cmNlc0NhY2hlKCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9jYWNoZSk7Cit9
CisKK3ZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OmFkZFJlc291cmNlc0Zyb21SZW5kZXJPYmplY3Qo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICBB
U1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQoc3R5bGUpOworICAgIEFTU0VSVCghbV9jYWNoZS5j
b250YWlucyhvYmplY3QpKTsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9
IHN0eWxlLT5zdmdTdHlsZSgpOworICAgIEFTU0VSVChzdmdTdHlsZSk7CisKKyAgICAvLyBCdWls
ZCBhIGxpc3Qgb2YgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhc3NlZCBSZW5k
ZXJPYmplY3QKKyAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IG5ldyBTVkdSZXNvdXJjZXM7
CisgICAgaWYgKCFyZXNvdXJjZXMtPmJ1aWxkQ2FjaGVkUmVzb3VyY2VzKG9iamVjdCwgc3ZnU3R5
bGUpKSB7CisgICAgICAgIGRlbGV0ZSByZXNvdXJjZXM7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBQdXQgb2JqZWN0IGluIGNhY2hlLgorICAgIG1fY2FjaGUuc2V0KG9iamVjdCwg
cmVzb3VyY2VzKTsKKworICAgIC8vIFJ1biBjeWNsZS1kZXRlY3Rpb24gX2FmdGVyd2FyZHNfLCBz
byBzZWxmLXJlZmVyZW5jZXMgY2FuIGJlIGNhdWdodCBhcyB3ZWxsLgorICAgIFNWR1Jlc291cmNl
c0N5Y2xlU29sdmVyIHNvbHZlcihvYmplY3QsIHJlc291cmNlcyk7CisgICAgc29sdmVyLnJlc29s
dmVDeWNsZXMoKTsKKworICAgIC8vIFdhbGsgcmVzb3VyY2VzIGFuZCByZWdpc3RlciB0aGUgcmVu
ZGVyIG9iamVjdCBhdCBlYWNoIHJlc291cmNlcy4KKyAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyKj4gcmVzb3VyY2VTZXQ7CisgICAgcmVzb3VyY2VzLT5idWlsZFNldE9mUmVz
b3VyY2VzKHJlc291cmNlU2V0KTsKKworICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIqPjo6aXRlcmF0b3IgZW5kID0gcmVzb3VyY2VTZXQuZW5kKCk7CisgICAgZm9yIChIYXNo
U2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGl0ID0gcmVzb3VyY2VT
ZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+YWRkQ2xpZW50KG9i
amVjdCk7Cit9CisKK3ZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlbW92ZVJlc291cmNlc0Zyb21S
ZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKCFtX2NhY2hlLmNv
bnRhaW5zKG9iamVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNWR1Jlc291cmNlcyogcmVz
b3VyY2VzID0gbV9jYWNoZS5nZXQob2JqZWN0KTsKKworICAgIC8vIFdhbGsgcmVzb3VyY2VzIGFu
ZCByZWdpc3RlciB0aGUgcmVuZGVyIG9iamVjdCBhdCBlYWNoIHJlc291cmNlcy4KKyAgICBIYXNo
U2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj4gcmVzb3VyY2VTZXQ7CisgICAgcmVzb3Vy
Y2VzLT5idWlsZFNldE9mUmVzb3VyY2VzKHJlc291cmNlU2V0KTsKKworICAgIEhhc2hTZXQ8UmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPjo6aXRlcmF0b3IgZW5kID0gcmVzb3VyY2VTZXQuZW5k
KCk7CisgICAgZm9yIChIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJh
dG9yIGl0ID0gcmVzb3VyY2VTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAo
Kml0KS0+cmVtb3ZlQ2xpZW50KG9iamVjdCk7CisKKyAgICBkZWxldGUgbV9jYWNoZS50YWtlKG9i
amVjdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgU1ZHUmVzb3VyY2VzQ2FjaGUqIHJlc291cmNlc0Nh
Y2hlRnJvbVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IHJlbmRlcmVyLT5kb2N1bWVudCgpOworICAgIEFTU0VSVChkb2N1bWVu
dCk7CisKKyAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lvbnMgPSBkb2N1bWVudC0+
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpOworICAgIEFTU0VSVChleHRlbnNpb25zKTsKKworICAgIFNW
R1Jlc291cmNlc0NhY2hlKiBjYWNoZSA9IGV4dGVuc2lvbnMtPnJlc291cmNlc0NhY2hlKCk7Cisg
ICAgQVNTRVJUKGNhY2hlKTsKKworICAgIHJldHVybiBjYWNoZTsKK30KKworU1ZHUmVzb3VyY2Vz
KiBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgQVNTRVJUKHJlbmRlcmVyKTsKKyAgICBTVkdSZXNv
dXJjZXNDYWNoZSogY2FjaGUgPSByZXNvdXJjZXNDYWNoZUZyb21SZW5kZXJPYmplY3QocmVuZGVy
ZXIpOworICAgIGlmICghY2FjaGUtPm1fY2FjaGUuY29udGFpbnMocmVuZGVyZXIpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBjYWNoZS0+bV9jYWNoZS5nZXQocmVuZGVyZXIpOwor
fQorCit2b2lkIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKFJlbmRlck9i
amVjdCogb2JqZWN0KQoreworICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3Vy
Y2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChvYmplY3QpOworICAgIGlm
ICghcmVzb3VyY2VzKQorICAgICAgICByZXR1cm47CisKKyAgICByZXNvdXJjZXMtPnJlbW92ZUNs
aWVudEZyb21DYWNoZShvYmplY3QpOworfQorCit2b2lkIFNWR1Jlc291cmNlc0NhY2hlOjpjbGll
bnRTdHlsZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgU3R5bGVEaWZmZXJlbmNlIGRp
ZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKK3sKKyAgICBBU1NFUlQocmVuZGVyZXIp
OworICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZUVxdWFsKQorICAgICAgICByZXR1cm47
CisKKyAgICBjbGllbnRVcGRhdGVkRnJvbUVsZW1lbnQocmVuZGVyZXIsIG5ld1N0eWxlKTsKKyAg
ICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxp
ZGF0aW9uKHJlbmRlcmVyLCBmYWxzZSk7Cit9CisgCit2b2lkIFNWR1Jlc291cmNlc0NhY2hlOjpj
bGllbnRVcGRhdGVkRnJvbUVsZW1lbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVu
ZGVyU3R5bGUqIG5ld1N0eWxlKQoreworICAgIEFTU0VSVChyZW5kZXJlcik7CisgICAgQVNTRVJU
KHJlbmRlcmVyLT5wYXJlbnQoKSk7CisKKyAgICBTVkdSZXNvdXJjZXNDYWNoZSogY2FjaGUgPSBy
ZXNvdXJjZXNDYWNoZUZyb21SZW5kZXJPYmplY3QocmVuZGVyZXIpOworICAgIGNhY2hlLT5yZW1v
dmVSZXNvdXJjZXNGcm9tUmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKKyAgICBjYWNoZS0+YWRkUmVz
b3VyY2VzRnJvbVJlbmRlck9iamVjdChyZW5kZXJlciwgbmV3U3R5bGUpOworfQorCit2b2lkIFNW
R1Jlc291cmNlc0NhY2hlOjpjbGllbnREZXN0cm95ZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
K3sKKyAgICBBU1NFUlQocmVuZGVyZXIpOworICAgIFNWR1Jlc291cmNlc0NhY2hlKiBjYWNoZSA9
IHJlc291cmNlc0NhY2hlRnJvbVJlbmRlck9iamVjdChyZW5kZXJlcik7CisgICAgY2FjaGUtPnJl
bW92ZVJlc291cmNlc0Zyb21SZW5kZXJPYmplY3QocmVuZGVyZXIpOworfQorCit2b2lkIFNWR1Jl
c291cmNlc0NhY2hlOjpyZXNvdXJjZURlc3Ryb3llZChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
ciogcmVzb3VyY2UpCit7CisgICAgQVNTRVJUKHJlc291cmNlKTsKKyAgICBTVkdSZXNvdXJjZXND
YWNoZSogY2FjaGUgPSByZXNvdXJjZXNDYWNoZUZyb21SZW5kZXJPYmplY3QocmVzb3VyY2UpOwor
CisgICAgLy8gVGhlIHJlc291cmNlIGl0c2VsZiBtYXkgaGF2ZSBjbGllbnRzLCB0aGF0IG5lZWQg
dG8gYmUgbm90aWZpZWQuCisgICAgY2FjaGUtPnJlbW92ZVJlc291cmNlc0Zyb21SZW5kZXJPYmpl
Y3QocmVzb3VyY2UpOworCisgICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBTVkdSZXNvdXJjZXMq
Pjo6aXRlcmF0b3IgZW5kID0gY2FjaGUtPm1fY2FjaGUuZW5kKCk7CisgICAgZm9yIChIYXNoTWFw
PFJlbmRlck9iamVjdCosIFNWR1Jlc291cmNlcyo+OjppdGVyYXRvciBpdCA9IGNhY2hlLT5tX2Nh
Y2hlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+cmVzb3Vy
Y2VEZXN0cm95ZWQocmVzb3VyY2UpOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuaAkocmV2aXNpb24g
NzUzNDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5o
Ojc1MzQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNo
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgU1ZHUmVzb3VyY2VzQ2FjaGVfaAorI2RlZmluZSBTVkdSZXNvdXJjZXNDYWNoZV9oCisK
KyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5k
ZXJPYmplY3Q7CitjbGFzcyBSZW5kZXJTdHlsZTsKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyOworY2xhc3MgU1ZHUmVzb3VyY2VzOworCitjbGFzcyBTVkdSZXNvdXJjZXNDYWNoZSA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGUoKTsK
KyAgICB+U1ZHUmVzb3VyY2VzQ2FjaGUoKTsKKworICAgIHZvaWQgYWRkUmVzb3VyY2VzRnJvbVJl
bmRlck9iamVjdChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSopOworICAgIHZvaWQg
cmVtb3ZlUmVzb3VyY2VzRnJvbVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqKTsKKyAgICBzdGF0
aWMgU1ZHUmVzb3VyY2VzKiBjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QoUmVuZGVyT2Jq
ZWN0Kik7CisKKyAgICAvLyBDYWxsZWQgZnJvbSBhbGwgU1ZHIHJlbmRlcmVycyBkZXN0cm95KCkg
bWV0aG9kcyAtIGV4Y2VwdCBmb3IgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuCisgICAgc3Rh
dGljIHZvaWQgY2xpZW50RGVzdHJveWVkKFJlbmRlck9iamVjdCopOworCisgICAgLy8gQ2FsbGVk
IGZyb20gYWxsIFNWRyByZW5kZXJlcnMgbGF5b3V0KCkgbWV0aG9kcy4KKyAgICBzdGF0aWMgdm9p
ZCBjbGllbnRMYXlvdXRDaGFuZ2VkKFJlbmRlck9iamVjdCopOworCisgICAgLy8gQ2FsbGVkIGZy
b20gYWxsIFNWRyByZW5kZXJlcnMgc3R5bGVEaWRDaGFuZ2UoKSBtZXRob2RzLgorICAgIHN0YXRp
YyB2b2lkIGNsaWVudFN0eWxlQ2hhbmdlZChSZW5kZXJPYmplY3QqLCBTdHlsZURpZmZlcmVuY2Us
IGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CisKKyAgICAvLyBDYWxsZWQgZnJvbSBhbGwg
U1ZHIHJlbmRlcmVycyB1cGRhdGVGcm9tRWxlbWVudCgpIG1ldGhvZHMuCisgICAgc3RhdGljIHZv
aWQgY2xpZW50VXBkYXRlZEZyb21FbGVtZW50KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0
eWxlKiBuZXdTdHlsZSk7CisKKyAgICAvLyBDYWxsZWQgZnJvbSBSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lcjo6ZGVzdHJveSgpLgorICAgIHN0YXRpYyB2b2lkIHJlc291cmNlRGVzdHJveWVkKFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyKik7CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxSZW5k
ZXJPYmplY3QqLCBTVkdSZXNvdXJjZXMqPiBtX2NhY2hlOworfTsKKworfQorCisjZW5kaWYKKyNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNs
ZVNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAJKHJldmlzaW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwOjc1MzQ1KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oIgorCisv
LyBTZXQgdG8gYSB2YWx1ZSA+IDAsIHRvIGRlYnVnIHRoZSByZXNvdXJjZSBjYWNoZS4KKyNkZWZp
bmUgREVCVUdfQ1lDTEVfREVURUNUSU9OIDAKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlTWFza2VyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5o
IgorI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1BhdHRlcm5F
bGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3Vy
Y2VzQ2FjaGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVkdSZXNvdXJjZXNDeWNsZVNv
bHZlcjo6U1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgU1ZH
UmVzb3VyY2VzKiByZXNvdXJjZXMpCisgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQorICAgICwg
bV9yZXNvdXJjZXMocmVzb3VyY2VzKQoreworICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKKyAgICBB
U1NFUlQobV9yZXNvdXJjZXMpOworfQorCitTVkdSZXNvdXJjZXNDeWNsZVNvbHZlcjo6flNWR1Jl
c291cmNlc0N5Y2xlU29sdmVyKCkKK3sKK30KKworYm9vbCBTVkdSZXNvdXJjZXNDeWNsZVNvbHZl
cjo6cmVzb3VyY2VDb250YWluc0N5Y2xlcyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25zdAor
eworICAgIEFTU0VSVChyZW5kZXJlcik7CisKKyAgICAvLyBGaXJzdCBvcGVyYXRlIG9uIHRoZSBy
ZXNvdXJjZXMgb2YgdGhlIGdpdmVuIHJlbmRlcmVyLgorICAgIC8vIDxtYXJrZXIgaWQ9ImEiPiA8
cGF0aCBtYXJrZXItc3RhcnQ9InVybCgjYikiLz4gLi4uCisgICAgLy8gPG1hcmtlciBpZD0iYiIg
bWFya2VyLXN0YXJ0PSJ1cmwoI2EpIi8+CisgICAgaWYgKFNWR1Jlc291cmNlcyogcmVzb3VyY2Vz
ID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChyZW5k
ZXJlcikpIHsKKyAgICAgICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+IHJl
c291cmNlU2V0OworICAgICAgICByZXNvdXJjZXMtPmJ1aWxkU2V0T2ZSZXNvdXJjZXMocmVzb3Vy
Y2VTZXQpOworCisgICAgICAgIC8vIFdhbGsgYWxsIHJlc291cmNlcyBhbmQgY2hlY2sgd2hldGVy
IHRoZXkgcmVmZXJlbmNlIGFueSByZXNvdXJjZSBjb250YWluZWQgaW4gdGhlIHJlc291cmNlcyBz
ZXQuCisgICAgICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPjo6aXRlcmF0
b3IgZW5kID0gcmVzb3VyY2VTZXQuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IHJlc291cmNlU2V0LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaWYgKG1fYWxsUmVzb3VyY2VzLmNvbnRh
aW5zKCppdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBUaGVuIG9wZXJhdGUgb24gdGhlIGNoaWxkIHJlc291cmNlcyBvZiB0aGUgZ2l2
ZW4gcmVuZGVyZXIuCisgICAgLy8gPG1hcmtlciBpZD0iYSI+IDxwYXRoIG1hcmtlci1zdGFydD0i
dXJsKCNiKSIvPiAuLi4KKyAgICAvLyA8bWFya2VyIGlkPSJiIj4gPHBhdGggbWFya2VyLXN0YXJ0
PSJ1cmwoI2EpIi8+IC4uLgorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJlbmRlcmVy
LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Cisg
ICAgICAgIFNWR1Jlc291cmNlcyogY2hpbGRSZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6
Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KGNoaWxkKTsKKyAgICAgICAgaWYgKCFjaGls
ZFJlc291cmNlcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgLy8g
QSBjaGlsZCBvZiB0aGUgZ2l2ZW4gJ3Jlc291cmNlJyBjb250YWlucyByZXNvdXJjZXMuIAorICAg
ICAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj4gY2hpbGRTZXQ7CisgICAg
ICAgIGNoaWxkUmVzb3VyY2VzLT5idWlsZFNldE9mUmVzb3VyY2VzKGNoaWxkU2V0KTsKKworICAg
ICAgICAvLyBXYWxrIGFsbCBjaGlsZCByZXNvdXJjZXMgYW5kIGNoZWNrIHdoZXRlciB0aGV5IHJl
ZmVyZW5jZSBhbnkgcmVzb3VyY2UgY29udGFpbmVkIGluIHRoZSByZXNvdXJjZXMgc2V0LgorICAg
ICAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGVuZCA9
IGNoaWxkU2V0LmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXIqPjo6aXRlcmF0b3IgaXQgPSBjaGlsZFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgICAgIGlmIChtX2FsbFJlc291cmNlcy5jb250YWlucygqaXQpKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2FsayBj
aGlsZHJlbiByZWN1cnNpdmVseSwgc3RvcCBpbW1lZGlhdGVseSBpZiB3ZSBmb3VuZCBhIGN5Y2xl
CisgICAgICAgIGlmIChyZXNvdXJjZUNvbnRhaW5zQ3ljbGVzKGNoaWxkKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTVkdS
ZXNvdXJjZXNDeWNsZVNvbHZlcjo6cmVzb2x2ZUN5Y2xlcygpCit7CisgICAgQVNTRVJUKG1fYWxs
UmVzb3VyY2VzLmlzRW1wdHkoKSk7CisKKyNpZiBERUJVR19DWUNMRV9ERVRFQ1RJT04gPiAwCisg
ICAgZnByaW50ZihzdGRlcnIsICJcbkJlZm9yZSBjeWNsZSBkZXRlY3Rpb246XG4iKTsKKyAgICBt
X3Jlc291cmNlcy0+ZHVtcChtX3JlbmRlcmVyKTsKKyNlbmRpZgorCisgICAgLy8gU3Rhc2ggYWxs
IHJlc291cmNlcyBpbnRvIGEgSGFzaFNldCBmb3IgdGhlIGVhc2Ugb2YgdHJhdmVyc2luZy4KKyAg
ICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj4gbG9jYWxSZXNvdXJjZXM7Cisg
ICAgbV9yZXNvdXJjZXMtPmJ1aWxkU2V0T2ZSZXNvdXJjZXMobG9jYWxSZXNvdXJjZXMpOworICAg
IEFTU0VSVCghbG9jYWxSZXNvdXJjZXMuaXNFbXB0eSgpKTsKKworICAgIC8vIEFkZCBhbGwgcGFy
ZW50IHJlc291cmNlIGNvbnRhaW5lcnMgdG8gdGhlIEhhc2hTZXQuCisgICAgSGFzaFNldDxSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+IHBhcmVudFJlc291cmNlczsKKyAgICBSZW5kZXJPYmpl
Y3QqIHBhcmVudCA9IG1fcmVuZGVyZXItPnBhcmVudCgpOworICAgIHdoaWxlIChwYXJlbnQpIHsK
KyAgICAgICAgaWYgKHBhcmVudC0+aXNTVkdSZXNvdXJjZUNvbnRhaW5lcigpKQorICAgICAgICAg
ICAgcGFyZW50UmVzb3VyY2VzLmFkZChwYXJlbnQtPnRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIoKSk7CisgICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50KCk7CisgICAgfQorCisjaWYg
REVCVUdfQ1lDTEVfREVURUNUSU9OID4gMAorICAgIGZwcmludGYoc3RkZXJyLCAiXG5EZXRlY3Rp
bmcgd2hldGVyIGFueSByZXNvdXJjZXMgcmVmZXJlbmNlcyBhbnkgb2YgZm9sbG93aW5nIG9iamVj
dHM6XG4iKTsKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTG9jYWwgcmVzb3VyY2Vz
OlxuIik7CisgICAgICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPjo6aXRl
cmF0b3IgZW5kID0gbG9jYWxSZXNvdXJjZXMuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IGxvY2FsUmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
fD4gJXM6IG9iamVjdD0lcCAobm9kZT0lcClcbiIsICgqaXQpLT5yZW5kZXJOYW1lKCksICppdCwg
KCppdCktPm5vZGUoKSk7CisKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJQYXJlbnQgcmVzb3Vy
Y2VzOlxuIik7CisgICAgICAgIGVuZCA9IHBhcmVudFJlc291cmNlcy5lbmQoKTsKKyAgICAgICAg
Zm9yIChIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGl0ID0g
cGFyZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAifD4gJXM6IG9iamVjdD0lcCAobm9kZT0lcClcbiIsICgqaXQpLT5yZW5k
ZXJOYW1lKCksICppdCwgKCppdCktPm5vZGUoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBC
dWlsZCBjb21iaW5lZCBzZXQgb2YgbG9jYWwgYW5kIHBhcmVudCByZXNvdXJjZXMuCisgICAgbV9h
bGxSZXNvdXJjZXMgPSBsb2NhbFJlc291cmNlczsKKyAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGVuZCA9IHBhcmVudFJlc291cmNlcy5lbmQoKTsKKyAg
ICBmb3IgKEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPjo6aXRlcmF0b3IgaXQg
PSBwYXJlbnRSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBtX2Fs
bFJlc291cmNlcy5hZGQoKml0KTsKKworICAgIC8vIElmIHdlJ3JlIGEgcmVzb3VyY2UsIGFkZCBv
dXJzZWx2ZXMgdG8gdGhlIEhhc2hTZXQuCisgICAgaWYgKG1fcmVuZGVyZXItPmlzU1ZHUmVzb3Vy
Y2VDb250YWluZXIoKSkKKyAgICAgICAgbV9hbGxSZXNvdXJjZXMuYWRkKG1fcmVuZGVyZXItPnRv
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoKSk7CisKKyAgICBBU1NFUlQoIW1fYWxsUmVzb3Vy
Y2VzLmlzRW1wdHkoKSk7CisKKyAgICAvLyBUaGUgam9iIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8g
ZGV0ZXJtaW5lIHdoZXRlciBhbnkgb2YgdGhlICdyZXNvdXJjZXMnIGFzc29jaWF0ZWQgd2l0aCB0
aGUgZ2l2ZW4gJ3JlbmRlcmVyJworICAgIC8vIHJlZmVyZW5jZXMgdXMgKG9yIHdoZXRlciBhbnkg
b2YgaXRzIGtpZHMgcmVmZXJlbmNlcyB1cykgLT4gdGhhdCdzIGEgY3ljbGUsIHdlIG5lZWQgdG8g
ZmluZCBhbmQgYnJlYWsgaXQuCisgICAgZW5kID0gbG9jYWxSZXNvdXJjZXMuZW5kKCk7CisgICAg
Zm9yIChIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGl0ID0g
bG9jYWxSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSA9ICppdDsKKyAgICAgICAgaWYgKHBhcmVu
dFJlc291cmNlcy5jb250YWlucyhyZXNvdXJjZSkgfHwgcmVzb3VyY2VDb250YWluc0N5Y2xlcyhy
ZXNvdXJjZSkpCisgICAgICAgICAgICBicmVha0N5Y2xlKHJlc291cmNlKTsKKyAgICB9CisKKyNp
ZiBERUJVR19DWUNMRV9ERVRFQ1RJT04gPiAwCisgICAgZnByaW50ZihzdGRlcnIsICJcbkFmdGVy
IGN5Y2xlIGRldGVjdGlvbjpcbiIpOworICAgIG1fcmVzb3VyY2VzLT5kdW1wKG1fcmVuZGVyZXIp
OworI2VuZGlmCisKKyAgICBtX2FsbFJlc291cmNlcy5jbGVhcigpOworfQorCit2b2lkIFNWR1Jl
c291cmNlc0N5Y2xlU29sdmVyOjpicmVha0N5Y2xlKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
KiByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlKQoreworICAgIEFTU0VSVChyZXNvdXJjZUxlYWRpbmdU
b0N5Y2xlKTsKKyAgICBpZiAocmVzb3VyY2VMZWFkaW5nVG9DeWNsZSA9PSBtX3Jlc291cmNlcy0+
bGlua2VkUmVzb3VyY2UoKSkgeworICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRMaW5rZWRSZXNv
dXJjZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3dpdGNoIChyZXNvdXJjZUxl
YWRpbmdUb0N5Y2xlLT5yZXNvdXJjZVR5cGUoKSkgeworICAgIGNhc2UgTWFza2VyUmVzb3VyY2VU
eXBlOgorICAgICAgICBBU1NFUlQocmVzb3VyY2VMZWFkaW5nVG9DeWNsZSA9PSBtX3Jlc291cmNl
cy0+bWFza2VyKCkpOworICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRNYXNrZXIoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBNYXJrZXJSZXNvdXJjZVR5cGU6CisgICAgICAgIEFTU0VSVChy
ZXNvdXJjZUxlYWRpbmdUb0N5Y2xlID09IG1fcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpIHx8IHJl
c291cmNlTGVhZGluZ1RvQ3ljbGUgPT0gbV9yZXNvdXJjZXMtPm1hcmtlck1pZCgpIHx8IHJlc291
cmNlTGVhZGluZ1RvQ3ljbGUgPT0gbV9yZXNvdXJjZXMtPm1hcmtlckVuZCgpKTsKKyAgICAgICAg
aWYgKG1fcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpID09IHJlc291cmNlTGVhZGluZ1RvQ3ljbGUp
CisgICAgICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRNYXJrZXJTdGFydCgpOworICAgICAgICBp
ZiAobV9yZXNvdXJjZXMtPm1hcmtlck1pZCgpID09IHJlc291cmNlTGVhZGluZ1RvQ3ljbGUpCisg
ICAgICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRNYXJrZXJNaWQoKTsKKyAgICAgICAgaWYgKG1f
cmVzb3VyY2VzLT5tYXJrZXJFbmQoKSA9PSByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlKQorICAgICAg
ICAgICAgbV9yZXNvdXJjZXMtPnJlc2V0TWFya2VyRW5kKCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUGF0dGVyblJlc291cmNlVHlwZToKKyAgICBjYXNlIExpbmVhckdyYWRpZW50UmVzb3Vy
Y2VUeXBlOgorICAgIGNhc2UgUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGU6CisgICAgICAgIEFT
U0VSVChyZXNvdXJjZUxlYWRpbmdUb0N5Y2xlID09IG1fcmVzb3VyY2VzLT5maWxsKCkgfHwgcmVz
b3VyY2VMZWFkaW5nVG9DeWNsZSA9PSBtX3Jlc291cmNlcy0+c3Ryb2tlKCkpOworICAgICAgICBp
ZiAobV9yZXNvdXJjZXMtPmZpbGwoKSA9PSByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlKQorICAgICAg
ICAgICAgbV9yZXNvdXJjZXMtPnJlc2V0RmlsbCgpOworICAgICAgICBpZiAobV9yZXNvdXJjZXMt
PnN0cm9rZSgpID09IHJlc291cmNlTGVhZGluZ1RvQ3ljbGUpCisgICAgICAgICAgICBtX3Jlc291
cmNlcy0+cmVzZXRTdHJva2UoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWx0ZXJSZXNv
dXJjZVR5cGU6CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgICAgIEFTU0VSVChyZXNvdXJjZUxl
YWRpbmdUb0N5Y2xlID09IG1fcmVzb3VyY2VzLT5maWx0ZXIoKSk7CisgICAgICAgIG1fcmVzb3Vy
Y2VzLT5yZXNldEZpbHRlcigpOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2xp
cHBlclJlc291cmNlVHlwZToKKyAgICAgICAgQVNTRVJUKHJlc291cmNlTGVhZGluZ1RvQ3ljbGUg
PT0gbV9yZXNvdXJjZXMtPmNsaXBwZXIoKSk7CisgICAgICAgIG1fcmVzb3VyY2VzLT5yZXNldENs
aXBwZXIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTb2xpZENvbG9yUmVzb3VyY2VUeXBl
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZXNvdXJjZXNDeWNsZVNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaAkocmV2aXNpb24gNzUzNDUpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oOjc1MzQ1
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXJfaAorI2RlZmluZSBTVkdSZXNvdXJjZXNDeWNs
ZVNvbHZlcl9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyT2JqZWN0OworY2xhc3MgUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXI7CitjbGFzcyBTVkdSZXNvdXJjZXM7CisKK2NsYXNzIFNWR1Jl
c291cmNlc0N5Y2xlU29sdmVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBT
VkdSZXNvdXJjZXNDeWNsZVNvbHZlcihSZW5kZXJPYmplY3QqLCBTVkdSZXNvdXJjZXMqKTsKKyAg
ICB+U1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIoKTsKKworICAgIHZvaWQgcmVzb2x2ZUN5Y2xlcygp
OworCitwcml2YXRlOgorICAgIGJvb2wgcmVzb3VyY2VDb250YWluc0N5Y2xlcyhSZW5kZXJPYmpl
Y3QqKSBjb25zdDsKKyAgICB2b2lkIGJyZWFrQ3ljbGUoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIqKTsKKworICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKKyAgICBTVkdSZXNvdXJjZXMq
IG1fcmVzb3VyY2VzOworICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPiBt
X2FsbFJlc291cmNlczsgCit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMu
Y3BwCShyZXZpc2lvbiA3NTM0NSkJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1No
YWRvd1RyZWVFbGVtZW50cy5jcHA6NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KFNWRykKKyNpbmNsdWRlICJTVkdTaGFkb3dUcmVlRWxlbWVudHMuaCIKKworI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQK
KworU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6OlNWR1NoYWRvd1RyZWVDb250YWluZXJF
bGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IFNWR0dFbGVtZW50KFNWR05hbWVzOjpn
VGFnLCBkb2N1bWVudCkKK3sKK30KKworUGFzc1JlZlB0cjxTVkdTaGFkb3dUcmVlQ29udGFpbmVy
RWxlbWVudD4gU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCog
ZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTaGFkb3dUcmVlQ29udGFp
bmVyRWxlbWVudChkb2N1bWVudCkpOworfQorCitGbG9hdFNpemUgU1ZHU2hhZG93VHJlZUNvbnRh
aW5lckVsZW1lbnQ6OmNvbnRhaW5lclRyYW5zbGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
RmxvYXRTaXplKG1feE9mZnNldC52YWx1ZSh0aGlzKSwgbV95T2Zmc2V0LnZhbHVlKHRoaXMpKTsK
K30KKworLy8gU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50CisKK2lubGluZSBTVkdTaGFkb3dUcmVl
Um9vdEVsZW1lbnQ6OlNWR1NoYWRvd1RyZWVSb290RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQs
IFNWR1VzZUVsZW1lbnQqIHNoYWRvd1BhcmVudCkKKyAgICA6IFNWR1NoYWRvd1RyZWVDb250YWlu
ZXJFbGVtZW50KGRvY3VtZW50KQoreworICAgIHNldFNoYWRvd0hvc3Qoc2hhZG93UGFyZW50KTsK
KyAgICBzZXRJbkRvY3VtZW50KCk7Cit9CisKK1Bhc3NSZWZQdHI8U1ZHU2hhZG93VHJlZVJvb3RF
bGVtZW50PiBTVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1l
bnQsIFNWR1VzZUVsZW1lbnQqIHNoYWRvd1BhcmVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNWR1NoYWRvd1RyZWVSb290RWxlbWVudChkb2N1bWVudCwgc2hhZG93UGFyZW50KSk7Cit9
CisKK3ZvaWQgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50OjphdHRhY2hFbGVtZW50KFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IHN0eWxlLCBSZW5kZXJBcmVuYSogYXJlbmEpCit7CisgICAgQVNTRVJU
KHNoYWRvd0hvc3QoKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIHJlbmRlcmVyIHdpdGggdGhlIHNw
ZWNpZmllZCBzdHlsZQorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJl
cihhcmVuYSwgc3R5bGUuZ2V0KCkpOworICAgIGlmIChyZW5kZXJlcikgeworICAgICAgICBzZXRS
ZW5kZXJlcihyZW5kZXJlcik7CisgICAgICAgIHJlbmRlcmVyLT5zZXRTdHlsZShzdHlsZSk7Cisg
ICAgfQorCisgICAgLy8gU2V0IHRoZXNlIGV4cGxpY2l0bHkgc2luY2UgdGhpcyBub3JtYWxseSBo
YXBwZW5zIGR1cmluZyBhbiBhdHRhY2goKQorICAgIHNldEF0dGFjaGVkKCk7CisKKyAgICAvLyBB
ZGQgdGhlIHJlbmRlcmVyIHRvIHRoZSByZW5kZXIgdHJlZQorICAgIGlmIChyZW5kZXJlcikKKyAg
ICAgICAgc2hhZG93SG9zdCgpLT5yZW5kZXJlcigpLT5hZGRDaGlsZChyZW5kZXJlcik7Cit9CisK
K3ZvaWQgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50OjpjbGVhclNoYWRvd0hvc3QoKQoreworICAg
IHNldFNoYWRvd0hvc3QoMCk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgJKHJldmlz
aW9uIDc1MzQ1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVs
ZW1lbnRzLmg6NzUzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRv
d1RyZWVFbGVtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgU1ZHU2hhZG93VHJlZUVsZW1lbnRzX2gKKyNkZWZpbmUgU1ZHU2hh
ZG93VHJlZUVsZW1lbnRzX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHR0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBGbG9hdFNpemU7CitjbGFzcyBTVkdVc2VFbGVtZW50OworCitjbGFzcyBTVkdTaGFkb3dU
cmVlQ29udGFpbmVyRWxlbWVudCA6IHB1YmxpYyBTVkdHRWxlbWVudCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShE
b2N1bWVudCopOworCisgICAgRmxvYXRTaXplIGNvbnRhaW5lclRyYW5zbGF0aW9uKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRDb250YWluZXJPZmZzZXQoY29uc3QgU1ZHTGVuZ3RoJiB4LCBjb25zdCBT
VkdMZW5ndGgmIHkpCisgICAgeworICAgICAgICBtX3hPZmZzZXQgPSB4OworICAgICAgICBtX3lP
ZmZzZXQgPSB5OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFNWR1NoYWRvd1RyZWVDb250YWlu
ZXJFbGVtZW50KERvY3VtZW50Kik7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzU2hh
ZG93VHJlZUNvbnRhaW5lckVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBT
VkdMZW5ndGggbV94T2Zmc2V0OworICAgIFNWR0xlbmd0aCBtX3lPZmZzZXQ7Cit9OworCitjbGFz
cyBTVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQgOiBwdWJsaWMgU1ZHU2hhZG93VHJlZUNvbnRhaW5l
ckVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1NoYWRvd1RyZWVS
b290RWxlbWVudD4gY3JlYXRlKERvY3VtZW50KiwgU1ZHVXNlRWxlbWVudCogc2hhZG93UGFyZW50
KTsKKworICAgIHZvaWQgYXR0YWNoRWxlbWVudChQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiwgUmVu
ZGVyQXJlbmEqKTsKKyAgICB2b2lkIGNsZWFyU2hhZG93SG9zdCgpOworCitwcml2YXRlOgorICAg
IFNWR1NoYWRvd1RyZWVSb290RWxlbWVudChEb2N1bWVudCosIFNWR1VzZUVsZW1lbnQqIHNoYWRv
d1BhcmVudCk7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78348</attachid>
            <date>2011-01-09 02:52:47 -0800</date>
            <delta_ts>2011-01-09 04:36:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52087-20110109115237.patch</filename>
            <type>text/plain</type>
            <size>895159</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1MzQ4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ4IEBACisyMDExLTAxLTA5ICBEaXJrIFNj
aHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW92ZSBhbGwgU1ZHIHJlbmRlcmVyIHRvIFdlYkNvcmUvcmVuZGVy
aW5nL3N2ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTIwODcKKworICAgICAgICBObyBjaGFuZ2Ugb2YgZnVuY3Rpb25hbGl0eS4gSnVzdCBtb3ZlZCBh
bGwgU1ZHIHJlbmRlcmVyIHRvIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy4KKworICAgICAgICAqIEFu
ZHJvaWQubWs6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgor
ICAgICAgICAqIFdlYkNvcmUudmpwcm9qL3Byb2plY3Qudmpwcm9qOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Rm9yZWlnbk9iamVjdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZv
cmVpZ25PYmplY3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHQWxs
SW5PbmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmg6IFJlbW92
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRp
ZW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VM
aW5lYXJHcmFkaWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlTWFya2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlTWFza2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Lmg6IFJlbW92ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oOiBSZW1v
dmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmg6IFJl
bW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWlu
ZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZH
SW1hZ2VCdWZmZXJUb29scy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR0lt
YWdlQnVmZmVyVG9vbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHTWFya2Vy
RGF0YS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZv
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5o
OiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9TVkdSZXNvdXJjZXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRl
cmluZy9TVkdSZXNvdXJjZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVz
b3VyY2VzQ2FjaGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZXNvdXJj
ZXNDYWNoZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZXNvdXJjZXNDeWNs
ZVNvbHZlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5
Y2xlU29sdmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVF
bGVtZW50cy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVF
bGVtZW50cy5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyRm9yZWln
bk9iamVjdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
b3JlaWduT2JqZWN0LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlckZvcmVpZ25P
YmplY3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVp
Z25PYmplY3QuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0FsbEluT25l
LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmNwcC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oLgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdDb250YWluZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0NvbnRhaW5lci5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
R3JhZGllbnRTdG9wLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0dyYWRpZW50U3RvcC5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdHcmFkaWVudFN0b3AuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0dyYWRpZW50U3RvcC5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oLgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW1hZ2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHSW1hZ2UuY3BwLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW1hZ2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lt
YWdlLmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
aC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmNwcC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oLgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAuCisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oLgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuY3BwLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyLmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZS5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAuCisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVh
ckdyYWRpZW50LmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1h
cmtlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZU1hcmtlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlTWFza2VyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlTWFza2VyLmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlTWFza2VyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAuCisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oLgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50
LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3Jh
ZGllbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlUmFkaWFsR3JhZGllbnQuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwLgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaC4KKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSb290Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSb290LmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAuCisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIu
aC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWlu
ZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVHJh
bnNmb3JtYWJsZUNvbnRhaW5lci5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmguCisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAuCisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5j
cHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmguCisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJEYXRhLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJEYXRhLmguCisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uY3BwLgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyU3VwcG9ydC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
VkdSZW5kZXJTdXBwb3J0LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1
cHBvcnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1
cHBvcnQuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0Lmgu
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzLmNwcC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHUmVzb3VyY2VzLmguCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJj
ZXNDYWNoZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNv
dXJjZXNDYWNoZS5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNo
ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2Fj
aGUuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xl
U29sdmVyLmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29s
dmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXND
eWNsZVNvbHZlci5oLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1l
bnRzLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1NoYWRvd1Ry
ZWVFbGVtZW50cy5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxl
bWVudHMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1NoYWRvd1Ry
ZWVFbGVtZW50cy5oLgorCiAyMDExLTAxLTA5ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBzb3J0IG9mIFhjb2RlIHByb2plY3QgZmlsZS4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQW5kcm9pZC5tawkocmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9BbmRyb2lk
Lm1rCSh3b3JraW5nIGNvcHkpCkBAIC02NjgsNyArNjY4LDYgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcCBcCiAJ
cmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcCBcCiAJcmVuZGVyaW5nL1JlbmRl
ckZsZXhpYmxlQm94LmNwcCBcCi0JcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwIFwK
IAlyZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwIFwKIAlyZW5kZXJpbmcvUmVuZGVyRnJhbWVCYXNl
LmNwcCBcCiAJcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcCBcCkBAIC02OTYsMzcgKzY5NSw0
NiBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAogaWZlcSAoJChF
TkFCTEVfU1ZHKSwgdHJ1ZSkKIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykg
XAotCXJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJTVkdD
b250YWluZXIuY3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCBcCi0J
cmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgXAotCXJlbmRlcmluZy9SZW5k
ZXJTVkdJbWFnZS5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgXAot
CXJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIuY3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIFwKLQlyZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwIFwKLQlyZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZUxpbmVhckdyYWRpZW50LmNwcCBcCi0JcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFy
a2VyLmNwcCBcCi0JcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCBcCi0JcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCBcCi0JcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5jcHAgXAotCXJlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcCBcCi0JcmVu
ZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCBcCi0JcmVuZGVyaW5n
L1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwIFwKLQlyZW5kZXJpbmcvUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlckZvcmVpZ25P
YmplY3QuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcCBcCisJcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0dyYWRpZW50U3RvcC5jcHAgXAorCXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyLmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAgXAogCXJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgXAog
CXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgXAorCXJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2UuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHAgXAorCXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIFwK
KwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBcCisJcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAgXAorCXJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgXAorCXJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAgXAorCXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIFwK
KwlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwIFwKKwly
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgXAorCXJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAgXAorCXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93
VHJlZVJvb3RDb250YWluZXIuY3BwIFwKIAlyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNw
cCBcCiAJcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0UGF0aC5jcHAgXAorCXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3Jt
YWJsZUNvbnRhaW5lci5jcHAgXAorCXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250
YWluZXIuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwIFwKIAly
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwIFwKIAlyZW5kZXJpbmcvc3ZnL1NWR0lu
bGluZVRleHRCb3guY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1NWR01hcmtlckxheW91dEluZm8uY3Bw
IFwKKwlyZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwIFwKKwlyZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5j
cHAgXAorCXJlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIFwKKwlyZW5kZXJpbmcv
c3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9TVkdSb290
SW5saW5lQm94LmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3Bw
CiAJcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwIFwKIAlyZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRDaHVua0J1aWxkZXIuY3BwIFwKIAlyZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzLmNwcCBcCkBAIC03NjEsMTggKzc2OSw2IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FM
X1NSQ19GSUxFUykgXAogCXJlbmRlcmluZy9SZW5kZXJXb3JkQnJlYWsuY3BwIFwKIAlyZW5kZXJp
bmcvUm9vdElubGluZUJveC5jcHAgXAogCi1pZmVxICgkKEVOQUJMRV9TVkcpLCB0cnVlKQotTE9D
QUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCi0JcmVuZGVyaW5nL1NWR0ltYWdl
QnVmZmVyVG9vbHMuY3BwIFwKLQlyZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAgXAot
CXJlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBcCi0JcmVuZGVyaW5nL1NWR1JlbmRlclRy
ZWVBc1RleHQuY3BwIFwKLQlyZW5kZXJpbmcvU1ZHUmVzb3VyY2VzLmNwcCBcCi0JcmVuZGVyaW5n
L1NWR1Jlc291cmNlc0NhY2hlLmNwcCBcCi0JcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xlU29s
dmVyLmNwcCBcCi0JcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAKLWVuZGlmCi0K
IExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXJlbmRlcmluZy9TY3Jv
bGxCZWhhdmlvci5jcHAgXAogCXJlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3Bw
IFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA3NTM0NykKKysrIFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNzg5LDQ4ICsxNzg5LDQ4
IEBAIElGIChFTkFCTEVfU1ZHKQogICAgICAgICBjc3MvU1ZHQ1NTUGFyc2VyLmNwcAogICAgICAg
ICBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKICAgICAgICAgcmVuZGVyaW5nL1BvaW50ZXJF
dmVudHNIaXRSdWxlcy5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3Qu
Y3BwCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAKLSAgICAgICAgcmVuZGVy
aW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR0dy
YWRpZW50U3RvcC5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAotICAgICAgICByZW5k
ZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZS5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAot
ICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCi0gICAgICAgIHJl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAKLSAgICAgICAgcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCi0gICAgICAgIHJlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcAotICAgICAgICByZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZU1hc2tlci5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQu
Y3BwCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCi0g
ICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAotICAgICAgICByZW5kZXJpbmcvUmVu
ZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwCi0gICAgICAgIHJlbmRlcmluZy9SZW5k
ZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAotICAgICAgICByZW5kZXJpbmcvUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIuY3BwCi0gICAgICAgIHJlbmRlcmluZy9TVkdJbWFnZUJ1ZmZl
clRvb2xzLmNwcAotICAgICAgICByZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAKLSAg
ICAgICAgcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwCi0gICAgICAgIHJlbmRlcmluZy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcAotICAgICAgICByZW5kZXJpbmcvU1ZHUmVzb3VyY2VzLmNw
cAotICAgICAgICByZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCi0gICAgICAgIHJlbmRl
cmluZy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAKLSAgICAgICAgcmVuZGVyaW5nL1NWR1No
YWRvd1RyZWVFbGVtZW50cy5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0
eWxlLmNwcAogICAgICAgICByZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcAor
ICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCisgICAgICAgIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHQ29udGFpbmVyLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRp
ZW50U3RvcC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWlu
ZXIuY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCiAgICAgICAg
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcAogICAgICAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZVRleHQuY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAK
KyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAKKyAgICAgICAgcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisgICAgICAgIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCisgICAgICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlTWFza2VyLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlUGF0dGVybi5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJh
ZGlhbEdyYWRpZW50LmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvci5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAor
ICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNw
cAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcAogICAgICAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVGV4dFBhdGguY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3Jt
YWJsZUNvbnRhaW5lci5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdWaWV3cG9y
dENvbnRhaW5lci5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xz
LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCiAgICAgICAg
IHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2
Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcAorICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clN1cHBvcnQuY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCisgICAgICAgIHJlbmRl
cmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZH
UmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHUm9vdElu
bGluZUJveC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMu
Y3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcAogICAgICAgICByZW5k
ZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2
aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBj
b3B5KQpAQCAtMjc0Nyw4ICsyNzQ3LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZvcmVpZ25PYmplY3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZy
YW1lQmFzZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZUJhc2Uu
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lLmNwcCBcCkBAIC0yODIy
LDUwICsyODIwLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU2xpZGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
dW1tYXJ5LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclN1bW1hcnkuaCBc
Ci0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmggXAotCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHQ29udGFpbmVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdHcmFkaWVudFN0b3AuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHR3JhZGllbnRTdG9wLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJ
bWFnZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCi0JU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBcCi0JU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmggXAotCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUu
aCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCBcCi0J
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJH
cmFkaWVudC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlh
bEdyYWRpZW50LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlUmFkaWFsR3JhZGllbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jvb3QuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9v
dC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RD
b250YWluZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHU2hhZG93
VHJlZVJvb3RDb250YWluZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ29sLmNwcCBcCkBAIC0yOTY0LDQxICsyOTE4LDg3IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuaCBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmggXAotCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuaCBcCi0JU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NWR01hcmtlckRhdGEuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NWR01hcmtlckxheW91dEluZm8uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
TWFya2VyTGF5b3V0SW5mby5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVy
U3VwcG9ydC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0
LmggXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBc
Ci0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuaCBcCi0JU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0NhY2hlLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0NhY2hlLmggXAotCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TVkdSZXNvdXJjZXMuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
UmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
UmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jl
c291cmNlcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1l
bnRzLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50
cy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlckZvcmVpZ25PYmplY3Qu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlckZvcmVpZ25PYmplY3Qu
aCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suaCBcCisJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgXAorCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmggXAorCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCBcCisJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaCBcCiAJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdQYXRoLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VMaW5lYXJHcmFkaWVudC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggXAor
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFk
aWVudC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VSYWRpYWxHcmFkaWVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUm9vdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0UGF0aC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dFBhdGguaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUcmFu
c2Zvcm1hYmxlQ29udGFpbmVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggXAorCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAgXAorCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guaCBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHTWFya2VyRGF0YS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01h
cmtlckxheW91dEluZm8uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01h
cmtlckxheW91dEluZm8uaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJTdXBwb3J0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJT
dXBwb3J0LmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hl
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwIFwK
KwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmgg
XAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmggXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biA3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpA
QCAtMzY1NCwyNCArMzY1NCw4NyBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdHlsZS9TdHls
ZVRyYW5zZm9ybURhdGEuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N0eWxlL1N0eWxlVmlz
dWFsRGF0YS5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdHlsZS9TdHlsZVZpc3VhbERh
dGEuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmNw
cCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmgnLAor
ICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3BwJywKKyAgICAgICAg
ICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmgnLAorICAgICAgICAgICAgJ3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0dyYWRpZW50U3RvcC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0hpZGRlbkNvbnRhaW5lci5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW1hZ2UuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lt
YWdlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcCcs
CiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaCcsCiAgICAgICAg
ICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgnLAorICAgICAgICAgICAgJ3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwJywKKyAgICAgICAgICAgICdyZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUGF0aC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5o
JywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5j
cHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXJQcmltaXRpdmUuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwJywKKyAgICAgICAgICAgICdy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCcsCisgICAgICAg
ICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAnLAorICAgICAg
ICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCcsCisgICAgICAg
ICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAnLAorICAgICAg
ICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCcsCisgICAgICAg
ICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwJywKKyAgICAg
ICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oJywKKyAgICAg
ICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3Bw
JywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3Jh
ZGllbnQuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jv
b3QuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaCcsCisg
ICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5l
ci5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJv
b3RDb250YWluZXIuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bh
bi5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uaCcsCiAg
ICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHRQYXRoLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oJywKKyAgICAgICAgICAgICdyZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oJywKKyAgICAgICAgICAg
ICdyZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwJywKKyAgICAgICAgICAgICdy
ZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuaCcsCiAgICAgICAgICAgICAncmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVGbG93Qm94LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4
dEJveC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR01hcmtlckRhdGEuaCcsCisg
ICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcCcsCisgICAg
ICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmgnLAorICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAnLAorICAgICAgICAgICAgJ3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclRyZWVBc1RleHQuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdS
ZXNvdXJjZXMuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5o
JywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcCcsCisg
ICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5oJywKKyAgICAgICAg
ICAgICdyZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCcsCisgICAgICAg
ICAgICAncmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaCcsCisgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3Zn
L1NWR1RleHRDaHVuay5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dENo
dW5rLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rQnVpbGRlci5j
cHAnLApAQCAtMzc1MSw4ICszODE0LDYgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlckZsZXhp
YmxlQm94LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94Lmgn
LAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcCcsCi0gICAg
ICAgICAgICAncmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaCcsCiAgICAgICAgICAgICAn
cmVuZGVyaW5nL1JlbmRlckZyYW1lLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRl
ckZyYW1lLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJGcmFtZUJhc2UuY3BwJywK
QEAgLTM4MjEsNTAgKzM4ODIsNiBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJSdWJ5
VGV4dC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU3VtbWFyeS5jcHAnLAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTdW1tYXJ5LmgnLAotICAgICAgICAgICAgJ3JlbmRl
cmluZy9SZW5kZXJTVkdCbG9jay5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJT
VkdCbG9jay5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNw
cCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oJywKLSAgICAg
ICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCcsCi0gICAgICAgICAg
ICAncmVuZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50U3RvcC5oJywKLSAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVy
aW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcv
UmVuZGVyU1ZHSW1hZ2UuY3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHSW1h
Z2UuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcCcs
Ci0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0LmgnLAotICAgICAg
ICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAnLAotICAgICAgICAgICAgJ3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlQ2xpcHBlci5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIuY3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlclByaW1pdGl2ZS5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlclByaW1pdGl2ZS5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudC5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50LmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZUxpbmVhckdyYWRpZW50LmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlTWFya2VyLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlTWFya2VyLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZU1hc2tlci5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlci5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFk
aWVudC5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlh
bEdyYWRpZW50LmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuY3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcCcs
Ci0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaCcsCi0gICAgICAgICAgICAn
cmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCcsCi0gICAgICAg
ICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgnLAotICAg
ICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCcs
Ci0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIu
aCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNw
cCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcCcsCkBAIC0zOTI2LDIzICszOTQzLDYgQEAKICAgICAg
ICAgICAgICdyZW5kZXJpbmcvU2Nyb2xsQmVoYXZpb3IuaCcsCiAgICAgICAgICAgICAncmVuZGVy
aW5nL1NoYWRvd0VsZW1lbnQuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvU2hhZG93RWxl
bWVudC5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAn
LAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmgnLAotICAgICAg
ICAgICAgJ3JlbmRlcmluZy9TVkdNYXJrZXJEYXRhLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1NWR01h
cmtlckxheW91dEluZm8uaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1NWR1JlbmRlclN1cHBv
cnQuY3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5oJywKLSAg
ICAgICAgICAgICdyZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAnLAotICAgICAgICAg
ICAgJ3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgnLAotICAgICAgICAgICAgJ3JlbmRl
cmluZy9TVkdSZXNvdXJjZXMuY3BwJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHUmVzb3Vy
Y2VzLmgnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAnLAot
ICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5oJywKLSAgICAgICAgICAg
ICdyZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwJywKLSAgICAgICAgICAgICdy
ZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCcsCi0gICAgICAgICAgICAncmVuZGVy
aW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9T
VkdTaGFkb3dUcmVlRWxlbWVudHMuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1RhYmxlTGF5
b3V0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMu
Y3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgn
LApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEzNTgsNyArMTM1OCw2IEBAIFNPVVJDRVMg
Kz0gXAogICAgIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIFwKICAgICByZW5kZXJpbmcvUmVu
ZGVyV29yZEJyZWFrLmNwcCBcCiAgICAgcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwIFwKLSAg
ICByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgXAogICAgIHJlbmRlcmluZy9TY3Jv
bGxCZWhhdmlvci5jcHAgXAogICAgIHJlbmRlcmluZy9TaGFkb3dFbGVtZW50LmNwcCBcCiAgICAg
cmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgXApAQCAtMjI2OCw3ICsyMjY3
LDYgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmggXAogICAg
IHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIFwKICAgICByZW5kZXJpbmcvUmVu
ZGVyRmxleGlibGVCb3guaCBcCi0gICAgcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaCBc
CiAgICAgcmVuZGVyaW5nL1JlbmRlckZyYW1lLmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJGcmFt
ZUJhc2UuaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmggXApAQCAtMjMwNiwyOCAr
MjMwNCw2IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVt
ZS5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmggXAogICAgIHJlbmRlcmluZy9SZW5k
ZXJTdW1tYXJ5LmggXAotICAgIHJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oIFwKLSAgICByZW5k
ZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmggXAotICAgIHJlbmRlcmluZy9SZW5kZXJTVkdHcmFk
aWVudFN0b3AuaCBcCi0gICAgcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIFwK
LSAgICByZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaCBcCi0gICAgcmVuZGVyaW5nL1JlbmRlclNW
R01vZGVsT2JqZWN0LmggXAotICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oIFwKLSAg
ICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggXAotICAgIHJlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIFwKLSAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuaCBcIAotICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZS5oIFwKLSAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIFwK
LSAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oIFwKLSAgICBy
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCBcCi0gICAgcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlTWFza2VyLmggXAotICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm4uaCBcCi0gICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQu
aCBcCi0gICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIFwKLSAgICBy
ZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oIFwKLSAgICByZW5kZXJpbmcvUmVuZGVyU1ZHU2hhZG93
VHJlZVJvb3RDb250YWluZXIuaCBcCi0gICAgcmVuZGVyaW5nL1JlbmRlclNWR1RyYW5zZm9ybWFi
bGVDb250YWluZXIuaCBcCi0gICAgcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
LmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaCBcCiAgICAgcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ29sLmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oIFwKQEAgLTIzNzIs
MTUgKzIzNDgsNDcgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1N0eWxlVmlz
dWFsRGF0YS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmggXAog
ICAgIHJlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oIFwKKyAgICByZW5kZXJpbmcvc3Zn
L1JlbmRlckZvcmVpZ25PYmplY3QuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9j
ay5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oIFwKKyAgICByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lt
YWdlLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmggXAogICAgIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR01vZGVsT2JqZWN0LmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oIFwK
KyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmggXAorICAgIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5oIFwgCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZS5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50
LmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCBcCisgICAg
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIFwKKyAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290
LmggXAorICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIu
aCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5oIFwKICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RleHQuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0
aC5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIu
aCBcCisgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oIFwKKyAg
ICByZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuaCBcCiAgICAgcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVGbG93Qm94LmggXAogICAgIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1NWR01hcmtlckRhdGEuaCBcCisgICAgcmVuZGVyaW5n
L3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmggXAorICAgIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaCBcCisg
ICAgcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuaCBcCisgICAgcmVuZGVyaW5nL3N2Zy9TVkdS
ZXNvdXJjZXNDYWNoZS5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0N5Y2xlU29s
dmVyLmggXAogICAgIHJlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5oIFwKKyAgICByZW5k
ZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NW
R1RleHRDaHVuay5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuaCBc
CiAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0RnJhZ21lbnQuaCBcCkBAIC0yMzkxLDE1ICsyMzk5
LDYgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5l
U3BhY2luZy5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmggXAogICAgIHJl
bmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmggXAotICAgIHJlbmRlcmluZy9TVkdJbWFnZUJ1ZmZl
clRvb2xzLmggXAotICAgIHJlbmRlcmluZy9TVkdNYXJrZXJEYXRhLmggXAotICAgIHJlbmRlcmlu
Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmggXAotICAgIHJlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0
LmggXAotICAgIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmggXAotICAgIHJlbmRlcmlu
Zy9TVkdSZXNvdXJjZXMuaCBcCi0gICAgcmVuZGVyaW5nL1NWR1Jlc291cmNlc0NhY2hlLmggXAot
ICAgIHJlbmRlcmluZy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oIFwKLSAgICByZW5kZXJpbmcv
U1ZHU2hhZG93VHJlZUVsZW1lbnRzLmggXAogICAgIHJlbmRlcmluZy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuaCBcCiAgICAgcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmggXAogICAgIHN2Zy9h
bmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaCBcCkBAIC0zNDcwLDE1ICszNDY5LDQ2IEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgICAgICBjc3MvU1ZHQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAgXAogICAgICAgICByZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuY3Bw
IFwKICAgICAgICAgcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAgXAorICAg
ICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwIFwKKyAgICAgICAgcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0NvbnRhaW5lci5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dy
YWRpZW50U3RvcC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNv
bnRhaW5lci5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcCBc
CiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcCBcCiAgICAgICAgIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgXAorICAgICAgICByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUGF0aC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNw
cCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3Bw
IFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgXAor
ICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNw
cCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAg
XAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQu
Y3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAg
XAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCBcCisg
ICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBcCisgICAg
ICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAgXAor
ICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgXAor
ICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwIFwKKyAgICAgICAgcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAgXAogICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5jcHAgXAogICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQ
YXRoLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNv
bnRhaW5lci5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5j
cHAgXAogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwIFwKICAgICAg
ICAgcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBcCisgICAgICAgIHJlbmRlcmlu
Zy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAgXAorICAgICAgICByZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclN1cHBvcnQuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcCBcCisg
ICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIFwKKyAgICAgICAgcmVu
ZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAgXAogICAgICAgICByZW5kZXJp
bmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwIFwKKyAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdT
aGFkb3dUcmVlRWxlbWVudHMuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1
bmsuY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcCBc
CiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuY3BwIFwKQEAg
LTM2MjgsMzcgKzM2NTgsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsKICAg
ICAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBcCiAgICAgICAgIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIFwKICAgICAgICAgc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcCBcCi0gICAgICAgIHN2Zy9wcm9wZXJ0aWVzL1NWR1BhdGhTZWdMaXN0
UHJvcGVydHlUZWFyT2ZmLmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2Jq
ZWN0LmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAgXAotICAgICAg
ICByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9S
ZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR0hp
ZGRlbkNvbnRhaW5lci5jcHAgXAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3Bw
IFwKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBcCi0gICAgICAg
IHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAgXAotICAgICAgICByZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5jcHAgXAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
UHJpbWl0aXZlLmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50LmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRp
ZW50LmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAg
XAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwIFwKLSAgICAg
ICAgcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgXAotICAgICAgICByZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAgXAotICAgICAgICByZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCBcCi0gICAgICAgIHJlbmRlcmlu
Zy9SZW5kZXJTVkdSb290LmNwcCBcCi0gICAgICAgIHJlbmRlcmluZy9SZW5kZXJTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lci5jcHAgXAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNm
b3JtYWJsZUNvbnRhaW5lci5jcHAgXAotICAgICAgICByZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3Bv
cnRDb250YWluZXIuY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMu
Y3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uY3BwIFwKLSAgICAg
ICAgcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1NW
R1Jlc291cmNlcy5jcHAgXAotICAgICAgICByZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3Bw
IFwKLSAgICAgICAgcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCBcCi0gICAg
ICAgIHJlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCisgICAgICAgIHN2Zy9wcm9w
ZXJ0aWVzL1NWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcAogfQogCiBjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUj0xKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNzUzNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBj
b3B5KQpAQCAtMzMzNTgsNyArMzMzNTgsNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAi
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlckZvcmVpZ25PYmplY3Qu
Y3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2lu
MzIiCkBAIC0zMzQxMCw3ICszMzQxMCw3IEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVy
Rm9yZWlnbk9iamVjdC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5k
ZXJGb3JlaWduT2JqZWN0LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKQEAgLTM1NDYy
LDExICszNTQ2MiwxMSBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHQWxsSW5PbmUuY3BwIgorCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdBbGxJbk9uZS5jcHAiCiAJCQkJPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJT
VkdCbG9jay5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNW
R0Jsb2NrLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRl
YnVnfFdpbjMyIgpAQCAtMzU1MTgsMTEgKzM1NTE4LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJp
bmdcUmVuZGVyU1ZHQmxvY2suaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdc
UmVuZGVyU1ZHQmxvY2suaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR0NvbnRhaW5lci5jcHAiCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0NvbnRhaW5lci5jcHAiCiAJCQkJPgog
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM1NTc0
LDExICszNTU3NCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR0NvbnRhaW5l
ci5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdDb250YWlu
ZXIuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cmVuZGVyaW5nXFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAiCiAJCQkJPgogCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM1NjMwLDExICsz
NTYzMCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR0dyYWRpZW50U3RvcC5o
IgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdHcmFkaWVudFN0
b3AuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cmVuZGVyaW5nXFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAiCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAiCiAJCQkJPgog
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM1Njg2
LDExICszNTY4NiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR0hpZGRlbkNv
bnRhaW5lci5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR0ltYWdlLmNwcCIKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHSW1hZ2UuY3BwIgogCQkJCT4KIAkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zNTc0MiwxMSArMzU3
NDIsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdJbWFnZS5oIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdJbWFnZS5oIgogCQkJCT4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVy
U1ZHTW9kZWxPYmplY3QuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xS
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgog
CQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM1Nzk4LDExICszNTc5OCwxMSBAQAogCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR01vZGVsT2JqZWN0LmgiCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR01vZGVsT2JqZWN0LmgiCiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdS
ZXNvdXJjZS5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNW
R1Jlc291cmNlLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9
IkRlYnVnfFdpbjMyIgpAQCAtMzU4NTQsMTEgKzM1ODU0LDExIEBACiAJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5k
ZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmlu
Z1xzdmdcUmVuZGVyU1ZHUmVzb3VyY2UuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5j
cHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJE
ZWJ1Z3xXaW4zMiIKQEAgLTM1OTEwLDExICszNTkxMCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVy
aW5nXFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVu
ZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zNTk2NiwxMSArMzU5NjYsMTEgQEAKIAkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5o
IgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5k
ZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAiCiAJCQkJPgogCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM2MDIyLDExICsz
NjAyMiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAiCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJp
bWl0aXZlLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRl
YnVnfFdpbjMyIgpAQCAtMzYwNzgsMTEgKzM2MDc4LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJp
bmdcUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5n
XFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVu
ZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCIKIAkJCQk+CiAJCQkJPEZp
bGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzYxMzQsMTEgKzM2
MTM0LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCIKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJH
cmFkaWVudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJE
ZWJ1Z3xXaW4zMiIKQEAgLTM2MTkwLDExICszNjE5MCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVy
aW5nXFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdc
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVy
aW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM2MjQ2LDExICszNjI0Niwx
MSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1Jlc291cmNlTWFya2Vy
LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCIKIAkJCQk+CiAJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzYzMDIsMTEg
KzM2MzAyLDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXIuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAiCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAiCiAJ
CQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAg
LTM2MzU4LDExICszNjM1OCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jl
c291cmNlUGF0dGVybi5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNv
dXJjZVJhZGlhbEdyYWRpZW50LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJ
CQkJCU5hbWU9IkRlYnVnfFdpbjMyIgpAQCAtMzY0MTQsMTEgKzM2NDE0LDExIEBACiAJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHJlbmRlcmluZ1xSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIgorCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIgog
CQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBA
IC0zNjQ3MCwxMSArMzY0NzAsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdc
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdSb290LmNwcCIKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUm9vdC5jcHAiCiAJCQkJ
PgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM2
NTI2LDExICszNjUyNiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1Jvb3Qu
aCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZHUm9vdC5oIgog
CQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJp
bmdcUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIgorCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAi
CiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIK
QEAgLTM2NTgyLDExICszNjU4MiwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNW
R1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJp
bmdcc3ZnXFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgiCiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTVkdU
cmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmlu
Z1xzdmdcUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAiCiAJCQkJPgogCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM2NjM4LDExICsz
NjYzOCwxMSBAQAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNWR1RyYW5zZm9ybWFibGVD
b250YWluZXIuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcUmVuZGVyU1ZH
VHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIu
Y3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5kZXJTVkdWaWV3cG9y
dENvbnRhaW5lci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQlOYW1l
PSJEZWJ1Z3xXaW4zMiIKQEAgLTM3ODk2LDExICszNzg5NiwxMSBAQAogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHTWFya2VyRGF0
YS5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdNYXJrZXJEYXRhLmgi
CiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRl
cmluZ1xTVkdNYXJrZXJMYXlvdXRJbmZvLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRl
cmluZ1xzdmdcU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgogCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKQEAgLTM3OTUyLDExICszNzk1MiwxMSBA
QAogCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNWR01hcmtlckxheW91dEluZm8uaCIKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHTWFya2VyTGF5b3V0SW5mby5oIgogCQkJCT4K
IAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZH
UmVuZGVyU3VwcG9ydC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNW
R1JlbmRlclN1cHBvcnQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJ
TmFtZT0iRGVidWd8V2luMzIiCkBAIC0zODAwOCwxMSArMzgwMDgsMTEgQEAKIAkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHJlbmRlcmluZ1xTVkdSZW5kZXJTdXBwb3J0LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5k
ZXJpbmdcc3ZnXFNWR1JlbmRlclN1cHBvcnQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNWR1JlbmRlclRyZWVBc1RleHQuY3Bw
IgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdSZW5kZXJUcmVlQXNUZXh0
LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9IkRlYnVnfFdp
bjMyIgpAQCAtMzgwNjQsMTEgKzM4MDY0LDExIEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
IAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZH
UmVuZGVyVHJlZUFzVGV4dC5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xT
VkdSZW5kZXJUcmVlQXNUZXh0LmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdSZXNvdXJjZXMuY3BwIgorCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdSZXNvdXJjZXMuY3BwIgogCQkJCT4KIAkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zODEyMCwxMSArMzgx
MjAsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdSZXNvdXJjZXMuaCIKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHUmVzb3VyY2VzLmgiCiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdSZXNvdXJj
ZXNDYWNoZS5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1Jlc291
cmNlc0NhY2hlLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9
IkRlYnVnfFdpbjMyIgpAQCAtMzgxNzYsMTEgKzM4MTc2LDExIEBACiAJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5k
ZXJpbmdcU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmlu
Z1xzdmdcU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNw
cCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHUmVzb3VyY2VzQ3ljbGVT
b2x2ZXIuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVi
dWd8V2luMzIiCkBAIC0zODIzMiwxMSArMzgyMzIsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmlu
Z1xTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVy
aW5nXHN2Z1xTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHU2hhZG93VHJlZUVsZW1l
bnRzLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHU2hhZG93VHJl
ZUVsZW1lbnRzLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCU5hbWU9
IkRlYnVnfFdpbjMyIgpAQCAtMzgyODgsNyArMzgyODgsNyBAQAogCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVy
aW5nXFNWR1NoYWRvd1RyZWVFbGVtZW50cy5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVy
aW5nXHN2Z1xTVkdTaGFkb3dUcmVlRWxlbWVudHMuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gNzUzNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDYgQEAK
IAkJMDgwNEJGNkUwRUUwOUMzQjAwMDZDMDAwIC8qIFdNTERvRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODA0QkY2QzBFRTA5QzNCMDAw
NkMwMDAgLyogV01MRG9FbGVtZW50LmNwcCAqLzsgfTsKIAkJMDgwNEJGNkYwRUUwOUMzQjAwMDZD
MDAwIC8qIFdNTERvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDgwNEJGNkQwRUUwOUMzQjAwMDZDMDAwIC8qIFdNTERvRWxlbWVudC5oICov
OyB9OwogCQkwODA2RTU3QTEyODkzMDQ1MDA3Q0VEMzIgLyogU1ZHTWF0cml4LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODA2RTU3OTEyODkzMDQ1MDA3
Q0VEMzIgLyogU1ZHTWF0cml4LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMDgwODIzNzMxMTc5ODdDMTAwMjQxREU4IC8qIFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwODA4MjM3MjExNzk4N0MxMDAyNDFERTggLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIuaCAqLzsgfTsKIAkJMDgwQUVDODEwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4
MEFFQzdEMEVEODcwOEEwMERGNENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudC5jcHAgKi87IH07CiAJ
CTA4MEFFQzgyMEVEODcwOEIwMERGNENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgwQUVDN0UwRUQ4NzA4QjAw
REY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50LmggKi87IH07CiAJCTA4MEFFQzgzMEVEODcwOEIw
MERGNENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgwQUVDN0YwRUQ4NzA4QjAwREY0Q0NFIC8q
IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAgKi87IH07CkBAIC05NywxMCArOTYsNiBAQAog
CQkwODIzRDE1OTEyN0FENkFDMDAwRUJDOTUgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODIzRDE1ODEyN0FENkFD
MDAwRUJDOTUgLyogU1ZHQW5pbWF0ZWRJbnRlZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDgyNTA5MzkxMjhCRDREODAwRTJFRDhFIC8qIFNW
R0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDgyNTA5MzgxMjhCRDREODAwRTJFRDhFIC8qIFNWR0FuaW1hdGVkVHJh
bnNmb3JtTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTA4MkRFNDJEMTI5MjYyMTYwMEQ5MjNERiAvKiBTVkdQYXRoU2VnV2l0aENvbnRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MkRFNDJD
MTI5MjYyMTYwMEQ5MjNERiAvKiBTVkdQYXRoU2VnV2l0aENvbnRleHQuaCAqLzsgfTsKLQkJMDgz
MTkyQUExMTJCNDMwNTAwODNDM0I5IC8qIFJlbmRlclNWR1Jlc291cmNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODMxOTJBNzExMkI0MzA1MDA4M0Mz
QjkgLyogUmVuZGVyU1ZHUmVzb3VyY2UuaCAqLzsgfTsKLQkJMDgzMTkyQUIxMTJCNDMwNTAwODND
M0I5IC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MzE5MkE4MTEyQjQzMDUwMDgzQzNCOSAvKiBSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgKi87IH07Ci0JCTA4MzE5MkFDMTEyQjQzMDUwMDgzQzNC
OSAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzMTkyQTkxMTJCNDMwNTAwODNDM0I5IC8qIFJlbmRlclNW
R1Jlc291cmNlTWFza2VyLmggKi87IH07Ci0JCTA4Mzg1RkY2MTBGMDE4NjAwMEJGRTA3QiAvKiBT
VkdNYXJrZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwODM4NUZGNTEwRjAxODYwMDBCRkUwN0IgLyogU1ZHTWFya2VyRGF0YS5oICovOyB9Owog
CQkwODM5NDc2QzBFQ0U0QkQ2MDAwMjczNTAgLyogV01MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhGQjg0QjAwRUNFMzcz
MzAwREMwNjRFIC8qIFdNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLzsgfTsKIAkJMDgzOTQ3NkQwRUNF
NEJENjAwMDI3MzUwIC8qIFdNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEZCODRCMTBFQ0UzNzMzMDBEQzA2NEUgLyogV01M
RWxlbWVudEZhY3RvcnkuaCAqLzsgfTsKIAkJMDgzREFFQTYwRjAxQTdGQjAwMzQyNzU0IC8qIFJl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA4M0RBRUEyMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZS5jcHAgKi87IH07CkBAIC0xMTQsMTAgKzEwOSw2IEBACiAJCTA4NENF
NUNDMEYyN0RBREMwMEU2MjQwRSAvKiBXTUxPcHRHcm91cEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NENFNUM4MEYyN0RBREMwMEU2MjQw
RSAvKiBXTUxPcHRHcm91cEVsZW1lbnQuaCAqLzsgfTsKIAkJMDg0Q0U1Q0QwRjI3REFEQzAwRTYy
NDBFIC8qIFdNTE9wdGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDg0Q0U1QzkwRjI3REFEQzAwRTYyNDBFIC8qIFdNTE9wdGlvbkVs
ZW1lbnQuY3BwICovOyB9OwogCQkwODRDRTVDRTBGMjdEQURDMDBFNjI0MEUgLyogV01MT3B0aW9u
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDg0Q0U1Q0EwRjI3REFEQzAwRTYyNDBFIC8qIFdNTE9wdGlvbkVsZW1lbnQuaCAqLzsgfTsKLQkJ
MDg0RDBFM0MxMUY1ODE2MTAwMDgxRTFBIC8qIFNWR1Jlc291cmNlcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODREMEUzODExRjU4MTYxMDAwODFF
MUEgLyogU1ZHUmVzb3VyY2VzLmNwcCAqLzsgfTsKLQkJMDg0RDBFM0QxMUY1ODE2MTAwMDgxRTFB
IC8qIFNWR1Jlc291cmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDg0RDBFMzkxMUY1ODE2MTAwMDgxRTFBIC8qIFNWR1Jlc291cmNlcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTA4NEQwRTNFMTFG
NTgxNjEwMDA4MUUxQSAvKiBTVkdSZXNvdXJjZXNDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODREMEUzQTExRjU4MTYxMDAwODFFMUEgLyog
U1ZHUmVzb3VyY2VzQ2FjaGUuY3BwICovOyB9OwotCQkwODREMEUzRjExRjU4MTYxMDAwODFFMUEg
LyogU1ZHUmVzb3VyY2VzQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4NEQwRTNCMTFGNTgxNjEwMDA4MUUxQSAvKiBTVkdSZXNvdXJjZXNDYWNo
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4
NERCNTlCMTI4MDA4Q0MwMDJBNkQ2NCAvKiBTVkdBbmltYXRlZFN0cmluZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0REI1OUExMjgwMDhDQzAwMkE2
RDY0IC8qIFNWR0FuaW1hdGVkU3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDg0REJBQTEwRUQzOUQzNjAwMzhDMjI2IC8qIFdNTFZhcmlh
Ymxlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
ODREQkE5RDBFRDM5RDM1MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmNwcCAqLzsgfTsKIAkJMDg0
REJBQTIwRUQzOUQzNjAwMzhDMjI2IC8qIFdNTFZhcmlhYmxlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0REJBOUUwRUQzOUQzNjAwMzhDMjI2IC8q
IFdNTFZhcmlhYmxlcy5oICovOyB9OwpAQCAtMTQwLDMwICsxMzEsMjIgQEAKIAkJMDg1NEIwMjMx
MjU1RTRFNjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTRCMDExMTI1NUU0RTYwMEI5Q0REMCAvKiBT
VkdSb290SW5saW5lQm94LmggKi87IH07CiAJCTA4NTRCMDI0MTI1NUU0RTYwMEI5Q0REMCAvKiBT
VkdUZXh0UXVlcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDg1NEIwMTIxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5jcHAgKi87IH07
CiAJCTA4NTRCMDI1MTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdUZXh0UXVlcnkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTRCMDEzMTI1NUU0RTYwMEI5
Q0REMCAvKiBTVkdUZXh0UXVlcnkuaCAqLzsgfTsKLQkJMDg1NjNCQjQxMTc4NjE3ODAwMTJCNTc4
IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU2M0JCMjExNzg2MTc3MDAxMkI1NzggLyogUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCAqLzsgfTsKLQkJMDg1NjNCQjUxMTc4NjE3ODAwMTJCNTc4
IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NjNCQjMxMTc4NjE3NzAwMTJCNTc4IC8qIFJlbmRlclNW
R1Jlc291cmNlUGF0dGVybi5oICovOyB9OwotCQkwODU2M0JEMDExNzg2NUY1MDAxMkI1NzggLyog
UmVuZGVyU1ZHUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDg1NjNCQ0YxMTc4NjVGNTAwMTJCNTc4IC8qIFJlbmRlclNWR1Jlc291cmNl
LmNwcCAqLzsgfTsKIAkJMDg1Nzk3MDkxMjc4Mzk0QzAwQThFQzVGIC8qIFNWR0FuaW1hdGVkQm9v
bGVhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1
Nzk3MDgxMjc4Mzk0QzAwQThFQzVGIC8qIFNWR0FuaW1hdGVkQm9vbGVhbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4NTkxQUE1MEYwODVDNEUw
MDlCQUNCMSAvKiBJbnB1dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4NTkxQUE0MEYwODVDNEUwMDlCQUNCMSAvKiBJbnB1dEVsZW1lbnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwODVB
MTU5MzEyODlBOEREMDAyNzEwRTMgLyogU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlU
ZWFyT2ZmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
ODVBMTU5MjEyODlBOEREMDAyNzEwRTMgLyogU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVy
dHlUZWFyT2ZmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMDg1QUZEQzgwRjI5NzczNTAwNjFGMkIzIC8qIFdNTEZvcm1Db250cm9sRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODVBRkRD
NjBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCAqLzsgfTsKIAkJ
MDg1QUZEQzkwRjI5NzczNTAwNjFGMkIzIC8qIFdNTEZvcm1Db250cm9sRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1QUZEQzcwRjI5Nzcz
NTAwNjFGMkIzIC8qIFdNTEZvcm1Db250cm9sRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKCk7IH07IH07Ci0JCTA4NUIwNUMyMTFGQUUxNkMwMDRENjVGNiAvKiBTVkdSZXNv
dXJjZXNDeWNsZVNvbHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODVCMDVDMDExRkFFMTZDMDA0RDY1RjYgLyogU1ZHUmVzb3VyY2VzQ3ljbGVT
b2x2ZXIuY3BwICovOyB9OwotCQkwODVCMDVDMzExRkFFMTZDMDA0RDY1RjYgLyogU1ZHUmVzb3Vy
Y2VzQ3ljbGVTb2x2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4NUIwNUMxMTFGQUUxNkMwMDRENjVGNiAvKiBTVkdSZXNvdXJjZXNDeWNsZVNvbHZl
ci5oICovOyB9OwogCQkwODVCOTJCQTBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NUI5
MkI4MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwICovOyB9OwogCQkwODVC
OTJCQjBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODVCOTJCOTBFRkRFNzNEMDBFNjEyM0Mg
LyogRm9ybURhdGFCdWlsZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsg
fTsKIAkJMDg2NDFENDcxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHls
ZUltYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4NjQxRDQ1MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFn
ZS5jcHAgKi87IH07CiAJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJl
c291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDg2NDFENDYxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VT
dHlsZUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMDg2NUNDRTYwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NjVDQ0U0MEVEREY1
MUIwMERGOUVDMyAvKiBXTUxOb29wRWxlbWVudC5jcHAgKi87IH07CiAJCTA4NjVDQ0U3MEVEREY1
MUIwMERGOUVDMyAvKiBXTUxOb29wRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDg2NUNDRTUwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BF
bGVtZW50LmggKi87IH07Ci0JCTA4NkE0MDA2MTFGNkQ2QjcwMDJDRUM1MyAvKiBSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODZBNDAwNTExRjZENkI3MDAyQ0VDNTMgLyogUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXIuY3BwICovOyB9OwogCQkwODcwMEJFNzBGMDg2QzUzMDA5MTk0MTkgLyogSW5wdXRF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4NzAwQkU2MEYwODZDNTMwMDkxOTQxOSAvKiBJbnB1dEVsZW1lbnQuY3BwICovOyB9OwogCQkw
ODcyODE1NTBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODcyODE1MTBGMjZCOUI2MDBBRkM1
OTYgLyogT3B0aW9uRWxlbWVudC5jcHAgKi87IH07CiAJCTA4NzI4MTU2MEYyNkI5QjYwMEFGQzU5
NiAvKiBPcHRpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODcyODE1MjBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uRWxlbWVudC5oICov
OyB9OwogCQkwODcyODE1NzBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uR3JvdXBFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzI4MTUz
MEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25Hcm91cEVsZW1lbnQuY3BwICovOyB9OwogCQkwODcy
ODE1ODBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uR3JvdXBFbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODcyODE1NDBGMjZCOUI2MDBBRkM1
OTYgLyogT3B0aW9uR3JvdXBFbGVtZW50LmggKi87IH07Ci0JCTA4NzM1RkI4MTBFOTEyMzIwMDZE
NkZBRCAvKiBTVkdNYXJrZXJMYXlvdXRJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzM1RkI2MTBFOTEyMzIwMDZENkZBRCAvKiBTVkdNYXJr
ZXJMYXlvdXRJbmZvLmNwcCAqLzsgfTsKLQkJMDg3MzVGQjkxMEU5MTIzMjAwNkQ2RkFEIC8qIFNW
R01hcmtlckxheW91dEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4NzM1RkI3MTBFOTEyMzIwMDZENkZBRCAvKiBTVkdNYXJrZXJMYXlvdXRJbmZv
LmggKi87IH07CiAJCTA4NzQ0QkFBMEVEQjdEODYwMDRDOUU2MyAvKiBXTUxPbkV2ZW50RWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODc0
NEJBOTBFREI3RDg2MDA0QzlFNjMgLyogV01MT25FdmVudEVsZW1lbnQuY3BwICovOyB9OwogCQkw
ODc0NEJBRTBFREI3RDkyMDA0QzlFNjMgLyogV01MT25FdmVudEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzQ0QkFEMEVEQjdEOTIwMDRD
OUU2MyAvKiBXTUxPbkV2ZW50RWxlbWVudC5oICovOyB9OwogCQkwODdCODQ5NjEyNzJDRUM4MDBB
MTQ0MTcgLyogU1ZHQW5pbWF0ZWRBbmdsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDg3Qjg0OTUxMjcyQ0VDNzAwQTE0NDE3IC8qIFNWR0FuaW1hdGVk
QW5nbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMjIzLDIwICsyMDYsMTAgQEAKIAkJMDhBNDhBNkUwRTg2Q0Y2RDAwRTIyNUREIC8qIEpTU1ZH
RWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4QTQ4QTZEMEU4NkNGNkQwMEUyMjVERCAvKiBKU1NWR0VsZW1lbnRJ
bnN0YW5jZUN1c3RvbS5jcHAgKi87IH07CiAJCTA4QjM1QjEzMTI3QjZBN0MwMDUzMTRERCAvKiBT
VkdBbmltYXRlZE51bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDhCMzVCMTIxMjdCNkE3QzAwNTMxNEREIC8qIFNWR0FuaW1hdGVkTnVtYmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDhCMzVC
MTcxMjdCNkE4ODAwNTMxNEREIC8qIFNWR0FuaW1hdGVkTnVtYmVyTGlzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhCMzVCMTYxMjdCNkE4ODAwNTMx
NEREIC8qIFNWR0FuaW1hdGVkTnVtYmVyTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTA4QzM0QUY1MTE3OUMwNTcwMDJENzQ1NiAvKiBSZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4QzM0QUYxMTE3OUMwNTYwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50LmNwcCAqLzsgfTsKLQkJMDhDMzRBRjYxMTc5QzA1NzAwMkQ3NDU2IC8qIFJl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4QzM0QUYyMTE3OUMwNTcwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50LmggKi87IH07Ci0JCTA4QzM0QUY3MTE3OUMwNTcwMDJENzQ1NiAvKiBSZW5k
ZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzM0QUYzMTE3OUMwNTcwMDJENzQ1NiAvKiBSZW5kZXJT
VkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCAqLzsgfTsKLQkJMDhDMzRBRjgxMTc5QzA1NzAw
MkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzM0QUY0MTE3OUMwNTcwMDJENzQ1
NiAvKiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmggKi87IH07Ci0JCTA4QzM0QUZE
MTE3OUMwNzIwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzM0QUZCMTE3
OUMwNzIwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCAqLzsg
fTsKLQkJMDhDMzRBRkUxMTc5QzA3MjAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFs
R3JhZGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4QzM0QUZDMTE3OUMwNzIwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50LmggKi87IH07Ci0JCTA4QzQ2QjY5MTIxMkYxNUUwMDExQUY0MCAvKiBTVkdJbWFnZUJ1ZmZl
clRvb2xzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4QzQ2QjY3MTIxMkYxNUQwMDExQUY0MCAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCAqLzsg
fTsKLQkJMDhDNDZCNkExMjEyRjE1RTAwMTFBRjQwIC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzQ2QjY4MTIx
MkYxNUQwMDExQUY0MCAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmggKi87IH07CiAJCTA4QzRDNTE4
MEVGMTlBNDAwMEU0ODQwRiAvKiBXTUxJbWFnZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDNEM1MTQwRUYxOUE0MDAwRTQ4NDBGIC8q
IFdNTEltYWdlRWxlbWVudC5jcHAgKi87IH07CiAJCTA4QzRDNTE5MEVGMTlBNDAwMEU0ODQwRiAv
KiBXTUxJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4QzRDNTE1MEVGMTlBNDAwMEU0ODQwRiAvKiBXTUxJbWFnZUVsZW1lbnQuaCAq
LzsgfTsKIAkJMDhDNEM1MUEwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdlTG9hZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzRDNTE2MEVG
MTlBNDAwMEU0ODQwRiAvKiBXTUxJbWFnZUxvYWRlci5jcHAgKi87IH07CiAJCTA4QzRDNTFCMEVG
MTlBNDAwMEU0ODQwRiAvKiBXTUxJbWFnZUxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDNEM1MTcwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTElt
YWdlTG9hZGVyLmggKi87IH07Ci0JCTA4QzZBN0FCMTE3REZCQUIwMEZFQTFBMiAvKiBSZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDhDNkE3QTkxMTdERkJBQjAwRkVBMUEyIC8qIFJlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5jcHAgKi87IH07Ci0JCTA4QzZBN0FDMTE3REZCQUIwMEZFQTFBMiAvKiBS
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzZBN0FBMTE3REZCQUIwMEZFQTFBMiAvKiBSZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IuaCAqLzsgfTsKIAkJMDhDNzEzNkUxMjg5NTZBMzAwMUIxMDdFIC8q
IFNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzcxMzZEMTI4OTU2QTMwMDFCMTA3RSAvKiBTVkdU
cmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDhDN0EyQzcxMERDNzQ2MjAwMkQzNjhCIC8qIFNWR05h
bWVzLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NTY1ODFFOTA5RDE1MDhEMDAwRTYxRDcgLyogU1ZHTmFtZXMuaCAqLzsgfTsK
IAkJMDhDODU5QzAxMjc0NTc1NDAwQTU3MjhEIC8qIFNWR0FuaW1hdGVkUmVjdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDODU5QkYxMjc0NTc1MzAw
QTU3MjhEIC8qIFNWR0FuaW1hdGVkUmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0yNDYsMTAgKzIxOSw2IEBACiAJCTA4Q0Q2MUJDMEVEMzky
OUMwMDJEREY1MSAvKiBXTUxUYXNrRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOENENjFCODBFRDM5MjlDMDAyRERGNTEgLyogV01MVGFz
a0VsZW1lbnQuY3BwICovOyB9OwogCQkwOENENjFCRDBFRDM5MjlDMDAyRERGNTEgLyogV01MVGFz
a0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4Q0Q2MUI5MEVEMzkyOUMwMDJEREY1MSAvKiBXTUxUYXNrRWxlbWVudC5oICovOyB9OwogCQkw
OEQ0NkNFMzEyN0FENUZDMDA4OTY5NEIgLyogU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhENDZDRTIxMjdBRDVG
QzAwODk2OTRCIC8qIFNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwOERBQjlCQTExMDNEOUE1MDAzRTdBQkEg
LyogUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhEQUI5QjgxMTAzRDlBNTAwM0U3QUJBIC8q
IFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCAqLzsgfTsKLQkJMDhEQUI5QkIx
MTAzRDlBNTAwM0U3QUJBIC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOERBQjlCOTExMDNE
OUE1MDAzRTdBQkEgLyogUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCAqLzsgfTsK
LQkJMDhEQUI5QzIxMTAzRDlDMTAwM0U3QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOERBQjlDMDEx
MDNEOUMxMDAzRTdBQkEgLyogU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCAqLzsgfTsKLQkJMDhE
QUI5QzMxMTAzRDlDMTAwM0U3QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhEQUI5QzExMTAzRDlDMTAw
M0U3QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5oICovOyB9OwogCQkwOEUxOTI1MzBFREUw
QzNBMDA4N0I3ODAgLyogV01MRXJyb3JIYW5kbGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEUxOTI1MTBFREUwQzM5MDA4N0I3ODAgLyogV01M
RXJyb3JIYW5kbGluZy5jcHAgKi87IH07CiAJCTA4RTE5MjU0MEVERTBDM0EwMDg3Qjc4MCAvKiBX
TUxFcnJvckhhbmRsaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwOEUxOTI1MjBFREUwQzNBMDA4N0I3ODAgLyogV01MRXJyb3JIYW5kbGluZy5oICov
OyB9OwogCQkwOEU0RkU0NjBFMkJENDE0MDBGNENBRTAgLyogSlNTVkdMZW5ndGhDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhFNEZFNDUw
RTJCRDQxNDAwRjRDQUUwIC8qIEpTU1ZHTGVuZ3RoQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTM4Miw4
ICszNTEsNiBAQAogCQkxOEY4MzFCODBGRDQ4Qzc4MDBEOEM1NkIgLyogV29ya2VyTG9hZGVyUHJv
eHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4Rjgz
MUI3MEZENDhDNzgwMEQ4QzU2QiAvKiBXb3JrZXJMb2FkZXJQcm94eS5oICovOyB9OwogCQkxOTIx
MzI3NDExQzBFNkJCMDA0NTYyMzggLyogU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTkyMTMyNzExMUMw
RTZCQjAwNDU2MjM4IC8qIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCAqLzsgfTsKIAkJ
MTkyMTMyNzUxMUMwRTZCQjAwNDU2MjM4IC8qIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOTIxMzI3MjEx
QzBFNkJCMDA0NTYyMzggLyogU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaCAqLzsgfTsKLQkJ
MTk0MjNCNTAxMjM0RTg2QjAwRDFFRTlFIC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE5
NDIzQjRFMTIzNEU4NkIwMEQxRUU5RSAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2
ZS5jcHAgKi87IH07Ci0JCTE5NDIzQjUxMTIzNEU4NkIwMEQxRUU5RSAvKiBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlclByaW1pdGl2ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTk0MjNCNEYxMjM0RTg2QjAwRDFFRTlFIC8qIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyUHJpbWl0aXZlLmggKi87IH07CiAJCTE5QkZGNjRCMTFDMEYyQUMwMEI4QzA0RCAvKiBE
T01TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTlCRkY2NDYxMUMwRjJBQzAwQjhDMDREIC8qIERPTVNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50LmggKi87IH07CiAJCTE5QkZGNjRDMTFDMEYyQUMwMEI4QzA0
RCAvKiBET01TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE5QkZGNjQ3MTFDMEYyQUMwMEI4QzA0RCAvKiBE
T01TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5tbSAqLzsgfTsKIAkJMTlCRkY2NEQxMUMwRjJB
QzAwQjhDMDREIC8qIERPTVNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50SW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE5QkZGNjQ4MTFDMEYy
QUMwMEI4QzA0RCAvKiBET01TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudEludGVybmFsLmggKi87
IH07CkBAIC05NzIsNiArOTM5LDY5IEBACiAJCTQxRjFEMjFGMEVGMzVDMkEwMERBODc1MyAvKiBT
Y3JpcHRDYWNoZWRGcmFtZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxRjFEMjFEMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFt
ZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk0MUYxRDIyMDBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjFEMjFFMEVG
MzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwICovOyB9OwogCQk0MUY1
ODRDNzEwNDY1MkNCMDA5Q0FBNjQgLyogSlNNZXNzYWdlUG9ydEN1c3RvbS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGNTg0QzYxMDQ2NTJDQjAwOUNB
QTY0IC8qIEpTTWVzc2FnZVBvcnRDdXN0b20uaCAqLzsgfTsKKwkJNDM2NzA4QkUxMkQ5Q0E0QjAw
MDQ0MjM0IC8qIFJlbmRlckZvcmVpZ25PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4N0YxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRl
ckZvcmVpZ25PYmplY3QuY3BwICovOyB9OworCQk0MzY3MDhCRjEyRDlDQTRCMDAwNDQyMzQgLyog
UmVuZGVyRm9yZWlnbk9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDM2NzA4ODAxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlckZvcmVpZ25PYmpl
Y3QuaCAqLzsgfTsKKwkJNDM2NzA4QzAxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0Jsb2Nr
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcw
ODgxMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdCbG9jay5jcHAgKi87IH07CisJCTQzNjcw
OEMxMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4ODIxMkQ5Q0E0QTAwMDQ0MjM0IC8q
IFJlbmRlclNWR0Jsb2NrLmggKi87IH07CisJCTQzNjcwOEMyMTJEOUNBNEIwMDA0NDIzNCAvKiBS
ZW5kZXJTVkdDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDM2NzA4ODMxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0NvbnRhaW5l
ci5jcHAgKi87IH07CisJCTQzNjcwOEMzMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdDb250
YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQz
NjcwODg0MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdDb250YWluZXIuaCAqLzsgfTsKKwkJ
NDM2NzA4QzQxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4NTEyRDlD
QTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCAqLzsgfTsKKwkJNDM2NzA4
QzUxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4ODYxMkQ5Q0E0QTAwMDQ0
MjM0IC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oICovOyB9OworCQk0MzY3MDhDNjEyRDlDQTRC
MDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODg3MTJEOUNBNEEwMDA0NDIzNCAv
KiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwICovOyB9OworCQk0MzY3MDhDNzEyRDlDQTRC
MDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4ODEyRDlDQTRBMDAwNDQyMzQgLyog
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi87IH07CisJCTQzNjcwOEM4MTJEOUNBNEIwMDA0
NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4OTEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1h
Z2UuY3BwICovOyB9OworCQk0MzY3MDhDOTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1h
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcw
ODhBMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5oICovOyB9OworCQk0MzY3MDhD
QTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OEIxMkQ5Q0E0QTAwMDQ0
MjM0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCAqLzsgfTsKKwkJNDM2NzA4Q0IxMkQ5Q0E0
QjAwMDQ0MjM0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4QzEyRDlDQTRBMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuaCAqLzsgfTsKKwkJNDM2NzA4Q0MxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQzNjcwODhEMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJj
ZS5jcHAgKi87IH07CisJCTQzNjcwOENEMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNv
dXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2
NzA4OEUxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlLmggKi87IH07CisJCTQz
NjcwOENFMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OEYxMkQ5
Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgKi87IH07CisJCTQz
NjcwOENGMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODkwMTJEOUNB
NEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCAqLzsgfTsKKwkJNDM2NzA4
RDAxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODkxMTJEOUNB
NEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgKi87IH07CisJCTQz
NjcwOEQxMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OTIxMkQ5
Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmggKi87IH07CisJCTQz
NjcwOEQyMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg5MzEyRDlD
QTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwICovOyB9OworCQk0MzY3
MDhEMzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODk0MTJEOUNBNEEw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oICovOyB9OworCQk0MzY3MDhENDEy
RDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OTUxMkQ5
Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCAqLzsg
fTsKKwkJNDM2NzA4RDUxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
UHJpbWl0aXZlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MzY3MDg5NjEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmlt
aXRpdmUuaCAqLzsgfTsKKwkJNDM2NzA4RDYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDM2NzA4OTcxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuY3BwICovOyB9OworCQk0MzY3MDhENzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDM2NzA4OTgxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuaCAqLzsgfTsKKwkJNDM2NzA4RDgxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jl
c291cmNlTGluZWFyR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDM2NzA4OTkxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291
cmNlTGluZWFyR3JhZGllbnQuY3BwICovOyB9OworCQk0MzY3MDhEOTEyRDlDQTRCMDAwNDQyMzQg
LyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OUExMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJl
bmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCAqLzsgfTsKKwkJNDM2NzA4REExMkQ5Q0E0
QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODlCMTJEOUNBNEIwMDA0NDIzNCAv
KiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAgKi87IH07CisJCTQzNjcwOERCMTJEOUNBNEIw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OUMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJl
bmRlclNWR1Jlc291cmNlTWFya2VyLmggKi87IH07CisJCTQzNjcwOERDMTJEOUNBNEIwMDA0NDIz
NCAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg5RDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuY3BwICovOyB9OworCQk0MzY3MDhERDEyRDlDQTRCMDAwNDQyMzQg
LyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODlFMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5oICovOyB9OworCQk0MzY3MDhERTEyRDlDQTRCMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQzNjcwODlGMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm4uY3BwICovOyB9OworCQk0MzY3MDhERjEyRDlDQTRCMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MzY3MDhBMDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuLmggKi87IH07CisJCTQzNjcwOEUwMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJT
VkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEExMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdS
ZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCAqLzsgfTsKKwkJNDM2NzA4RTExMkQ5Q0E0QjAwMDQ0
MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEEyMTJEOUNBNEIwMDA0NDIzNCAv
KiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmggKi87IH07CisJCTQzNjcwOEUyMTJE
OUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4QTMxMkQ5Q0E0QjAw
MDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgKi87IH07CisJCTQzNjcw
OEUzMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEE0MTJEOUNB
NEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCAqLzsgfTsKKwkJNDM2
NzA4RTQxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4QTUxMkQ5Q0E0QjAwMDQ0MjM0
IC8qIFJlbmRlclNWR1Jvb3QuY3BwICovOyB9OworCQk0MzY3MDhFNTEyRDlDQTRCMDAwNDQyMzQg
LyogUmVuZGVyU1ZHUm9vdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDM2NzA4QTYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuaCAqLzsg
fTsKKwkJNDM2NzA4RTYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290
Q29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzNjcwOEE3MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENv
bnRhaW5lci5jcHAgKi87IH07CisJCTQzNjcwOEU3MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJT
VkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4QTgxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1No
YWRvd1RyZWVSb290Q29udGFpbmVyLmggKi87IH07CisJCTQzNjcwOEU4MTJEOUNBNEIwMDA0NDIz
NCAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEE5MTJEOUNBNEIwMDA0NDIzNCAv
KiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCAqLzsgfTsKKwkJNDM2NzA4RTkx
MkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEFBMTJEOUNB
NEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmggKi87IH07CisJ
CTQzNjcwOEVBMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhB
QjEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwICovOyB9
OworCQk0MzY3MDhFQjEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcw
OEFDMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oICovOyB9
OworCQk0MzY3MDhFQzEyRDlDQTRCMDAwNDQyMzQgLyogU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhBRDEy
RDlDQTRCMDAwNDQyMzQgLyogU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAgKi87IH07CisJCTQzNjcw
OEVEMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhBRTEyRDlDQTRCMDAwNDQy
MzQgLyogU1ZHSW1hZ2VCdWZmZXJUb29scy5oICovOyB9OworCQk0MzY3MDhFRTEyRDlDQTRCMDAw
NDQyMzQgLyogU1ZHTWFya2VyRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDM2NzA4QUYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR01hcmtlckRhdGEu
aCAqLzsgfTsKKwkJNDM2NzA4RUYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR01hcmtlckxheW91dElu
Zm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2
NzA4QjAxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR01hcmtlckxheW91dEluZm8uY3BwICovOyB9Owor
CQk0MzY3MDhGMDEyRDlDQTRCMDAwNDQyMzQgLyogU1ZHTWFya2VyTGF5b3V0SW5mby5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4QjExMkQ5Q0E0
QjAwMDQ0MjM0IC8qIFNWR01hcmtlckxheW91dEluZm8uaCAqLzsgfTsKKwkJNDM2NzA4RjExMkQ5
Q0E0QjAwMDQ0MjM0IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4QjIxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNW
R1JlbmRlclN1cHBvcnQuY3BwICovOyB9OworCQk0MzY3MDhGMjEyRDlDQTRCMDAwNDQyMzQgLyog
U1ZHUmVuZGVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDM2NzA4QjMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1JlbmRlclN1cHBvcnQuaCAq
LzsgfTsKKwkJNDM2NzA4RjMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1JlbmRlclRyZWVBc1RleHQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4
QjQxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuY3BwICovOyB9OworCQk0
MzY3MDhGNDEyRDlDQTRCMDAwNDQyMzQgLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4QjUxMkQ5Q0E0QjAw
MDQ0MjM0IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuaCAqLzsgfTsKKwkJNDM2NzA4RjUxMkQ5Q0E0
QjAwMDQ0MjM0IC8qIFNWR1Jlc291cmNlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhCNjEyRDlDQTRCMDAwNDQyMzQgLyogU1ZHUmVzb3Vy
Y2VzLmNwcCAqLzsgfTsKKwkJNDM2NzA4RjYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1Jlc291cmNl
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4
QjcxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1Jlc291cmNlcy5oICovOyB9OworCQk0MzY3MDhGNzEy
RDlDQTRCMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4QjgxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFNWR1Jlc291cmNlc0NhY2hlLmNwcCAqLzsgfTsKKwkJNDM2NzA4RjgxMkQ5Q0E0QjAwMDQ0MjM0
IC8qIFNWR1Jlc291cmNlc0NhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MzY3MDhCOTEyRDlDQTRCMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzQ2Fj
aGUuaCAqLzsgfTsKKwkJNDM2NzA4RjkxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1Jlc291cmNlc0N5
Y2xlU29sdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzNjcwOEJBMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5j
cHAgKi87IH07CisJCTQzNjcwOEZBMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdSZXNvdXJjZXNDeWNs
ZVNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDM2NzA4QkIxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmggKi87
IH07CisJCTQzNjcwOEZCMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4
QkMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAgKi87IH07CisJ
CTQzNjcwOEZDMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEJEMTJEOUNB
NEIwMDA0NDIzNCAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuaCAqLzsgfTsKIAkJNDQxNTI5MkUw
RTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MTUyOTJDMEUxQUU4QTAwMEM0QTJE
MCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDQxNTI5MkYwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDQxNTI5MkQwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuY3BwICovOyB9OwogCQk0NDFCMDU1QzBDRDc3QTJEMDA3QzFGMTggLyogRE9NSFRNTEVt
YmVkRWxlbWVudFByaXZhdGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MjlBQUZCMENCODRFODgwMDc2NDdDNSAvKiBET01I
VE1MRW1iZWRFbGVtZW50UHJpdmF0ZS5oICovOyB9OwpAQCAtMTY1NSw4ICsxNjg1LDYgQEAKIAkJ
ODQxOUQyQUQxMjBEOTJGQzAwMTQxRjhGIC8qIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDE5RDJBQjEyMEQ5
MkZDMDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaCAqLzsgfTsKIAkJODQxOUQy
QjkxMjBFMEM3NjAwMTQxRjhGIC8qIFNWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MTlEMkI3MTIwRTBDNzYwMDE0
MUY4RiAvKiBTVkdQYXRoU3RyaW5nQnVpbGRlci5jcHAgKi87IH07CiAJCTg0MTlEMkJBMTIwRTBD
NzYwMDE0MUY4RiAvKiBTVkdQYXRoU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQxOUQyQjgxMjBFMEM3NjAwMTQxRjhGIC8qIFNW
R1BhdGhTdHJpbmdCdWlsZGVyLmggKi87IH07Ci0JCTg0MUZEQzI2MTE3OEM5QkUwMEY4QUM5QiAv
KiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDFGREMyNDExNzhDOUJFMDBGOEFDOUIgLyogUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwICovOyB9OwotCQk4NDFGREMyNzExNzhDOUJFMDBGOEFDOUIgLyog
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg0MUZEQzI1MTE3OEM5QkUwMEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5oICovOyB9OwogCQk4NDIyNDE4MzEwN0U3N0Y0MDA3NjZBODcgLyogSlNTVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0MjI0MTgxMTA3RTc3RjQwMDc2NkE4NyAvKiBKU1NWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQuY3BwICovOyB9OwogCQk4NDIyNDE4NDEwN0U3N0Y0MDA3NjZBODcgLyogSlNTVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NDIyNDE4MjEwN0U3N0Y0MDA3NjZBODcgLyogSlNTVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmggKi87IH07CiAJCTg0MjI0MThDMTA3RTc4NkYwMDc2NkE4NyAvKiBET01TVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NDIyNDE4OTEwN0U3ODZGMDA3NjZBODcgLyogRE9NU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudC5oICovOyB9OwpAQCAtMTcyMSw4ICsxNzQ5LDYgQEAKIAkJODQ4NTIyODYxMTkwMTZBNzAw
NkVEQzdGIC8qIERPTVNWR1ZLZXJuRWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0ODUyMjgyMTE5MDE2QTcwMDZFREM3RiAvKiBET01TVkdW
S2VybkVsZW1lbnQubW0gKi87IH07CiAJCTg0ODUyMjhBMTE5MDE3M0MwMDZFREM3RiAvKiBTVkdW
S2VybkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ4NTIyODcxMTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVudC5jcHAgKi87
IH07CiAJCTg0ODUyMjhCMTE5MDE3M0MwMDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0ODUyMjg4MTE5MDE3
M0MwMDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaCAqLzsgfTsKLQkJODQ5OUE1MTQxMTVGQjMz
MDAwRjU2NkUzIC8qIFJlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0OTlBNTEyMTE1RkIzMzAwMEY1NjZFMyAv
KiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAgKi87IH07Ci0JCTg0OTlBNTE1MTE1RkIzMzAw
MEY1NjZFMyAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ5OUE1MTMxMTVGQjMzMDAwRjU2NkUzIC8qIFJl
bmRlclNWR1Jlc291cmNlTWFya2VyLmggKi87IH07CiAJCTg0OUY3Nzc2MEVGRUM2MjAwMDkwODQ5
RCAvKiBTdHJva2VTdHlsZUFwcGxpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg0OUY3Nzc1MEVGRUM2MjAwMDkwODQ5RCAvKiBTdHJva2VTdHlsZUFw
cGxpZXIuaCAqLzsgfTsKIAkJODRBODFGM0QwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgx
RjNCMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5jcHAgKi87IH07CiAJCTg0QTgxRjNF
MEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRBODFGM0MwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJj
ZUFscGhhLmggKi87IH07CkBAIC0xNzMwLDggKzE3NTYsNiBAQAogCQk4NEE4MUY0MjBGQzdFMDI3
MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODRBODFGNDAwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBo
aWMuaCAqLzsgfTsKIAkJODRCNkI5NzcxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0
U291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg0QjZCOTc1MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAgKi87
IH07CiAJCTg0QjZCOTc4MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRCNkI5NzYx
MjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmggKi87IH07Ci0JCTg0QkRB
MTZCMTEzNThEMkEwMERCRjY0QyAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRCREExNjkxMTM1OEQy
QTAwREJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgKi87IH07Ci0JCTg0QkRB
MTZDMTEzNThEMkEwMERCRjY0QyAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QkRBMTZBMTEzNThEMkEw
MERCRjY0QyAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCAqLzsgfTsKIAkJODRDNUIyRkEx
MjE2REM4MTAwODhCNTNBIC8qIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRDNUIyRjgxMjE2REM4
MTAwODhCNTNBIC8qIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuY3BwICovOyB9OwogCQk4
NEM1QjJGQjEyMTZEQzgxMDA4OEI1M0EgLyogU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRDNUIyRjkx
MjE2REM4MTAwODhCNTNBIC8qIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaCAqLzsgfTsK
IAkJODRDNjc4NEMxMjE0ODE0NzAwQTkyOTAyIC8qIFNWR1BhdGhCbGVuZGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QzY3ODRBMTIxNDgxNDcw
MEE5MjkwMiAvKiBTVkdQYXRoQmxlbmRlci5jcHAgKi87IH07CkBAIC0xOTg1LDEyICsyMDA5LDYg
QEAKIAkJODUzQkY0REIwQUJCNkI1NTAwODY0N0JCIC8qIERPTU5vZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1M0JGNEQ5MEFCQjZCNTUwMDg2NDdC
QiAvKiBET01Ob2RlLmggKi87IH07CiAJCTg1M0JGNERDMEFCQjZCNTUwMDg2NDdCQiAvKiBET01O
b2RlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUz
QkY0REEwQUJCNkI1NTAwODY0N0JCIC8qIERPTU5vZGUubW0gKi87IH07CiAJCTg1M0JGNEVDMEFC
QjZFQjkwMDg2NDdCQiAvKiBET01Ob2RlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTNCRjREOTBBQkI2QjU1MDA4NjQ3QkIg
LyogRE9NTm9kZS5oICovOyB9OwotCQk4NTNDQTlENjBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVy
U1ZHQ29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg1M0NBOUNBMEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdDb250YWluZXIuY3Bw
ICovOyB9OwotCQk4NTNDQTlENzBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHQ29udGFpbmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTNDQTlD
QjBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggKi87IH07Ci0JCTg1M0NB
OUQ4MEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTNDQTlDQzBBRUVDNUU5MDAyMzcyREMg
LyogUmVuZGVyU1ZHSW1hZ2UuY3BwICovOyB9OwotCQk4NTNDQTlEOTBBRUVDNUU5MDAyMzcyREMg
LyogUmVuZGVyU1ZHSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg1M0NBOUNEMEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdJbWFnZS5oICov
OyB9OwotCQk4NTNDQTlFQzBBRUVDNjNDMDAyMzcyREMgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTNDQTlF
QTBBRUVDNjNDMDAyMzcyREMgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAgKi87IH07Ci0JCTg1
M0NBOUVEMEFFRUM2M0MwMDIzNzJEQyAvKiBSZW5kZXJGb3JlaWduT2JqZWN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTNDQTlFQjBBRUVDNjNDMDAy
MzcyREMgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5oICovOyB9OwogCQk4NTQwNzRGQzBBRDZDMjJF
MDA2MjBDNTcgLyogRE9NU1ZHTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NTQwNzRGOTBBRDZDMjJFMDA2MjBDNTcgLyogRE9NU1ZHTnVtYmVy
LmggKi87IH07CiAJCTg1NDA3NEZEMEFENkMyMkUwMDYyMEM1NyAvKiBET01TVkdQb2ludC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODU0MDc0RkEwQUQ2
QzIyRTAwNjIwQzU3IC8qIERPTVNWR1BvaW50LmggKi87IH07CiAJCTg1NDA3NEZFMEFENkMyMkUw
MDYyMEM1NyAvKiBET01TVkdSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NTQwNzRGQjBBRDZDMjJFMDA2MjBDNTcgLyogRE9NU1ZHUmVjdC5oICov
OyB9OwpAQCAtMzExOCw4ICszMTM2LDYgQEAKIAkJQTYyMkE4RkYxMjJDNDRBNjAwQTc4NUIzIC8q
IEdlbmVyaWNCaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNjIyQThGOTEyMkM0NEE2MDBBNzg1QjMgLyogR2VuZXJpY0JpbmRpbmcuaCAqLzsg
fTsKIAkJQTcxODc2MEUwQjJBMTIwMTAwQTE2RUNFIC8qIERyYWdBY3Rpb25zLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE4NzYwRDBCMkExMjAxMDBB
MTZFQ0UgLyogRHJhZ0FjdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBNzE4Nzg5MDBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xs
ZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzE4Nzg4RjBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xsZXJNYWMubW0gKi87IH07Ci0J
CUE3MzUyQzE5MEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdCbG9jay5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM1MkMxNzBCMUJCODlEMDBB
OTg2RDAgLyogUmVuZGVyU1ZHQmxvY2suY3BwICovOyB9OwotCQlBNzM1MkMxQTBCMUJCODlEMDBB
OTg2RDAgLyogUmVuZGVyU1ZHQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3MzUyQzE4MEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdCbG9j
ay5oICovOyB9OwogCQlBNzVFNDk3NjEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzVFNDk3NDEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc1RTQ5NzcxMDc1
MkFDQjAwQzlCODk2IC8qIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzVFNDk3NTEwNzUyQUNCMDBDOUI4OTYg
LyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCAqLzsgfTsKIAkJQTc1RThCODgwRTFERTJENjAw
N0YyNDgxIC8qIEZFQmxlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTc1RThCODAwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuY3BwICovOyB9
OwpAQCAtMzE2MywxMCArMzE3OSw2IEBACiAJCUE3REJGOERFMTI3NjkxOUMwMDZCNjAwOCAvKiBU
ZXh0Q2hlY2tpbmdIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3REJGOERDMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIu
aCAqLzsgfTsKIAkJQTdGMzM4QTMxMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGMzM4QTEx
MUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuY3BwICovOyB9OwogCQlBN0YzMzhBNDEx
QzBFRkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGMzM4QTIxMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRv
d0VsZW1lbnQuaCAqLzsgfTsKLQkJQTgwOUYxNDcwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNW
R0dyYWRpZW50U3RvcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTgwOUYxNDUwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5o
ICovOyB9OwotCQlBODA5RjE0ODBCNzM3OTNCMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRT
dG9wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
MDlGMTQ2MEI3Mzc5M0EwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwICovOyB9
OwotCQlBODA5RjFBQTBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODA5RjFB
ODBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi87IH07Ci0J
CUE4MDlGMUFCMEI3MzdGQjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxQTkw
QjczN0ZCNjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgKi87IH07CiAJ
CUE4MEEzOEZFMEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwQTM4RkQwRTUwQ0M4MjAwQTI1RUJD
IC8qIFBhdHRlcm5DRy5jcHAgKi87IH07CiAJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBGMCAvKiBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi87IH07CiAJCUE4MEU2Q0U0MEExOTg5Q0Ew
MDdGQjhDNSAvKiBDU1NWYWx1ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQkEwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlz
dC5jcHAgKi87IH07CkBAIC0zNTQ5LDggKzM1NjEsNiBAQAogCQlBODk5NDMyOTBCNDIzMzg4MDBE
N0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNw
cCAqLzsgfTsKIAkJQTg5Q0NDNTIwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VOb2RlV2l0aFNw
YW5Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4OUNDQzUwMEY0NEU5ODEwMEI1REExMCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFu
ZC5jcHAgKi87IH07CiAJCUE4OUNDQzUzMEY0NEU5ODEwMEI1REExMCAvKiBSZXBsYWNlTm9kZVdp
dGhTcGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTg5Q0NDNTEwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21t
YW5kLmggKi87IH07Ci0JCUE4QTkwOUFDMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFu
c2Zvcm1hYmxlQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEE5MDlBQTBDQkNENkI1MDAyOUI4MDcgLyogUmVuZGVyU1ZHVHJhbnNmb3Jt
YWJsZUNvbnRhaW5lci5oICovOyB9OwotCQlBOEE5MDlBRDBDQkNENkI1MDAyOUI4MDcgLyogUmVu
ZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE5MDlBQjBDQkNENkI1MDAyOUI4MDcgLyogUmVuZGVy
U1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAgKi87IH07CiAJCUE4QkMwNDkyMTIxNEY2OTYw
MEI1RjEyMiAvKiBIVE1MRW50aXR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThCQzA0OTExMjE0RjY5NjAwQjVGMTIyIC8qIEhUTUxFbnRp
dHlUYWJsZS5jcHAgKi87IH07CiAJCUE4QzIyODBFMTFENEE1OTcwMEQ1QTdEMyAvKiBEb2N1bWVu
dFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBOEMyMjgwRDExRDRBNTk3MDBENUE3RDMgLyogRG9jdW1lbnRQYXJzZXIuY3BwICovOyB9Owog
CQlBOEMyMjhBMTExRDU3MjJFMDBENUE3RDMgLyogRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMjI4OUYx
MUQ1NzIyRTAwRDVBN0QzIC8qIERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuaCAqLzsgfTsKQEAg
LTM5NTYsMTAgKzM5NjYsNiBAQAogCQlBOEY0NkI3QzBDQjIwQTlEMDAzQTk2NzAgLyogRE9NU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUM5QTJGQjBBRDdFOTQyMDBGQkZGMUUgLyog
RE9NU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmggKi87IH07CiAJCUE4RjQ2QjdEMENCMjBBOUQw
MDNBOTY3MCAvKiBET01TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCBpbiBDb3B5IEdlbmVyYXRl
ZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1OUQ2Mjc5MEFE
ODg4RUUwMDAxMjk5NSAvKiBET01TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCAqLzsgfTsKIAkJ
QThGNDZCODEwQ0IyMEE5RDAwM0E5NjcwIC8qIERPTVNWR1N0cmluZ0xpc3QuaCBpbiBDb3B5IEdl
bmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RDc5
QUQyMEFDQTE3RUIwMEYwMkZDNSAvKiBET01TVkdTdHJpbmdMaXN0LmggKi87IH07Ci0JCUE4RjRG
Qjk0MEMxNjlFN0IwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEY0RkI5MzBDMTY5RTdCMDAyQUZFRDUg
LyogU1ZHUmVuZGVyU3VwcG9ydC5oICovOyB9OwotCQlBOEY0RkI5NjBDMTY5RTg1MDAyQUZFRDUg
LyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOEY0RkI5NTBDMTY5RTg1MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9y
dC5jcHAgKi87IH07Ci0JCUE4RjVDMEI4MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5kZXJTVkdNb2Rl
bE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QThGNUMwQjYwRjkyODVBQzAwOThFMDZCIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggKi87IH07
Ci0JCUE4RjVDMEI5MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEY1QzBCNzBG
OTI4NUFDMDA5OEUwNkIgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwICovOyB9OwogCQlBOEZB
NkU1RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRl
cm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
OEZBNkU1RTBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyog
UGF0dGVybi5jcHAgKi87IH07CiAJCUE5QzZFNEUzMEQ3NDVFMDUwMDY0NDJFOSAvKiBET01NaW1l
VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OUM2RTRFMTBENzQ1RTA1MDA2NDQyRTkgLyogRE9NTWltZVR5cGUuY3BwICovOyB9OwpAQCAtMzk5
MCw4ICszOTk2LDYgQEAKIAkJQTlEMjQ4MDkwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5
cGVBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTlEMjQ4MDUwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGVBcnJheS5oICovOyB9Owog
CQlBQTIxRUNDQTBBQkYwRkJBMDAyQjgzNEMgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTA5NzhFRDBBQkFB
NkUxMDA4NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAgKi87IH07CiAJCUFBMjFFQ0NE
MEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTA5NzhFRTBBQkFBNkUxMDA4NzQ0ODAg
LyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCUFBMzFCNUI0MEMxREZEMTAwMEFFNzA4MyAvKiBSZW5kZXJTVkdS
b290LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFB
MzFCNUIyMEMxREZEMTAwMEFFNzA4MyAvKiBSZW5kZXJTVkdSb290LmNwcCAqLzsgfTsKLQkJQUEz
MUI1QjUwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRlclNWR1Jvb3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBMzFCNUIzMEMxREZEMTAwMEFFNzA4MyAv
KiBSZW5kZXJTVkdSb290LmggKi87IH07CiAJCUFBNEMzQTc2MEIyQjE2NzkwMDIzMzRBMiAvKiBT
dHlsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUE0QzNBNzQwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5jcHAgKi87IH07
CiAJCUFBNEMzQTc3MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBNEMzQTc1MEIyQjE2NzkwMDIz
MzRBMiAvKiBTdHlsZUVsZW1lbnQuaCAqLzsgfTsKIAkJQUIwMTRERTMwRTY4OUE0MzAwRTEwNDQ1
IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjAxNERFMTBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmNwcCAqLzsgfTsKQEAgLTQ0MzcsMTQgKzQ0NDEsMTAgQEAKIAkJ
QjJDQjkyNjIwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZS5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0I5MjVFMEI1QkRB
MDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2UubW0gKi87IH07CiAJCUIyQ0I5MjYz
MEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkNCOTI1RjBCNUJEQTAyMDA5
QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5oICovOyB9OwogCQlCMkNCOTI2NDBC
NUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0I5MjYwMEI1QkRBMDIwMDlC
QUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tICovOyB9OwotCQlCMkNDRUM0NzBD
NkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQ0VDNDUwQzZDQTlGMTAw
NkE1NDI0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCAqLzsgfTsKLQkJQjJDQ0VD
NDgwQzZDQTlGMTAwNkE1NDI0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkNDRUM0NjBDNkNBOUYx
MDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCAqLzsgfTsKIAkJQjJFMjdD
OUYwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyog
RmxvYXRQb2ludDNELmNwcCAqLzsgfTsKIAkJQjJFMjdDQTAwQjBGMkIwOTAwRjE3QzdCIC8qIEZs
b2F0UG9pbnQzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjJFMjdDOUUwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyRTRFQzk3MEQwMEMyMkIw
MDQzMjY0MyAvKiBTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjJFNEVDOTQwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVu
dC5jcHAgKi87IH07CiAJCUIyRTRFQzk4MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRTRFQzk1
MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCAqLzsgfTsKLQkJQjJFQkRDOUMwQUY3
N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFQkRDOUEwQUY3N0UzNDAwQUU0QTY4IC8q
IFNWR1JlbmRlclRyZWVBc1RleHQuY3BwICovOyB9OwotCQlCMkVCREM5RDBBRjc3RTM0MDBBRTRB
NjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjJFQkRDOUIwQUY3N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRlclRy
ZWVBc1RleHQuaCAqLzsgfTsKIAkJQjJFRDk3NzEwQjFGNTVDRTAwMjU3RDBGIC8qIEdyYXBoaWNz
Q29udGV4dENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyRUQ5NzcwMEIxRjU1Q0UwMDI1N0QwRiAvKiBHcmFwaGljc0NvbnRleHRDRy5jcHAgKi87
IH07CiAJCUIyRjM0RkU2MEU4MkY4MTQwMEY2MjdDRCAvKiBETlMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRjM0RkU1MEU4MkY4MTQwMEY2MjdDRCAv
KiBETlMuaCAqLzsgfTsKIAkJQjJGMzRGRTkwRTgyRjgyNzAwRjYyN0NEIC8qIEROU0NGTmV0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRjM0RkU4
MEU4MkY4MjcwMEY2MjdDRCAvKiBETlNDRk5ldC5jcHAgKi87IH07CkBAIC02MzQ3LDcgKzYzNDcs
NiBAQAogCQkwODA0QkY2QzBFRTA5QzNCMDAwNkMwMDAgLyogV01MRG9FbGVtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTERvRWxlbWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MDRCRjZEMEVFMDlDM0IwMDA2QzAwMCAvKiBXTUxE
b0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRG9FbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MDZFNTc5MTI4OTMwNDUwMDdDRUQz
MiAvKiBTVkdNYXRyaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTWF0
cml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4MDgyMzcyMTE3OTg3QzEwMDI0
MURFOCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwODBBRUM3RDBFRDg3MDhBMDBERjRDQ0UgLyogV01MSW50cmluc2lj
RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MSW50cmlu
c2ljRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODBBRUM3RTBFRDg3
MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV01MSW50cmluc2ljRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDgwQUVDN0YwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxJbnRyaW5zaWNF
dmVudEhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjM4MSwxMCAr
NjM4MCw2IEBACiAJCTA4MjNEMTU4MTI3QUQ2QUMwMDBFQkM5NSAvKiBTVkdBbmltYXRlZEludGVn
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRJbnRlZ2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MjUwOTM4MTI4QkQ0RDgwMEUyRUQ4
RSAvKiBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA4MkRFNDJDMTI5MjYyMTYwMEQ5MjNERiAvKiBTVkdQYXRoU2VnV2l0aENvbnRl
eHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFNlZ1dpdGhDb250
ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4MzE5MkE3MTEyQjQzMDUwMDgz
QzNCOSAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJTVkdSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
ODMxOTJBODExMkI0MzA1MDA4M0MzQjkgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODMxOTJBOTExMkI0MzA1MDA4
M0MzQjkgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMDgzODVGRjUxMEYwMTg2MDAwQkZFMDdCIC8qIFNWR01hcmtlckRhdGEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTWFya2VyRGF0YS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTQw
RjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjM5NiwxMCArNjM5MSw2IEBA
CiAJCTA4NENFNUM4MEYyN0RBREMwMEU2MjQwRSAvKiBXTUxPcHRHcm91cEVsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MT3B0R3JvdXBFbGVtZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NENFNUM5MEYyN0RBREMwMEU2MjQwRSAvKiBXTUxP
cHRpb25FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdN
TE9wdGlvbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODRDRTVD
QTBGMjdEQURDMDBFNjI0MEUgLyogV01MT3B0aW9uRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXTUxPcHRpb25FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTA4NEQwRTM4MTFGNTgxNjEwMDA4MUUxQSAvKiBTVkdSZXNvdXJjZXMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg0RDBFMzkxMUY1ODE2MTAwMDgxRTFBIC8qIFNW
R1Jlc291cmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdSZXNvdXJj
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg0RDBFM0ExMUY1ODE2MTAwMDgx
RTFBIC8qIFNWR1Jlc291cmNlc0NhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNWR1Jlc291cmNlc0NhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMDg0RDBFM0IxMUY1ODE2MTAwMDgxRTFBIC8qIFNWR1Jlc291cmNlc0NhY2hlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Jlc291cmNlc0NhY2hlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NERCNTlBMTI4MDA4Q0MwMDJBNkQ2NCAvKiBTVkdB
bmltYXRlZFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmlt
YXRlZFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODREQkE5RDBFRDM5
RDM1MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdNTFZhcmlhYmxlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA4NERCQTlFMEVEMzlEMzYwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MVmFyaWFibGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC02NDIyLDMwICs2NDEzLDIyIEBACiAJCTA4NTRCMDExMTI1NUU0RTYwMEI5
Q0REMCAvKiBTVkdSb290SW5saW5lQm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1Jvb3RJbmxpbmVCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1
NEIwMTIxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0UXVlcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwODU0QjAxMzEyNTVFNEU2MDBCOUNERDAgLyogU1ZHVGV4dFF1ZXJ5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RleHRRdWVyeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwODU2M0JCMjExNzg2MTc3MDAxMkI1NzggLyogUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTA4NTYzQkIzMTE3ODYxNzcwMDEyQjU3OCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4NTYzQkNGMTE3ODY1RjUw
MDEyQjU3OCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA4NTc5NzA4MTI3ODM5NEMwMEE4RUM1RiAvKiBTVkdBbmltYXRlZEJvb2xlYW4u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRCb29sZWFuLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NTkxQUE0MEYwODVDNEUwMDlCQUNCMSAv
KiBJbnB1dEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5wdXRF
bGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NUExNTkyMTI4OUE4REQw
MDI3MTBFMyAvKiBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJv
cGVydHlUZWFyT2ZmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NUFGREM2MEYy
OTc3MzUwMDYxRjJCMyAvKiBXTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1QUZEQzcwRjI5NzczNTAwNjFGMkIzIC8qIFdNTEZv
cm1Db250cm9sRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxG
b3JtQ29udHJvbEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg1QjA1
QzAxMUZBRTE2QzAwNEQ2NUY2IC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg1QjA1QzExMUZBRTE2QzAwNEQ2NUY2
IC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA4NUI5MkI4MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybURhdGFCdWlsZGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1QjkyQjkwRUZERTczRDAwRTYxMjNDIC8q
IEZvcm1EYXRhQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3Jt
RGF0YUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2NDFENDUxMjE0
MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUlt
YWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2NDFENDYxMjE0MkY3RDAw
OERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NjVDQ0U0MEVEREY1MUIwMERGOUVDMyAvKiBXTUxO
b29wRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxO
b29wRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NjVDQ0U1MEVE
REY1MUIwMERGOUVDMyAvKiBXTUxOb29wRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXTUxOb29wRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwODZBNDAwNTExRjZENkI3MDAyQ0VDNTMgLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODcwMEJFNjBG
MDg2QzUzMDA5MTk0MTkgLyogSW5wdXRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IElucHV0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA4NzI4MTUxMEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbkVsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODcyODE1MjBGMjZCOUI2MDBBRkM1OTYgLyogT3B0
aW9uRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25FbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NzI4MTUzMEYyNkI5QjYwMEFG
QzU5NiAvKiBPcHRpb25Hcm91cEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT3B0aW9uR3JvdXBFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDg3MjgxNTQwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkdyb3VwRWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25Hcm91cEVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg3MzVGQjYxMEU5MTIzMjAwNkQ2RkFEIC8q
IFNWR01hcmtlckxheW91dEluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU1ZHTWFya2VyTGF5b3V0SW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTA4NzM1RkI3MTBFOTEyMzIwMDZENkZBRCAvKiBTVkdNYXJrZXJMYXlvdXRJbmZvLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR01hcmtlckxheW91dEluZm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg3NDRCQTkwRURCN0Q4NjAwNEM5RTYzIC8qIFdN
TE9uRXZlbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdNTE9uRXZlbnRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg3
NDRCQUQwRURCN0Q5MjAwNEM5RTYzIC8qIFdNTE9uRXZlbnRFbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTE9uRXZlbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA4N0I4NDk1MTI3MkNFQzcwMEExNDQxNyAvKiBTVkdBbmltYXRlZEFu
Z2xlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkQW5nbGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0OTMsMjAgKzY0NzYsMTAgQEAKIAkJ
MDhBNDhBNkQwRTg2Q0Y2RDAwRTIyNUREIC8qIEpTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHRWxlbWVudEluc3Rh
bmNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhCMzVCMTIxMjdC
NkE3QzAwNTMxNEREIC8qIFNWR0FuaW1hdGVkTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkTnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA4QjM1QjE2MTI3QjZBODgwMDUzMTRERCAvKiBTVkdBbmltYXRlZE51bWJlckxpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWROdW1iZXJMaXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4QzM0QUYxMTE3OUMwNTYwMDJENzQ1
NiAvKiBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwOEMzNEFGMjExNzlDMDU3MDAyRDc0NTYgLyogUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4
QzM0QUYzMTE3OUMwNTcwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291
cmNlTGluZWFyR3JhZGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwOEMz
NEFGNDExNzlDMDU3MDAyRDc0NTYgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUxpbmVh
ckdyYWRpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4QzM0QUZCMTE3OUMw
NzIwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3Jh
ZGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwOEMzNEFGQzExNzlDMDcy
MDAyRDc0NTYgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4QzQ2QjY3MTIxMkYxNUQwMDExQUY0MCAv
KiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNWR0ltYWdlQnVmZmVyVG9vbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwOEM0NkI2ODEyMTJGMTVEMDAxMUFGNDAgLyogU1ZHSW1hZ2VCdWZmZXJUb29scy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUJ1ZmZlclRvb2xzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4QzRDNTE0MEVGMTlBNDAwMEU0ODQwRiAvKiBX
TUxJbWFnZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V01MSW1hZ2VFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhDNEM1
MTUwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXTUxJbWFnZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDhDNEM1MTYwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdlTG9hZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEltYWdlTG9hZGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhDNEM1MTcwRUYxOUE0MDAwRTQ4NDBGIC8q
IFdNTEltYWdlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTElt
YWdlTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4QzZBN0E5MTE3REZC
QUIwMEZFQTFBMiAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDhDNkE3QUExMTdERkJBQjAwRkVBMUEy
IC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDhDNzEzNkQxMjg5NTZBMzAwMUIxMDdFIC8qIFNWR1RyYW5zZm9ybUxp
c3RQcm9wZXJ0eVRlYXJPZmYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
VHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwOEM4NTlCRjEyNzQ1NzUzMDBBNTcyOEQgLyogU1ZHQW5pbWF0ZWRSZWN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkUmVjdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwOEM5MjUxNzBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZm
ZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZpbHRlckVmZmVj
dC5jcHA7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC02NTE1LDEwICs2NDg4LDYgQEAKIAkJMDhDRDYxQjgwRUQzOTI5QzAwMkRE
RjUxIC8qIFdNTFRhc2tFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdNTFRhc2tFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MDhDRDYxQjkwRUQzOTI5QzAwMkRERjUxIC8qIFdNTFRhc2tFbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFRhc2tFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA4RDQ2Q0UyMTI3QUQ1RkMwMDg5Njk0QiAvKiBTVkdBbmltYXRlZEVudW1l
cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkRW51
bWVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDhEQUI5QjgxMTAzRDlB
NTAwM0U3QUJBIC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29u
dGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDhEQUI5QjkxMTAzRDlB
NTAwM0U3QUJBIC8qIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4REFCOUMwMTEwM0Q5QzEwMDNFN0FC
QSAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMDhEQUI5QzExMTAzRDlDMTAwM0U3QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVt
ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdTaGFkb3dUcmVlRWxl
bWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhFMTkyNTEwRURFMEMzOTAw
ODdCNzgwIC8qIFdNTEVycm9ySGFuZGxpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV01MRXJyb3JIYW5kbGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA4RTE5MjUyMEVERTBDM0EwMDg3Qjc4MCAvKiBXTUxFcnJvckhhbmRsaW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEVycm9ySGFuZGxpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhFNEZFNDUwRTJCRDQxNDAwRjRDQUUwIC8qIEpTU1ZH
TGVuZ3RoQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
U1ZHTGVuZ3RoQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY2Njgs
OCArNjYzNyw2IEBACiAJCTE5MjEzMjcxMTFDMEU2QkIwMDQ1NjIzOCAvKiBTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE5MjEzMjcyMTFDMEU2QkIwMDQ1NjIzOCAvKiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxOTIxMzI3MzExQzBFNkJC
MDA0NTYyMzggLyogU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMTk0MjNCNEUxMjM0RTg2QjAwRDFFRTlFIC8qIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMTk0MjNCNEYxMjM0RTg2QjAwRDFFRTlFIC8qIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyUHJpbWl0aXZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE5QkZGNjQ2MTFDMEYyQUMwMEI4QzA0RCAvKiBET01TVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxOUJGRjY0
NzExQzBGMkFDMDBCOEMwNEQgLyogRE9NU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTlCRkY2NDgxMUMw
RjJBQzAwQjhDMDREIC8qIERPTVNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50SW50ZXJuYWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHRkVDb252b2x2ZU1hdHJpeEVs
ZW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzMwMSw2ICs3
MjY4LDY5IEBACiAJCTQxRjFEMjFEMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFt
ZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjFEMjFFMEVGMzVDMkEw
MERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDFGNTg0QzYxMDQ2NTJDQjAwOUNBQTY0IC8qIEpTTWVzc2FnZVBv
cnRDdXN0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZXNzYWdlUG9y
dEN1c3RvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDg3RjEyRDlDQTRB
MDAwNDQyMzQgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJGb3JlaWduT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDM2NzA4ODAxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlckZvcmVpZ25P
YmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRm9yZWlnbk9i
amVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDg4MTEyRDlDQTRBMDAw
NDQyMzQgLyogUmVuZGVyU1ZHQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyU1ZHQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0MzY3MDg4MjEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHQmxvY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHQmxvY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDM2NzA4ODMxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0NvbnRh
aW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdD
b250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDg4NDEyRDlD
QTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclNWR0NvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MzY3MDg4NTEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0dyYWRp
ZW50U3RvcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwODg2MTJEOUNB
NEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQzNjcwODg3MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdIaWRkZW5D
b250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
U1ZHSGlkZGVuQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2
NzA4ODgxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4ODkxMkQ5Q0E0QTAwMDQ0MjM0IC8q
IFJlbmRlclNWR0ltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlclNWR0ltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4
OEExMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0ltYWdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0ltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQzNjcwODhCMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdNb2RlbE9i
amVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwODhDMTJEOUNBNEEw
MDA0NDIzNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJTVkdNb2RlbE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MzY3MDg4RDEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDg4RTEyRDlDQTRBMDAwNDQy
MzQgLyogUmVuZGVyU1ZHUmVzb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyU1ZHUmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2
NzA4OEYxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDg5MDEyRDlDQTRBMDAw
NDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0MzY3MDg5MTEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0MzY3MDg5MjEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4OTMxMkQ5Q0E0QTAw
MDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4OTQxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcw
ODk1MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcw
ODk2MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDg5NzEyRDlD
QTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4OTgxMkQ5Q0E0QTAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MzY3MDg5OTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDM2NzA4OUExMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFy
R3JhZGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUmVz
b3VyY2VMaW5lYXJHcmFkaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3
MDg5QjEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDg5QzEyRDlDQTRCMDAwNDQy
MzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDM2NzA4OUQxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jl
c291cmNlTWFza2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4OUUx
MkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwODlGMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDM2NzA4QTAxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QTExMkQ5Q0E0QjAw
MDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwOEEyMTJEOUNBNEIwMDA0
NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QTMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0MzY3MDhBNDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MzY3MDhBNTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSb290LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QTYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jv
b3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUm9vdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDhBNzEyRDlDQTRCMDAwNDQyMzQgLyog
UmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDhBODEyRDlDQTRCMDAwNDQyMzQgLyog
UmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QTkxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQzNjcwOEFBMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdU
cmFuc2Zvcm1hYmxlQ29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDM2NzA4QUIxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNW
R1ZpZXdwb3J0Q29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2
NzA4QUMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwOEFEMTJEOUNBNEIwMDA0NDIz
NCAvKiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNWR0ltYWdlQnVmZmVyVG9vbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MzY3MDhBRTEyRDlDQTRCMDAwNDQyMzQgLyogU1ZHSW1hZ2VCdWZmZXJUb29scy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUJ1ZmZlclRvb2xzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwOEFGMTJEOUNBNEIwMDA0NDIzNCAv
KiBTVkdNYXJrZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR01h
cmtlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QjAxMkQ5Q0E0
QjAwMDQ0MjM0IC8qIFNWR01hcmtlckxheW91dEluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU1ZHTWFya2VyTGF5b3V0SW5mby5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQzNjcwOEIxMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdNYXJrZXJMYXlv
dXRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR01hcmtlckxheW91
dEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QjIxMkQ5Q0E0QjAw
MDQ0MjM0IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHUmVuZGVyU3VwcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQzNjcwOEIzMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdSZW5kZXJTdXBwb3J0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1JlbmRlclN1cHBvcnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QjQxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1Jl
bmRlclRyZWVBc1RleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQz
NjcwOEI1MTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1JlbmRlclRyZWVBc1RleHQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QjYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1Jlc291
cmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSZXNvdXJj
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDhCNzEyRDlDQTRCMDAw
NDQyMzQgLyogU1ZHUmVzb3VyY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR1Jlc291cmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDhCODEy
RDlDQTRCMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0MzY3MDhCOTEyRDlDQTRCMDAwNDQyMzQgLyogU1ZHUmVzb3VyY2Vz
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVzb3VyY2VzQ2Fj
aGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QkExMkQ5Q0E0QjAwMDQ0
MjM0IC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QkIxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1Jlc291cmNl
c0N5Y2xlU29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Jlc291
cmNlc0N5Y2xlU29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwOEJD
MTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4QkQxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNW
R1NoYWRvd1RyZWVFbGVtZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdTaGFkb3dUcmVlRWxlbWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQx
NTI5MkMwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyRDBFMUFFOEEwMDBDNEEyRDAgLyogSFRN
TFBsdWdJbkltYWdlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDQyOUFBRkIwQ0I4NEU4ODAwNzY0N0M1IC8qIERPTUhUTUxFbWJlZEVsZW1lbnRQcml2
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01IVE1MRW1iZWRFbGVt
ZW50UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODA2MSw4ICs4MDkx
LDYgQEAKIAkJODQxOUQyQUIxMjBEOTJGQzAwMTQxRjhGIC8qIFNWR1BhdGhCeXRlU3RyZWFtU291
cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhCeXRlU3RyZWFt
U291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MTlEMkI3MTIwRTBDNzYw
MDE0MUY4RiAvKiBTVkdQYXRoU3RyaW5nQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoU3RyaW5nQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg0MTlEMkI4MTIwRTBDNzYwMDE0MUY4RiAvKiBTVkdQYXRoU3RyaW5n
QnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoU3RyaW5n
QnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDFGREMyNDExNzhDOUJF
MDBGOEFDOUIgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk4NDFGREMyNTExNzhDOUJFMDBGOEFDOUIgLyogUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQy
MjQxODExMDdFNzdGNDAwNzY2QTg3IC8qIEpTU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0ZFTW9ycGhvbG9neUVsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDIyNDE4MjEwN0U3N0Y0MDA3
NjZBODcgLyogSlNTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NDIyNDE4OTEwN0U3ODZGMDA3NjZBODcgLyogRE9NU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdGRU1v
cnBob2xvZ3lFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTI5LDgg
KzgxNTcsNiBAQAogCQk4NDg1MjI4NzExOTAxNzNDMDA2RURDN0YgLyogU1ZHVktlcm5FbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1ZLZXJuRWxlbWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0ODUyMjg4MTE5MDE3M0MwMDZF
REM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHVktlcm5FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0ODUy
Mjg5MTE5MDE3M0MwMDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFNWR1ZLZXJuRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTg0OTlBNTEyMTE1RkIzMzAwMEY1NjZFMyAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0OTlBNTEzMTE1RkIz
MzAwMEY1NjZFMyAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NDlGNzc3NTBFRkVDNjIwMDA5MDg0OUQgLyogU3Ryb2tlU3R5bGVB
cHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cm9rZVN0eWxlQXBw
bGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NEE4MUYzQjBGQzdERkYwMDA5
NTUzMDAgLyogU291cmNlQWxwaGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gU291cmNlQWxwaGEuY3BwOyBwYXRoID0gZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0QTgxRjNDMEZDN0RGRjAwMDk1NTMwMCAvKiBT
b3VyY2VBbHBoYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTb3VyY2VBbHBo
YS5oOyBwYXRoID0gZmlsdGVycy9Tb3VyY2VBbHBoYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtODE0MSw4ICs4MTY3LDYgQEAKIAkJODRCMkIyNEYwNTZCRjE1RjAwRDJCNzcxIC8q
IFNTTEtleUdlbmVyYXRvck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNTTEtleUdlbmVyYXRvck1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTg0QjZCOTc1
MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0QjZCOTc2MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQ
YXRoU2VnTGlzdFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQ
YXRoU2VnTGlzdFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NEJEQTE2
OTExMzU4RDJBMDBEQkY2NEMgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0QkRBMTZBMTEzNThEMkEwMERCRjY0
QyAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg0QzVCMkY4MTIxNkRDODEwMDg4QjUzQSAvKiBTVkdQYXRoVHJhdmVyc2FsU3Rh
dGVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1Bh
dGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NEM1QjJGOTEyMTZEQzgxMDA4OEI1M0EgLyogU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoVHJhdmVyc2FsU3Rh
dGVCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0QzY3ODRBMTIxNDgx
NDcwMEE5MjkwMiAvKiBTVkdQYXRoQmxlbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdQYXRoQmxlbmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC04MzkxLDEyICs4NDE1LDYgQEAKIAkJODUzOEYwODQwQUQ3MkNCNjAwNkE4MUQxIC8q
IERPTVJhbmdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01SYW5nZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODUzQkY0RDkwQUJCNkI1NTAwODY0N0JC
IC8qIERPTU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTU5vZGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODUzQkY0REEwQUJCNkI1NTAwODY0N0JC
IC8qIERPTU5vZGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RE9NTm9kZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODUzQ0E5Q0EwQUVFQzVF
OTAwMjM3MkRDIC8qIFJlbmRlclNWR0NvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJODUzQ0E5Q0IwQUVFQzVFOTAwMjM3MkRDIC8qIFJlbmRlclNWR0NvbnRh
aW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHQ29udGFp
bmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg1M0NBOUNDMEFFRUM1RTkwMDIz
NzJEQyAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyU1ZHSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk4NTNDQTlDRDBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0ltYWdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTg1M0NBOUVBMEFFRUM2M0MwMDIzNzJEQyAvKiBSZW5kZXJGb3JlaWdu
T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJG
b3JlaWduT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODUzQ0E5RUIw
QUVFQzYzQzAwMjM3MkRDIC8qIFJlbmRlckZvcmVpZ25PYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckZvcmVpZ25PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODU0MDc0RjkwQUQ2QzIyRTAwNjIwQzU3IC8qIERPTVNWR051bWJlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHTnVtYmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1NDA3NEZBMEFENkMyMkUwMDYyMEM1NyAvKiBET01T
VkdQb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHUG9pbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODU0MDc0RkIwQUQ2QzIyRTAwNjIwQzU3
IC8qIERPTVNWR1JlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNW
R1JlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk0NzEsOCArOTQ4OSw2IEBA
CiAJCUE3MTg3NjBEMEIyQTEyMDEwMEExNkVDRSAvKiBEcmFnQWN0aW9ucy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEcmFnQWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNzE4Nzg4RjBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xsZXJNYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnQ29udHJvbGxl
ck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxQTcwQzkxMUFGQjAyMDAw
OTg5RDZEIC8qIEhUTUxNZXRlckVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhU
TUxNZXRlckVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzM1MkMx
NzBCMUJCODlEMDBBOTg2RDAgLyogUmVuZGVyU1ZHQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTczNTJDMTgwQjFCQjg5RDAwQTk4NkQwIC8qIFJlbmRlclNWR0Jsb2Nr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdCbG9jay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzVFNDk3NDEwNzUyQUNCMDBDOUI4OTYgLyog
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzVFNDk3NTEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NUU4QjgwMEUxREUyRDYwMDdGMjQ4
MSAvKiBGRUJsZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZF
QmxlbmQuY3BwOyBwYXRoID0gZmlsdGVycy9GRUJsZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTk1MTgsMTAgKzk1MzQsNiBAQAogCQlBN0RCRjhEQzEyNzY5MTlDMDA2QjYw
MDggLyogVGV4dENoZWNraW5nSGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRleHRDaGVja2luZ0hlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
N0YzMzhBMTExQzBFRkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFkb3dFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTdGMzM4QTIxMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhZG93RWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBODA5RjE0NTBCNzM3OTNBMDAyRTREN0YgLyog
UmVuZGVyU1ZHR3JhZGllbnRTdG9wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlclNWR0dyYWRpZW50U3RvcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
ODA5RjE0NjBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0dyYWRpZW50U3RvcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4MDlGMUE4MEI3MzdGQjYwMDJFNEQ3
RiAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE4MDlGMUE5MEI3MzdGQjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRkZW5Db250
YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwQTM4
RkQwRTUwQ0M4MjAwQTI1RUJDIC8qIFBhdHRlcm5DRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYXR0ZXJuQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBODBENjcwNzBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgw
RTZDQkEwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVmFsdWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTk3NzAsOCArOTc4Miw2IEBACiAJCUE4OTk0MzI3MEI0MjMzODcwMEQ3
QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCaXRtYXBJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OUND
QzUwMEY0NEU5ODEwMEI1REExMCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXBsYWNlTm9kZVdpdGhTcGFuQ29t
bWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OUNDQzUxMEY0NEU5ODEw
MEI1REExMCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBOEE5MDlBQTBDQkNENkI1MDAyOUI4MDcgLyogUmVuZGVyU1ZH
VHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE4QTkwOUFCMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBOEJDMDQ5MTEyMTRGNjk2MDBCNUYxMjIgLyogSFRNTEVudGl0eVRhYmxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxFbnRpdHlUYWJsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QzIyODBEMTFENEE1OTcwMEQ1QTdEMyAv
KiBEb2N1bWVudFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEb2N1bWVudFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QzIy
ODlGMTFENTcyMkUwMEQ1QTdEMyAvKiBEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDUzLDEwICsxMDA2Myw2IEBACiAJCUE4
RUE4MDA0MEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHlsZVNoZWV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE4RUE4MDA1MEExOTUxNkUwMEE4RUY1RiAvKiBTdHlsZVNoZWV0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVNoZWV0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQThFQTgwMDYwQTE5NTE2RTAwQThFRjVGIC8qIE1lZGlhTGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFMaXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4RjRGQjkzMEMxNjlFN0IwMDJBRkVENSAvKiBTVkdSZW5k
ZXJTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1JlbmRlclN1
cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThGNEZCOTUwQzE2OUU4NTAw
MkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHUmVuZGVyU3VwcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE4RjVDMEI2MEY5Mjg1QUMwMDk4RTA2QiAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdNb2RlbE9iamVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEY1QzBCNzBGOTI4NUFDMDA5OEUwNkIg
LyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQYXR0ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBOUM2RTRFMTBENzQ1RTA1MDA2NDQyRTkgLyogRE9NTWltZVR5cGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTU1pbWVUeXBlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDkyLDggKzEwMDk4LDYgQEAKIAkJQTlE
MjQ4MDUwRDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGVBcnJheS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01NaW1lVHlwZUFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUFBMDk3OEVEMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJ
bWFnZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1ND
dXJzb3JJbWFnZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUEwOTc4
RUUwQUJBQTZFMTAwODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0N1cnNvckltYWdlVmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQUEzMUI1QjIwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRlclNWR1Jv
b3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jv
b3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQTMxQjVCMzBDMURGRDEwMDBB
RTcwODMgLyogUmVuZGVyU1ZHUm9vdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyU1ZHUm9vdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTRDM0E3
NDBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBQTRDM0E3NTBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUVsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUIwMTRERTEwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTA2ODQsMTUgKzEwNjg4LDExIEBACiAJCUIyQ0I5MjVFMEI1QkRBMDIwMDlCQUE3OCAv
KiBET01TVkdFbGVtZW50SW5zdGFuY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gRE9NU1ZHRWxlbWVudEluc3RhbmNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkNCOTI1RjBCNUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3Rh
bmNlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHRWxlbWVu
dEluc3RhbmNlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkNCOTI2MDBC
NUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkNDRUM0NTBDNkNBOUYxMDA2QTU0
MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJDQ0VDNDYwQzZDQTlGMTAwNkE1NDI0IC8qIFJlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFBvaW50M0QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMkUyN0M5RTBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQ
b2ludDNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdFBvaW50M0Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJFNEVDOTQwRDAwQzIyQjAwNDMyNjQz
IC8qIFNWR1pvb21FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU1ZHWm9vbUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJFNEVD
OTUwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU1ZHWm9vbUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyRTRFQzk2MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBTVkdab29tRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCMkVCREM5QTBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVuZGVyVHJlZUFz
VGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyRUJEQzlCMEFGNzdFMzQw
MEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTVkdSZW5kZXJUcmVlQXNUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyRUQ5NzcwMEIxRjU1Q0UwMDI1N0QwRiAvKiBHcmFwaGljc0NvbnRleHRDRy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkYzNEZFNTBFODJGODE0MDBGNjI3
Q0QgLyogRE5TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEROUy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkYzNEZFODBFODJGODI3MDBGNjI3Q0QgLyogRE5T
Q0ZOZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE5TQ0ZOZXQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIzOTIsMjQgKzEyMzkyLDg3IEBA
CiAJCTA4OEMyRjc0MTIzOTAwODAwMDNENjVDRSAvKiBzdmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTQzNjcwODdGMTJEOUNBNEEwMDA0NDIzNCAvKiBS
ZW5kZXJGb3JlaWduT2JqZWN0LmNwcCAqLywKKwkJCQk0MzY3MDg4MDEyRDlDQTRBMDAwNDQyMzQg
LyogUmVuZGVyRm9yZWlnbk9iamVjdC5oICovLAorCQkJCTQzNjcwODgxMTJEOUNBNEEwMDA0NDIz
NCAvKiBSZW5kZXJTVkdCbG9jay5jcHAgKi8sCisJCQkJNDM2NzA4ODIxMkQ5Q0E0QTAwMDQ0MjM0
IC8qIFJlbmRlclNWR0Jsb2NrLmggKi8sCisJCQkJNDM2NzA4ODMxMkQ5Q0E0QTAwMDQ0MjM0IC8q
IFJlbmRlclNWR0NvbnRhaW5lci5jcHAgKi8sCisJCQkJNDM2NzA4ODQxMkQ5Q0E0QTAwMDQ0MjM0
IC8qIFJlbmRlclNWR0NvbnRhaW5lci5oICovLAorCQkJCTQzNjcwODg1MTJEOUNBNEEwMDA0NDIz
NCAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwICovLAorCQkJCTQzNjcwODg2MTJEOUNBNEEw
MDA0NDIzNCAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCAqLywKKwkJCQk0MzY3MDg4NzEyRDlD
QTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCAqLywKKwkJCQk0MzY3
MDg4ODEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi8sCisJ
CQkJNDM2NzA4ODkxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0ltYWdlLmNwcCAqLywKKwkJ
CQk0MzY3MDg4QTEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLywKIAkJCQkw
ODU0QjAwMjEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lLmNwcCAqLywKIAkJCQkw
ODU0QjAwMzEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lLmggKi8sCiAJCQkJMDg1
NEIwMDQxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwICovLAogCQkJ
CTA4NTRCMDA1MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggKi8sCisJ
CQkJNDM2NzA4OEIxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCAq
LywKKwkJCQk0MzY3MDg4QzEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
aCAqLywKIAkJCQlBRERGMUFENDEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5jcHAg
Ki8sCiAJCQkJQURERjFBRDUxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCAqLywK
KwkJCQk0MzY3MDg4RDEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2UuY3BwICov
LAorCQkJCTQzNjcwODhFMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oICov
LAorCQkJCTQzNjcwODhGMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuY3BwICovLAorCQkJCTQzNjcwODkwMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuaCAqLywKKwkJCQk0MzY3MDg5MTEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIuY3BwICovLAorCQkJCTQzNjcwODkyMTJEOUNBNEEwMDA0NDIz
NCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oICovLAorCQkJCTQzNjcwODkzMTJEOUNB
NEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgKi8sCisJCQkJNDM2NzA4
OTQxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggKi8sCisJCQkJ
NDM2NzA4OTUxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlLmNwcCAqLywKKwkJCQk0MzY3MDg5NjEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXJQcmltaXRpdmUuaCAqLywKKwkJCQk0MzY3MDg5NzEyRDlDQTRBMDAwNDQyMzQg
LyogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgKi8sCisJCQkJNDM2NzA4OTgxMkQ5Q0E0
QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCAqLywKKwkJCQk0MzY3MDg5
OTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAg
Ki8sCisJCQkJNDM2NzA4OUExMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlTGlu
ZWFyR3JhZGllbnQuaCAqLywKKwkJCQk0MzY3MDg5QjEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIuY3BwICovLAorCQkJCTQzNjcwODlDMTJEOUNBNEIwMDA0NDIzNCAv
KiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oICovLAorCQkJCTQzNjcwODlEMTJEOUNBNEIwMDA0
NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgKi8sCisJCQkJNDM2NzA4OUUxMkQ5
Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmggKi8sCisJCQkJNDM2NzA4
OUYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgKi8sCisJ
CQkJNDM2NzA4QTAxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5o
ICovLAorCQkJCTQzNjcwOEExMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVJh
ZGlhbEdyYWRpZW50LmNwcCAqLywKKwkJCQk0MzY3MDhBMjEyRDlDQTRCMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oICovLAorCQkJCTQzNjcwOEEzMTJEOUNBNEIw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwICovLAorCQkJCTQzNjcw
OEE0MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCAqLywK
KwkJCQk0MzY3MDhBNTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5jcHAgKi8sCisJ
CQkJNDM2NzA4QTYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuaCAqLywKKwkJCQk0
MzY3MDhBNzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWlu
ZXIuY3BwICovLAorCQkJCTQzNjcwOEE4MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdTaGFk
b3dUcmVlUm9vdENvbnRhaW5lci5oICovLAogCQkJCTA4NTRCMDA2MTI1NUU0RTYwMEI5Q0REMCAv
KiBSZW5kZXJTVkdUZXh0LmNwcCAqLywKIAkJCQkwODU0QjAwNzEyNTVFNEU2MDBCOUNERDAgLyog
UmVuZGVyU1ZHVGV4dC5oICovLAogCQkJCTA4NTRCMDA4MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5k
ZXJTVkdUZXh0UGF0aC5jcHAgKi8sCiAJCQkJMDg1NEIwMDkxMjU1RTRFNjAwQjlDREQwIC8qIFJl
bmRlclNWR1RleHRQYXRoLmggKi8sCisJCQkJNDM2NzA4QTkxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJl
bmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwICovLAorCQkJCTQzNjcwOEFBMTJEOUNB
NEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmggKi8sCiAJCQkJ
MDg1NEIwMEExMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RTcGFuLmNwcCAqLywKIAkJCQkw
ODU0QjAwQjEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLywKKwkJCQk0MzY3
MDhBQjEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwICov
LAorCQkJCTQzNjcwOEFDMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRh
aW5lci5oICovLAorCQkJCTQzNjcwOEFEMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdJbWFnZUJ1ZmZl
clRvb2xzLmNwcCAqLywKKwkJCQk0MzY3MDhBRTEyRDlDQTRCMDAwNDQyMzQgLyogU1ZHSW1hZ2VC
dWZmZXJUb29scy5oICovLAogCQkJCTA4NTRCMDBDMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxp
bmVGbG93Qm94LmNwcCAqLywKIAkJCQkwODU0QjAwRDEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5s
aW5lRmxvd0JveC5oICovLAogCQkJCTA4NTRCMDBFMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxp
bmVUZXh0Qm94LmNwcCAqLywKIAkJCQkwODU0QjAwRjEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5s
aW5lVGV4dEJveC5oICovLAorCQkJCTQzNjcwOEFGMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdNYXJr
ZXJEYXRhLmggKi8sCisJCQkJNDM2NzA4QjAxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR01hcmtlckxh
eW91dEluZm8uY3BwICovLAorCQkJCTQzNjcwOEIxMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdNYXJr
ZXJMYXlvdXRJbmZvLmggKi8sCisJCQkJNDM2NzA4QjIxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1Jl
bmRlclN1cHBvcnQuY3BwICovLAorCQkJCTQzNjcwOEIzMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdS
ZW5kZXJTdXBwb3J0LmggKi8sCisJCQkJNDM2NzA4QjQxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1Jl
bmRlclRyZWVBc1RleHQuY3BwICovLAorCQkJCTQzNjcwOEI1MTJEOUNBNEIwMDA0NDIzNCAvKiBT
VkdSZW5kZXJUcmVlQXNUZXh0LmggKi8sCisJCQkJNDM2NzA4QjYxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFNWR1Jlc291cmNlcy5jcHAgKi8sCisJCQkJNDM2NzA4QjcxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNW
R1Jlc291cmNlcy5oICovLAorCQkJCTQzNjcwOEI4MTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdSZXNv
dXJjZXNDYWNoZS5jcHAgKi8sCisJCQkJNDM2NzA4QjkxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1Jl
c291cmNlc0NhY2hlLmggKi8sCisJCQkJNDM2NzA4QkExMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1Jl
c291cmNlc0N5Y2xlU29sdmVyLmNwcCAqLywKKwkJCQk0MzY3MDhCQjEyRDlDQTRCMDAwNDQyMzQg
LyogU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCAqLywKIAkJCQkwODU0QjAxMDEyNTVFNEU2MDBC
OUNERDAgLyogU1ZHUm9vdElubGluZUJveC5jcHAgKi8sCiAJCQkJMDg1NEIwMTExMjU1RTRFNjAw
QjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLywKKwkJCQk0MzY3MDhCQzEyRDlDQTRCMDAw
NDQyMzQgLyogU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCAqLywKKwkJCQk0MzY3MDhCRDEyRDlD
QTRCMDAwNDQyMzQgLyogU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmggKi8sCiAJCQkJMDhGMEJGQkQx
MjU1QzUzQzAwMDc1MTg1IC8qIFNWR1RleHRDaHVuay5jcHAgKi8sCiAJCQkJMDhGMEJGQkUxMjU1
QzUzQzAwMDc1MTg1IC8qIFNWR1RleHRDaHVuay5oICovLAogCQkJCTA4MTY2OEQxMTI1NjAzQkYw
MDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmNwcCAqLywKQEAgLTE4NTQ2LDggKzE4NjA5
LDYgQEAKIAkJCQkwNjZDNzcyRjBBQjYwM0ZEMDAyMzhDQzQgLyogUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2wuaCAqLywKIAkJCQlCQ0VBNDgyRTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyRmxleGli
bGVCb3guY3BwICovLAogCQkJCUJDRUE0ODJGMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJGbGV4
aWJsZUJveC5oICovLAotCQkJCTg1M0NBOUVBMEFFRUM2M0MwMDIzNzJEQyAvKiBSZW5kZXJGb3Jl
aWduT2JqZWN0LmNwcCAqLywKLQkJCQk4NTNDQTlFQjBBRUVDNjNDMDAyMzcyREMgLyogUmVuZGVy
Rm9yZWlnbk9iamVjdC5oICovLAogCQkJCUE4NzFERUNDMEExNTMwQzcwMEIxMkE2OCAvKiBSZW5k
ZXJGcmFtZS5jcHAgKi8sCiAJCQkJQTg3MURFQ0IwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlckZy
YW1lLmggKi8sCiAJCQkJMEZEMzA4MEMxMTdDRjdFNzAwQTc5MUY3IC8qIFJlbmRlckZyYW1lQmFz
ZS5jcHAgKi8sCkBAIC0xODYyNiw1MCArMTg2ODcsNiBAQAogCQkJCUFCMjQ3QTZCMEFGRDYzODMw
MDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuaCAqLywKIAkJCQlEMzAyNzU0QjEyQTVGRUFCMDA0QkQ4
MjggLyogUmVuZGVyU3VtbWFyeS5jcHAgKi8sCiAJCQkJRDMwMjc1NEMxMkE1RkVBQjAwNEJEODI4
IC8qIFJlbmRlclN1bW1hcnkuaCAqLywKLQkJCQlBNzM1MkMxNzBCMUJCODlEMDBBOTg2RDAgLyog
UmVuZGVyU1ZHQmxvY2suY3BwICovLAotCQkJCUE3MzUyQzE4MEIxQkI4OUQwMEE5ODZEMCAvKiBS
ZW5kZXJTVkdCbG9jay5oICovLAotCQkJCTg1M0NBOUNBMEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5k
ZXJTVkdDb250YWluZXIuY3BwICovLAotCQkJCTg1M0NBOUNCMEFFRUM1RTkwMDIzNzJEQyAvKiBS
ZW5kZXJTVkdDb250YWluZXIuaCAqLywKLQkJCQlBODA5RjE0NjBCNzM3OTNBMDAyRTREN0YgLyog
UmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCAqLywKLQkJCQlBODA5RjE0NTBCNzM3OTNBMDAyRTRE
N0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmggKi8sCi0JCQkJQTgwOUYxQTkwQjczN0ZCNjAw
MkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgKi8sCi0JCQkJQTgwOUYxQTgw
QjczN0ZCNjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovLAotCQkJCTg1
M0NBOUNDMEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgKi8sCi0JCQkJODUz
Q0E5Q0QwQUVFQzVFOTAwMjM3MkRDIC8qIFJlbmRlclNWR0ltYWdlLmggKi8sCi0JCQkJQThGNUMw
QjcwRjkyODVBQzAwOThFMDZCIC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCAqLywKLQkJCQlB
OEY1QzBCNjBGOTI4NUFDMDA5OEUwNkIgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLywKLQkJ
CQkwODU2M0JDRjExNzg2NUY1MDAxMkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2UuY3BwICovLAot
CQkJCTA4MzE5MkE3MTEyQjQzMDUwMDgzQzNCOSAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oICovLAot
CQkJCTg0QkRBMTY5MTEzNThEMkEwMERCRjY0QyAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIu
Y3BwICovLAotCQkJCTg0QkRBMTZBMTEzNThEMkEwMERCRjY0QyAvKiBSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuaCAqLywKLQkJCQkwODZBNDAwNTExRjZENkI3MDAyQ0VDNTMgLyogUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIuY3BwICovLAotCQkJCTA4MDgyMzcyMTE3OTg3QzEwMDI0MURFOCAv
KiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oICovLAotCQkJCTg0MUZEQzI0MTE3OEM5QkUw
MEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgKi8sCi0JCQkJODQxRkRDMjUx
MTc4QzlCRTAwRjhBQzlCIC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggKi8sCi0JCQkJMTk0
MjNCNEUxMjM0RTg2QjAwRDFFRTlFIC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZl
LmNwcCAqLywKLQkJCQkxOTQyM0I0RjEyMzRFODZCMDBEMUVFOUUgLyogUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuaCAqLywKLQkJCQkwOEMzNEFGMTExNzlDMDU2MDAyRDc0NTYgLyog
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgKi8sCi0JCQkJMDhDMzRBRjIxMTc5QzA1NzAw
MkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCAqLywKLQkJCQkwOEMzNEFGMzEx
NzlDMDU3MDAyRDc0NTYgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAgKi8s
Ci0JCQkJMDhDMzRBRjQxMTc5QzA1NzAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFy
R3JhZGllbnQuaCAqLywKLQkJCQk4NDk5QTUxMjExNUZCMzMwMDBGNTY2RTMgLyogUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIuY3BwICovLAotCQkJCTg0OTlBNTEzMTE1RkIzMzAwMEY1NjZFMyAvKiBS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oICovLAotCQkJCTA4MzE5MkE4MTEyQjQzMDUwMDgzQzNC
OSAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgKi8sCi0JCQkJMDgzMTkyQTkxMTJCNDMw
NTAwODNDM0I5IC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmggKi8sCi0JCQkJMDg1NjNCQjIx
MTc4NjE3NzAwMTJCNTc4IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgKi8sCi0JCQkJ
MDg1NjNCQjMxMTc4NjE3NzAwMTJCNTc4IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oICov
LAotCQkJCTA4QzM0QUZCMTE3OUMwNzIwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlh
bEdyYWRpZW50LmNwcCAqLywKLQkJCQkwOEMzNEFGQzExNzlDMDcyMDAyRDc0NTYgLyogUmVuZGVy
U1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oICovLAotCQkJCTA4QzZBN0E5MTE3REZCQUIwMEZF
QTFBMiAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwICovLAotCQkJCTA4QzZBN0FB
MTE3REZCQUIwMEZFQTFBMiAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCAqLywKLQkJ
CQlBQTMxQjVCMjBDMURGRDEwMDBBRTcwODMgLyogUmVuZGVyU1ZHUm9vdC5jcHAgKi8sCi0JCQkJ
QUEzMUI1QjMwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRlclNWR1Jvb3QuaCAqLywKLQkJCQkwOERB
QjlCODExMDNEOUE1MDAzRTdBQkEgLyogUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIu
Y3BwICovLAotCQkJCTA4REFCOUI5MTEwM0Q5QTUwMDNFN0FCQSAvKiBSZW5kZXJTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lci5oICovLAotCQkJCUE4QTkwOUFCMENCQ0Q2QjUwMDI5QjgwNyAvKiBS
ZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCAqLywKLQkJCQlBOEE5MDlBQTBDQkNE
NkI1MDAyOUI4MDcgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oICovLAotCQkJ
CUIyQ0NFQzQ1MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5j
cHAgKi8sCi0JCQkJQjJDQ0VDNDYwQzZDQTlGMTAwNkE1NDI0IC8qIFJlbmRlclNWR1ZpZXdwb3J0
Q29udGFpbmVyLmggKi8sCiAJCQkJQThERjRBRTIwOTgwQzQyQzAwNTI5ODFCIC8qIFJlbmRlclRh
YmxlLmNwcCAqLywKIAkJCQlBOERGNEFFMTA5ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFibGUu
aCAqLywKIAkJCQlBOERGNEFFMDA5ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFibGVDZWxsLmNw
cCAqLywKQEAgLTE4NzEwLDIzICsxODcyNyw2IEBACiAJCQkJNUQ5MjVCNjYwRjY0RDRERDAwQjg0
N0YwIC8qIFNjcm9sbEJlaGF2aW9yLmggKi8sCiAJCQkJQTdGMzM4QTExMUMwRUZDQTAwQTMyMEE3
IC8qIFNoYWRvd0VsZW1lbnQuY3BwICovLAogCQkJCUE3RjMzOEEyMTFDMEVGQ0EwMEEzMjBBNyAv
KiBTaGFkb3dFbGVtZW50LmggKi8sCi0JCQkJMDhDNDZCNjcxMjEyRjE1RDAwMTFBRjQwIC8qIFNW
R0ltYWdlQnVmZmVyVG9vbHMuY3BwICovLAotCQkJCTA4QzQ2QjY4MTIxMkYxNUQwMDExQUY0MCAv
KiBTVkdJbWFnZUJ1ZmZlclRvb2xzLmggKi8sCi0JCQkJMDgzODVGRjUxMEYwMTg2MDAwQkZFMDdC
IC8qIFNWR01hcmtlckRhdGEuaCAqLywKLQkJCQkwODczNUZCNjEwRTkxMjMyMDA2RDZGQUQgLyog
U1ZHTWFya2VyTGF5b3V0SW5mby5jcHAgKi8sCi0JCQkJMDg3MzVGQjcxMEU5MTIzMjAwNkQ2RkFE
IC8qIFNWR01hcmtlckxheW91dEluZm8uaCAqLywKLQkJCQlBOEY0RkI5NTBDMTY5RTg1MDAyQUZF
RDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgKi8sCi0JCQkJQThGNEZCOTMwQzE2OUU3QjAwMkFG
RUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuaCAqLywKLQkJCQlCMkVCREM5QTBBRjc3RTM0MDBBRTRB
NjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgKi8sCi0JCQkJQjJFQkRDOUIwQUY3N0UzNDAw
QUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuaCAqLywKLQkJCQkwODREMEUzODExRjU4MTYx
MDAwODFFMUEgLyogU1ZHUmVzb3VyY2VzLmNwcCAqLywKLQkJCQkwODREMEUzOTExRjU4MTYxMDAw
ODFFMUEgLyogU1ZHUmVzb3VyY2VzLmggKi8sCi0JCQkJMDg0RDBFM0ExMUY1ODE2MTAwMDgxRTFB
IC8qIFNWR1Jlc291cmNlc0NhY2hlLmNwcCAqLywKLQkJCQkwODREMEUzQjExRjU4MTYxMDAwODFF
MUEgLyogU1ZHUmVzb3VyY2VzQ2FjaGUuaCAqLywKLQkJCQkwODVCMDVDMDExRkFFMTZDMDA0RDY1
RjYgLyogU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwICovLAotCQkJCTA4NUIwNUMxMTFGQUUx
NkMwMDRENjVGNiAvKiBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oICovLAotCQkJCTA4REFCOUMw
MTEwM0Q5QzEwMDNFN0FCQSAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwICovLAotCQkJCTA4
REFCOUMxMTEwM0Q5QzEwMDNFN0FCQSAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuaCAqLywKIAkJ
CQlBOENGRjA0QzBBMTU0RjA5MDAwQTQyMzQgLyogVGFibGVMYXlvdXQuaCAqLywKIAkJCQlBQjAx
NERFMTBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCAqLywK
IAkJCQlBQjAxNERFMjBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRz
LmggKi8sCkBAIC0yMTU0MSw3ICsyMTU0MSw3IEBACiAJCQkJQThFQTczQzQwQTE5MDBFMzAwQThF
RjVGIC8qIFJlbmRlckZpZWxkc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNjZDNzczMTBBQjYw
M0ZEMDAyMzhDQzQgLyogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRUE0ODZFMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJGbGV4aWJsZUJveC5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJODUzQ0E5RUQwQUVFQzYzQzAwMjM3MkRDIC8qIFJlbmRlckZvcmVpZ25P
YmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzNjcwOEJGMTJEOUNBNEIwMDA0NDIzNCAvKiBS
ZW5kZXJGb3JlaWduT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcxREVEMzBBMTUzMEM3
MDBCMTJBNjggLyogUmVuZGVyRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDMwODBGMTE3
Q0Y3RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
NzFERUQxMEExNTMwQzcwMEIxMkE2OCAvKiBSZW5kZXJGcmFtZVNldC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yMTU5NCwzNCArMjE1OTQsMzQgQEAKIAkJCQlCQzhDOEZBRTBERENEMzFCMDBCNTkyRjQg
LyogUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjY4MEU4MUNCNzEwMEIy
NTk2NSAvKiBSZW5kZXJTdHlsZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDMwMjc1
NEUxMkE1RkVBQjAwNEJEODI4IC8qIFJlbmRlclN1bW1hcnkuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUE3MzUyQzFBMEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdCbG9jay5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJODUzQ0E5RDcwQUVFQzVFOTAwMjM3MkRDIC8qIFJlbmRlclNWR0NvbnRhaW5lci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQTgwOUYxNDcwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNW
R0dyYWRpZW50U3RvcC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTgwOUYxQUEwQjczN0ZCNjAwMkU0
RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODUz
Q0E5RDkwQUVFQzVFOTAwMjM3MkRDIC8qIFJlbmRlclNWR0ltYWdlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk0MzY3MDhDMTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHQmxvY2suaCBpbiBIZWFk
ZXJzICovLAorCQkJCTQzNjcwOEMzMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdDb250YWlu
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzNjcwOEM1MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5k
ZXJTVkdHcmFkaWVudFN0b3AuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzNjcwOEM3MTJEOUNBNEIw
MDA0NDIzNCAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTQzNjcwOEM5MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDg1NEIwMTUxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDg1NEIwMTcxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lu
bGluZVRleHQuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4RjVDMEI4MEY5Mjg1QUMwMDk4RTA2QiAv
KiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4Q0IxMkQ5
Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRERGMUFENzEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMDgzMTkyQUExMTJCNDMwNTAwODNDM0I5IC8qIFJlbmRlclNWR1Jlc291cmNlLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk4NEJEQTE2QzExMzU4RDJBMDBEQkY2NEMgLyogUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwODA4MjM3MzExNzk4N0MxMDAy
NDFERTggLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTg0MUZEQzI3MTE3OEM5QkUwMEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMTk0MjNCNTExMjM0RTg2QjAwRDFFRTlFIC8qIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyUHJpbWl0aXZlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwOEMzNEFGNjExNzlD
MDU3MDAyRDc0NTYgLyogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMDhDMzRBRjgxMTc5QzA1NzAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFy
R3JhZGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTg0OTlBNTE1MTE1RkIzMzAwMEY1NjZFMyAv
KiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDgzMTkyQUMx
MTJCNDMwNTAwODNDM0I5IC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmggaW4gSGVhZGVycyAq
LywKLQkJCQkwODU2M0JCNTExNzg2MTc4MDAxMkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmggaW4gSGVhZGVycyAqLywKLQkJCQkwOEMzNEFGRTExNzlDMDcyMDAyRDc0NTYgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDhDNkE3
QUMxMTdERkJBQjAwRkVBMUEyIC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQUEzMUI1QjUwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRlclNWR1Jvb3Qu
aCBpbiBIZWFkZXJzICovLAotCQkJCTA4REFCOUJCMTEwM0Q5QTUwMDNFN0FCQSAvKiBSZW5kZXJT
VkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4Q0Qx
MkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk0MzY3MDhDRjEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk0MzY3MDhEMTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzNjcwOEQzMTJEOUNBNEIw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NDM2NzA4RDUxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzY3MDhENzEyRDlDQTRCMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4RDkxMkQ5
Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTQzNjcwOERCMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4REQxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlTWFza2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzY3MDhERjEy
RDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggaW4gSGVhZGVycyAq
LywKKwkJCQk0MzY3MDhFMTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRp
YWxHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4RTMxMkQ5Q0E0QjAwMDQ0MjM0
IC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2
NzA4RTUxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuaCBpbiBIZWFkZXJzICovLAor
CQkJCTQzNjcwOEU3MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENv
bnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1NEIwMTkxMjU1RTRFNjAwQjlDREQwIC8q
IFJlbmRlclNWR1RleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NTRCMDFCMTI1NUU0RTYwMEI5
Q0REMCAvKiBSZW5kZXJTVkdUZXh0UGF0aC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQThBOTA5QUMw
Q0JDRDZCNTAwMjlCODA3IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTQzNjcwOEU5MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdUcmFu
c2Zvcm1hYmxlQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODU0QjAxRDEyNTVFNEU2
MDBCOUNERDAgLyogUmVuZGVyU1ZHVFNwYW4uaCBpbiBIZWFkZXJzICovLAotCQkJCUIyQ0NFQzQ4
MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNDM2NzA4RUIxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1ZpZXdwb3J0
Q29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOERGNEFFQjA5ODBDNDJDMDA1Mjk4MUIg
LyogUmVuZGVyVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4REY0QUU5MDk4MEM0MkMwMDUy
OTgxQiAvKiBSZW5kZXJUYWJsZUNlbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4REY0QUYxMDk4
MEM0MkMwMDUyOTgxQiAvKiBSZW5kZXJUYWJsZUNvbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTkz
MSw3ICsyMTkzMSw3IEBACiAJCQkJQjIyMjdBMkEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0dyYWRp
ZW50RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUwRkJGMkIwRDlBRjA0NzAwOEZDMjky
IC8qIFNWR0hLZXJuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI1NTk5QTQwRDAwRDhC
QTAwQkI4MjVDIC8qIFNWR0ltYWdlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwOEM0NkI2QTEyMTJG
MTVFMDAxMUFGNDAgLyogU1ZHSW1hZ2VCdWZmZXJUb29scy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NDM2NzA4RUQxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3QTJEMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdJbWFnZUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyOEM2QTJBMEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdJbWFn
ZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1NEIwMUYxMjU1RTRFNjAwQjlDREQwIC8q
IFNWR0lubGluZUZsb3dCb3guaCBpbiBIZWFkZXJzICovLApAQCAtMjE5NDQsOSArMjE5NDQsOSBA
QAogCQkJCTA4MTA3NjQ0MTI4Mjg1NTYwMDdDNjNCQSAvKiBTVkdMaXN0UHJvcGVydHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA4OEEwRTA5MTI2RUYxREIwMDk3OEY3QSAvKiBTVkdMaXN0UHJvcGVy
dHlUZWFyT2ZmLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E0MTBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHTG9jYXRhYmxlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwODM4NUZGNjEwRjAxODYwMDBC
RkUwN0IgLyogU1ZHTWFya2VyRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4RUUxMkQ5
Q0E0QjAwMDQ0MjM0IC8qIFNWR01hcmtlckRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
QTQ0MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNYXJrZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
LQkJCQkwODczNUZCOTEwRTkxMjMyMDA2RDZGQUQgLyogU1ZHTWFya2VyTGF5b3V0SW5mby5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4RjAxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR01hcmtlckxh
eW91dEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTQ3MEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdNYXNrRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgwNkU1N0ExMjg5MzA0NTAw
N0NFRDMyIC8qIFNWR01hdHJpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBNEIwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR01ldGFkYXRhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTk5
OSwxNSArMjE5OTksMTUgQEAKIAkJCQlCMjIyN0FBMDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUmVu
ZGVyaW5nSW50ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzIyNzQ3OTBFODM2NkUyMDBFN0Y5
NzUgLyogU1ZHUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjI3NDdCMEU4MzY2
RTIwMEU3Rjk3NSAvKiBTVkdSZW5kZXJTdHlsZURlZnMuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4
RjRGQjk0MEMxNjlFN0IwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmggaW4gSGVhZGVycyAq
LywKLQkJCQlCMkVCREM5RDBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMDg0RDBFM0QxMUY1ODE2MTAwMDgxRTFBIC8qIFNWR1Jlc291
cmNlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDg0RDBFM0YxMUY1ODE2MTAwMDgxRTFBIC8qIFNW
R1Jlc291cmNlc0NhY2hlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwODVCMDVDMzExRkFFMTZDMDA0
RDY1RjYgLyogU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQz
NjcwOEYyMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdSZW5kZXJTdXBwb3J0LmggaW4gSGVhZGVycyAq
LywKKwkJCQk0MzY3MDhGNDEyRDlDQTRCMDAwNDQyMzQgLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4RjYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1Jlc291
cmNlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzA4RjgxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNW
R1Jlc291cmNlc0NhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzY3MDhGQTEyRDlDQTRCMDAw
NDQyMzQgLyogU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4
NTRCMDIzMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdSb290SW5saW5lQm94LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMjIyN0FBMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU2NyaXB0RWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBQTYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1NldEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTA4REFCOUMzMTEwM0Q5QzEwMDNFN0FCQSAvKiBTVkdT
aGFkb3dUcmVlRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzNjcwOEZDMTJEOUNBNEIw
MDA0NDIzNCAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
QUZEMDEwMERBRjMzNTUwMEY1RjU1QyAvKiBTVkdTTUlMRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDg4MEY3MEUxMjgyQjQ2RDAwOTQ4NTA1IC8qIFNWR1N0YXRpY0xpc3RQcm9wZXJ0eVRl
YXJPZmYuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MTNBNEVBMTI4NDEzMjYwMDk5MjUxMSAvKiBT
VkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovLApAQCAtMjQzMzAsNyArMjQz
MzAsNyBAQAogCQkJCUE4RUE3M0MzMEExOTAwRTMwMEE4RUY1RiAvKiBSZW5kZXJGaWVsZHNldC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjZDNzczMDBBQjYwM0ZEMDAyMzhDQzQgLyogUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ4NkQwOTdEOTMw
MjAwOTRDOUU0IC8qIFJlbmRlckZsZXhpYmxlQm94LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg1
M0NBOUVDMEFFRUM2M0MwMDIzNzJEQyAvKiBSZW5kZXJGb3JlaWduT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTQzNjcwOEJFMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJGb3JlaWduT2Jq
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFERUQ0MEExNTMwQzcwMEIxMkE2OCAvKiBS
ZW5kZXJGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzMDgwRTExN0NGN0U3MDBBNzkx
RjcgLyogUmVuZGVyRnJhbWVCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFERUQyMEEx
NTMwQzcwMEIxMkE2OCAvKiBSZW5kZXJGcmFtZVNldC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI0
MzgwLDM0ICsyNDM4MCwzNCBAQAogCQkJCUFCMjQ3QTZDMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5k
ZXJTbGlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4QzhGQUQwRERDRDMxQjAwQjU5MkY0
IC8qIFJlbmRlclN0eWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQzMDI3NTREMTJBNUZFQUIw
MDRCRDgyOCAvKiBSZW5kZXJTdW1tYXJ5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE3MzUyQzE5
MEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdCbG9jay5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk4NTNDQTlENjBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUE4MDlGMTQ4MEI3Mzc5M0IwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFk
aWVudFN0b3AuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTgwOUYxQUIwQjczN0ZCNjAwMkU0RDdG
IC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk4NTND
QTlEODBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNDM2NzA4QzAxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0Jsb2NrLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTQzNjcwOEMyMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdDb250
YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM2NzA4QzQxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MzY3MDhDNjEy
RDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTQzNjcwOEM4MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwODU0QjAxNDEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZH
SW5saW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4NTRCMDE2MTI1NUU0RTYwMEI5Q0REMCAv
KiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE4RjVDMEI5MEY5
Mjg1QUMwMDk4RTA2QiAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk0MzY3MDhDQTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQURERjFBRDYxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNW
R1BhdGguY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDg1NjNCRDAxMTc4NjVGNTAwMTJCNTc4IC8q
IFJlbmRlclNWR1Jlc291cmNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg0QkRBMTZCMTEzNThE
MkEwMERCRjY0QyAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJMDg2QTQwMDYxMUY2RDZCNzAwMkNFQzUzIC8qIFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg0MUZEQzI2MTE3OEM5QkUwMEY4QUM5QiAvKiBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxOTQyM0I1MDEy
MzRFODZCMDBEMUVFOUUgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMDhDMzRBRjUxMTc5QzA1NzAwMkQ3NDU2IC8qIFJlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDhDMzRBRjcxMTc5QzA1NzAw
MkQ3NDU2IC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJODQ5OUE1MTQxMTVGQjMzMDAwRjU2NkUzIC8qIFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTA4MzE5MkFCMTEyQjQzMDUwMDgzQzNCOSAvKiBS
ZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwODU2M0JCNDEx
Nzg2MTc4MDAxMkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTA4QzM0QUZEMTE3OUMwNzIwMDJENzQ1NiAvKiBSZW5kZXJTVkdSZXNvdXJjZVJh
ZGlhbEdyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTA4QzZBN0FCMTE3REZCQUIwMEZF
QTFBMiAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJQUEzMUI1QjQwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRlclNWR1Jvb3QuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMDhEQUI5QkExMTAzRDlBNTAwM0U3QUJBIC8qIFJlbmRlclNWR1NoYWRvd1Ry
ZWVSb290Q29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzNjcwOENDMTJEOUNBNEIw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MzY3
MDhDRTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTQzNjcwOEQwMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MzY3MDhEMjEyRDlDQTRCMDAw
NDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NDM2NzA4RDQxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzNjcwOEQ2MTJEOUNBNEIwMDA0NDIzNCAvKiBS
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzNjcwOEQ4
MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTQzNjcwOERBMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MzY3MDhEQzEyRDlDQTRCMDAw
NDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NDM2NzA4REUxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk0MzY3MDhFMDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZH
UmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MzY3MDhFMjEy
RDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTQzNjcwOEU0MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTQzNjcwOEU2MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJT
VkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODU0QjAx
ODEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwODU0QjAxQTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dFBhdGguY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJQThBOTA5QUQwQ0JDRDZCNTAwMjlCODA3IC8qIFJlbmRlclNWR1RyYW5z
Zm9ybWFibGVDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM2NzA4RTgxMkQ5Q0E0
QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMDg1NEIwMUMxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RTcGFuLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUIyQ0NFQzQ3MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MzY3MDhFQTEyRDlD
QTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQThERjRBRUMwOTgwQzQyQzAwNTI5ODFCIC8qIFJlbmRlclRhYmxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4REY0QUVBMDk4MEM0MkMwMDUyOTgxQiAvKiBSZW5kZXJUYWJsZUNl
bGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThERjRBRTgwOTgwQzQyQzAwNTI5ODFCIC8qIFJl
bmRlclRhYmxlQ29sLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjQ2ODEsNyArMjQ2ODEsNyBAQAog
CQkJCUIyMjI3QTI5MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdHcmFkaWVudEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNjUwRkJGMkEwRDlBRjA0NzAwOEZDMjkyIC8qIFNWR0hLZXJuRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjU1OTlBMzBEMDBEOEJBMDBCQjgyNUMgLyog
U1ZHSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDhDNDZCNjkxMjEyRjE1RTAwMTFBRjQw
IC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM2NzA4RUMx
MkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR0ltYWdlQnVmZmVyVG9vbHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjIyMjdBMkMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ltYWdlRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMjhDNkEyOTBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHSW1hZ2VMb2Fk
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDg1NEIwMUUxMjU1RTRFNjAwQjlDREQwIC8qIFNW
R0lubGluZUZsb3dCb3guY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNDY5Myw3ICsyNDY5Myw3IEBA
CiAJCQkJQjIyMjdBM0IwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0xpbmVFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyMjI3QTQwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdMb2NhdGFibGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR01h
cmtlckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDg3MzVGQjgxMEU5MTIzMjAwNkQ2
RkFEIC8qIFNWR01hcmtlckxheW91dEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM2NzA4
RUYxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR01hcmtlckxheW91dEluZm8uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjIyMjdBNDYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR01hc2tFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyMjI3QTRBMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNZXRhZGF0
YUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBMUYyQjAwQ0VGMEFCRjAwNDQyRjZB
IC8qIFNWR01pc3NpbmdHbHlwaEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNDcyNiwx
NSArMjQ3MjYsMTUgQEAKIAkJCQlCMjIyN0E5RDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUmVjdEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMjc0NzgwRTgzNjZFMjAwRTdGOTc1IC8q
IFNWR1JlbmRlclN0eWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMjI3NDdBMEU4MzY2RTIw
MEU3Rjk3NSAvKiBTVkdSZW5kZXJTdHlsZURlZnMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQThG
NEZCOTYwQzE2OUU4NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQjJFQkRDOUMwQUY3N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDg0RDBFM0MxMUY1ODE2MTAwMDgxRTFBIC8qIFNWR1Jl
c291cmNlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwODREMEUzRTExRjU4MTYxMDAwODFFMUEg
LyogU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDg1QjA1QzIxMUZB
RTE2QzAwNEQ2NUY2IC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTQzNjcwOEYxMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdSZW5kZXJTdXBwb3J0LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTQzNjcwOEYzMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzNjcwOEY1MTJEOUNBNEIwMDA0NDIz
NCAvKiBTVkdSZXNvdXJjZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM2NzA4RjcxMkQ5Q0E0
QjAwMDQ0MjM0IC8qIFNWR1Jlc291cmNlc0NhY2hlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQz
NjcwOEY5MTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwODU0QjAyMjEyNTVFNEU2MDBCOUNERDAgLyogU1ZHUm9vdElubGlu
ZUJveC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FBMjBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHU2NyaXB0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FBNTBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHU2V0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwOERBQjlD
MjExMDNEOUMxMDAzRTdBQkEgLyogU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTQzNjcwOEZCMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdTaGFkb3dUcmVlRWxlbWVu
dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRBRkQwMEYwREFGMzM1NTAwRjVGNTVDIC8qIFNW
R1NNSUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QUE4MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdTdG9wRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FBQjBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHU3RyaW5nTGlzdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJ
KHJldmlzaW9uIDc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVp
Z25PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQotI2luY2x1ZGUgIlJl
bmRlckZvcmVpZ25PYmplY3QuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2lu
Y2x1ZGUgIlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3Vw
cG9ydC5oIgotI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1T
dGF0ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlckZvcmVpZ25PYmplY3Q6OlJl
bmRlckZvcmVpZ25PYmplY3QoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQqIG5vZGUpIAotICAgIDog
UmVuZGVyU1ZHQmxvY2sobm9kZSkKLSAgICAsIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkK
LXsKLX0KLQotUmVuZGVyRm9yZWlnbk9iamVjdDo6flJlbmRlckZvcmVpZ25PYmplY3QoKQotewot
fQotCi12b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBpbnQsIGludCkKLXsKLSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBh
aW50SW5mbyk7Ci0gICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwotICAgIGNoaWxk
UGFpbnRJbmZvLmFwcGx5VHJhbnNmb3JtKGxvY2FsVHJhbnNmb3JtKCkpOwotCi0gICAgaWYgKFNW
R1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4odGhpcykpCi0gICAgICAgIGNoaWxkUGFp
bnRJbmZvLmNvbnRleHQtPmNsaXAobV92aWV3cG9ydCk7Ci0KLSAgICBmbG9hdCBvcGFjaXR5ID0g
c3R5bGUoKS0+b3BhY2l0eSgpOwotICAgIGlmIChvcGFjaXR5IDwgMS4wZikKLSAgICAgICAgY2hp
bGRQYWludEluZm8uY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLQot
ICAgIFJlbmRlckJsb2NrOjpwYWludChjaGlsZFBhaW50SW5mbywgMCwgMCk7Ci0KLSAgICBpZiAo
b3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmVuZFRyYW5z
cGFyZW5jeUxheWVyKCk7Ci0KLSAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7
Ci19Ci0KLUludFJlY3QgUmVuZGVyRm9yZWlnbk9iamVjdDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpCi17Ci0gICAg
cmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHRo
aXMsIHJlcGFpbnRDb250YWluZXIpOwotfQotCi12b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OmNv
bXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCi17Ci0gICAgU1ZHUmVuZGVyU3Vw
cG9ydDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIsIHJlcGFp
bnRSZWN0LCBmaXhlZCk7Ci19Ci0KLWNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVyRm9yZWln
bk9iamVjdDo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgbV9sb2NhbFRv
UGFyZW50VHJhbnNmb3JtID0gbG9jYWxUcmFuc2Zvcm0oKTsKLSAgICBtX2xvY2FsVG9QYXJlbnRU
cmFuc2Zvcm0udHJhbnNsYXRlKG1fdmlld3BvcnQueCgpLCBtX3ZpZXdwb3J0LnkoKSk7Ci0gICAg
cmV0dXJuIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKLX0KLQotdm9pZCBSZW5kZXJGb3JlaWdu
T2JqZWN0Ojpjb21wdXRlTG9naWNhbFdpZHRoKCkKLXsKLSAgICAvLyBGSVhNRTogSW52ZXN0aWdh
dGUgaW4gc2l6ZSByb3VuZGluZyBpc3N1ZXMKLSAgICBzZXRXaWR0aChzdGF0aWNfY2FzdDxpbnQ+
KHJvdW5kZihtX3ZpZXdwb3J0LndpZHRoKCkpKSk7Ci19Ci0KLXZvaWQgUmVuZGVyRm9yZWlnbk9i
amVjdDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKQotewotICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0
ZSBpbiBzaXplIHJvdW5kaW5nIGlzc3VlcwotICAgIHNldEhlaWdodChzdGF0aWNfY2FzdDxpbnQ+
KHJvdW5kZihtX3ZpZXdwb3J0LmhlaWdodCgpKSkpOwotfQotCi12b2lkIFJlbmRlckZvcmVpZ25P
YmplY3Q6OmxheW91dCgpCi17Ci0gICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VS
VCghdmlldygpLT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSk7IC8vIFJlbmRlclNWR1Jvb3QgZGlzYWJs
ZXMgbGF5b3V0U3RhdGUgZm9yIHRoZSBTVkcgcmVuZGVyaW5nIHRyZWUuCi0KLSAgICBMYXlvdXRS
ZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7
Ci0gICAgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQqIGZvcmVpZ24gPSBzdGF0aWNfY2FzdDxTVkdG
b3JlaWduT2JqZWN0RWxlbWVudCo+KG5vZGUoKSk7Ci0KLSAgICBib29sIHVwZGF0ZUNhY2hlZEJv
dW5kYXJpZXNJblBhcmVudHMgPSBmYWxzZTsKLSAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0
ZSkgewotICAgICAgICBtX2xvY2FsVHJhbnNmb3JtID0gZm9yZWlnbi0+YW5pbWF0ZWRMb2NhbFRy
YW5zZm9ybSgpOwotICAgICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Ci0gICAg
ICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMgPSB0cnVlOwotICAgIH0KLQotICAg
IEZsb2F0UmVjdCBvbGRWaWV3cG9ydCA9IG1fdmlld3BvcnQ7Ci0KLSAgICAvLyBDYWNoZSB2aWV3
cG9ydCBib3VuZGFyaWVzCi0gICAgRmxvYXRQb2ludCB2aWV3cG9ydExvY2F0aW9uKGZvcmVpZ24t
PngoKS52YWx1ZShmb3JlaWduKSwgZm9yZWlnbi0+eSgpLnZhbHVlKGZvcmVpZ24pKTsKLSAgICBt
X3ZpZXdwb3J0ID0gRmxvYXRSZWN0KHZpZXdwb3J0TG9jYXRpb24sIEZsb2F0U2l6ZShmb3JlaWdu
LT53aWR0aCgpLnZhbHVlKGZvcmVpZ24pLCBmb3JlaWduLT5oZWlnaHQoKS52YWx1ZShmb3JlaWdu
KSkpOwotICAgIGlmICghdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cykKLSAgICAgICAg
dXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IG9sZFZpZXdwb3J0ICE9IG1fdmlld3Bv
cnQ7Ci0KLSAgICAvLyBTZXQgYm94IG9yaWdpbiB0byB0aGUgZm9yZWlnbk9iamVjdCB4L3kgdHJh
bnNsYXRpb24sIHNvIHBvc2l0aW9uZWQgb2JqZWN0cyBpbiBYSFRNTCBjb250ZW50IGdldCBjb3Jy
ZWN0Ci0gICAgLy8gcG9zaXRpb25zLiBBIHJlZ3VsYXIgUmVuZGVyQm94TW9kZWxPYmplY3Qgd291
bGQgcHVsbCB0aGlzIGluZm9ybWF0aW9uIGZyb20gUmVuZGVyU3R5bGUgLSBpbiBTVkcgdGhvc2UK
LSAgICAvLyBwcm9wZXJ0aWVzIGFyZSBpZ25vcmVkIGZvciBub24gPHN2Zz4gZWxlbWVudHMsIHNv
IHdlIG1pbWljIHdoYXQgaGFwcGVucyB3aGVuIHNwZWNpZnlpbmcgdGhlbSB0aHJvdWdoIENTUy4K
LQotICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBpbiBsb2NhdGlvbiByb3VuZGluZyBpc3N1ZXMg
LSBvbmx5IGFmZmVjdHMgUmVuZGVyRm9yZWlnbk9iamVjdCAmIFJlbmRlclNWR1RleHQKLSAgICBz
ZXRMb2NhdGlvbihyb3VuZGVkSW50UG9pbnQodmlld3BvcnRMb2NhdGlvbikpOwotCi0gICAgYm9v
bCBsYXlvdXRDaGFuZ2VkID0gbV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91dCgpOwot
ICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKLSAgICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkpOwot
Ci0gICAgLy8gSWYgb3VyIGJvdW5kcyBjaGFuZ2VkLCBub3RpZnkgdGhlIHBhcmVudHMuCi0gICAg
aWYgKHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJblBhcmVudHMpCi0gICAgICAgIFJlbmRlclNWR0Js
b2NrOjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKLQotICAgIC8vIEludmFsaWRhdGUgYWxs
IHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCi0gICAgaWYg
KGxheW91dENoYW5nZWQpCi0gICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRD
aGFuZ2VkKHRoaXMpOwotCi0gICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwotfQot
Ci1ib29sIFJlbmRlckZvcmVpZ25PYmplY3Q6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQotewotICAgIEZs
b2F0UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50
KHBvaW50SW5QYXJlbnQpOwotCi0gICAgLy8gRWFybHkgZXhpdCBpZiBsb2NhbCBwb2ludCBpcyBu
b3QgY29udGFpbmVkIGluIGNsaXBwZWQgdmlld3BvcnQgYXJlYQotICAgIGlmIChTVkdSZW5kZXJT
dXBwb3J0Ojppc092ZXJmbG93SGlkZGVuKHRoaXMpICYmICFtX3ZpZXdwb3J0LmNvbnRhaW5zKGxv
Y2FsUG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbnRQb2ludCByb3VuZGVk
TG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2ludChsb2NhbFBvaW50KTsKLSAgICByZXR1cm4gUmVu
ZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcm91bmRlZExvY2FsUG9pbnQu
eCgpLCByb3VuZGVkTG9jYWxQb2ludC55KCksIDAsIDAsIGhpdFRlc3RBY3Rpb24pOwotfQotCi1i
b29sIFJlbmRlckZvcmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbikKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
UmVuZGVyRm9yZWlnbk9iamVjdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBU
cmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0Ci17Ci0gICAgLy8gV2hlbiBjcmF3
bGluZyB1cCB0aGUgaGllcmFjaHkgc3RhcnRpbmcgZnJvbSBmb3JlaWduT2JqZWN0IGNoaWxkIGNv
bnRlbnQsIHVzZVRyYW5zZm9ybXMgbWF5IG5vdCBiZSBzZXQgdG8gdHJ1ZS4KLSAgICBpZiAoIXVz
ZVRyYW5zZm9ybXMpCi0gICAgICAgIHVzZVRyYW5zZm9ybXMgPSB0cnVlOwotICAgIFNWR1JlbmRl
clN1cHBvcnQ6Om1hcExvY2FsVG9Db250YWluZXIodGhpcywgcmVwYWludENvbnRhaW5lciwgZml4
ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsKLX0KLQotfQotCi0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaAko
cmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWln
bk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJGb3JlaWduT2JqZWN0X2gKLSNkZWZpbmUgUmVuZGVy
Rm9yZWlnbk9iamVjdF9oCi0KLSNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoU1ZHX0ZPUkVJR05f
T0JKRUNUKQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdCbG9jay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJGb3JlaWdu
T2JqZWN0IDogcHVibGljIFJlbmRlclNWR0Jsb2NrIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBS
ZW5kZXJGb3JlaWduT2JqZWN0KFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Kik7Ci0gICAgdmlydHVh
bCB+UmVuZGVyRm9yZWlnbk9iamVjdCgpOwotCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5k
ZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckZvcmVpZ25PYmplY3QiOyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsK
LQotICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7Ci0gICAgdmlydHVhbCB2b2lkIGNv
bXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcmVx
dWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGxh
eW91dCgpOwotCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25z
dCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91
bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9Ci0gICAgdmlydHVhbCBGbG9h
dFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3Zp
ZXdwb3J0OyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFy
ZW50LCBIaXRUZXN0QWN0aW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGlu
dCB0eSwgSGl0VGVzdEFjdGlvbik7Ci0gICAgdmlydHVhbCBib29sIGlzU1ZHRm9yZWlnbk9iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRv
Q29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZp
eGVkICwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUp
IGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9u
ZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLQotIHByaXZhdGU6Ci0gICAgdmlydHVhbCB2
b2lkIGNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2lj
YWxIZWlnaHQoKTsKLQotICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRv
UGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9j
YWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0KLSAgICBi
b29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwotICAgIEZsb2F0UmVjdCBtX3ZpZXdwb3J0
OwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOwotICAgIG11dGFibGUgQWZm
aW5lVHJhbnNmb3JtIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKLX07Ci0KLX0KLQotI2VuZGlm
Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdBbGxJbk9u
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Fs
bEluT25lLmNwcAkocmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotLy8gVGhp
cyBhbGwtaW4tb25lIGNwcCBmaWxlIGN1dHMgZG93biBvbiB0ZW1wbGF0ZSBibG9hdCB0byBhbGxv
dyB1cyB0byBidWlsZCBvdXIgV2luZG93cyByZWxlYXNlIGJ1aWxkLgotCi0jaW5jbHVkZSAiUmVu
ZGVyU1ZHQmxvY2suY3BwIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5jcHAiCi0jaW5j
bHVkZSAiUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCIKLSNpbmNsdWRlICJSZW5kZXJTVkdIaWRk
ZW5Db250YWluZXIuY3BwIgotI2luY2x1ZGUgIlJlbmRlclNWR0ltYWdlLmNwcCIKLSNpbmNsdWRl
ICJSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2Uu
Y3BwIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAiCi0jaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2
ZS5jcHAiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAiCi0jaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAiCi0jaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIuY3BwIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2Vy
LmNwcCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIgotI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwIgotI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5jcHAiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5jcHAiCi0j
aW5jbHVkZSAiUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuY3BwIgotI2luY2x1ZGUg
IlJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwIgotI2luY2x1ZGUgIlJlbmRlclNW
R1ZpZXdwb3J0Q29udGFpbmVyLmNwcCIKLSNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmNw
cCIKLSNpbmNsdWRlICJTVkdNYXJrZXJMYXlvdXRJbmZvLmNwcCIKLSNpbmNsdWRlICJTVkdSZW5k
ZXJTdXBwb3J0LmNwcCIKLSNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCIKLSNpbmNs
dWRlICJTVkdSZXNvdXJjZXMuY3BwIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmNwcCIK
LSNpbmNsdWRlICJTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAiCi0jaW5jbHVkZSAiU1ZHU2hh
ZG93VHJlZUVsZW1lbnRzLmNwcCIKLQotLy8gRklYTUU6IEFzIHNvb24gYXMgYWxsIFNWRyByZW5k
ZXJlcnMgbGl2ZSBpbiByZW5kZXJpbmcvc3ZnLCB0aGlzIGZpbGUgc2hvdWxkIGJlIG1vdmVkIHRo
ZXJlIGFzIHdlbGwsIHJlbW92aW5nIHRoZSBuZWVkIGZvciB0aGUgc3ZnLyBpbmNsdWRlcyBiZWxv
dy4KLSNpbmNsdWRlICJzdmcvUmVuZGVyU1ZHSW5saW5lLmNwcCIKLSNpbmNsdWRlICJzdmcvUmVu
ZGVyU1ZHSW5saW5lVGV4dC5jcHAiCi0jaW5jbHVkZSAic3ZnL1JlbmRlclNWR1RTcGFuLmNwcCIK
LSNpbmNsdWRlICJzdmcvUmVuZGVyU1ZHVGV4dC5jcHAiCi0jaW5jbHVkZSAic3ZnL1JlbmRlclNW
R1RleHRQYXRoLmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAiCi0jaW5j
bHVkZSAic3ZnL1NWR0lubGluZVRleHRCb3guY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdSb290SW5s
aW5lQm94LmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHVGV4dENodW5rLmNwcCIKLSNpbmNsdWRlICJz
dmcvU1ZHVGV4dENodW5rQnVpbGRlci5jcHAiCi0jaW5jbHVkZSAic3ZnL1NWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzLmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWls
ZGVyLmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAiCi0jaW5jbHVk
ZSAic3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAiCi0jaW5jbHVkZSAic3ZnL1NW
R1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHVGV4dE1ldHJp
Y3MuY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdUZXh0UXVlcnkuY3BwIgpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suY3BwCShyZXZpc2lvbiA3NTM0NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJTVkdCbG9jay5oIgotCi0jaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUmVuZGVyU1ZHQmxvY2s6OlJlbmRlclNWR0Jsb2NrKFNWR0VsZW1lbnQq
IG5vZGUpIAotICAgIDogUmVuZGVyQmxvY2sobm9kZSkKLXsKLX0KLQotdm9pZCBSZW5kZXJTVkdC
bG9jazo6c2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUpIAotewotICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gdXNlU3R5bGUgPSBzdHlsZTsKLQotICAgIC8vIFNWRyB0ZXh0IGxh
eW91dCBjb2RlIGV4cGVjdHMgdXMgdG8gYmUgYSBibG9jay1sZXZlbCBzdHlsZSBlbGVtZW50LiAg
IAotICAgIGlmICh1c2VTdHlsZS0+aXNEaXNwbGF5SW5saW5lVHlwZSgpKSB7Ci0gICAgICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAg
ICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbSh1c2VTdHlsZS5nZXQoKSk7Ci0gICAgICAgIG5ld1N0
eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAgICAgICAgdXNlU3R5bGUgPSBuZXdTdHlsZS5yZWxl
YXNlKCk7Ci0gICAgfQotCi0gICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKHVzZVN0eWxlLnJlbGVh
c2UoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHQmxvY2s6OnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21T
dHlsZSgpCi17Ci0gICAgUmVuZGVyQmxvY2s6OnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgp
OwotCi0gICAgLy8gUmVuZGVyU1ZHbG9jaywgdXNlZCBieSBSZW5kZXIoU1ZHVGV4dHxGb3JlaWdu
T2JqZWN0KSwgaXMgbm90IGFsbG93ZWQgdG8gY2FsbCBzZXRIYXNPdmVyZmxvd0NsaXAodHJ1ZSku
Ci0gICAgLy8gUmVuZGVyQmxvY2sgYXNzdW1lcyBhIGxheWVyIHRvIGJlIHByZXNlbnQgd2hlbiB0
aGUgb3ZlcmZsb3cgY2xpcCBmdW5jdGlvbmFsaXR5IGlzIHJlcXVlc3RlZC4gQm90aAotICAgIC8v
IFJlbmRlcihTVkdUZXh0fEZvcmVpZ25PYmplY3QpIHJldHVybiAnZmFsc2UnIG9uICdyZXF1aXJl
c0xheWVyJy4gRmluZSBmb3IgUmVuZGVyU1ZHVGV4dC4KLSAgICAvLwotICAgIC8vIElmIHdlIHdh
bnQgdG8gc3VwcG9ydCBvdmVyZmxvdyBydWxlcyBmb3IgPGZvcmVpZ25PYmplY3Q+IHdlIGNhbiBj
aG9vc2UgYmV0d2VlbiB0d28gc29sdXRpb25zOgotICAgIC8vIGEpIG1ha2UgUmVuZGVyRm9yZWln
bk9iamVjdCByZXF1aXJlIGxheWVycyBhbmQgU1ZHIGxheWVyIGF3YXJlCi0gICAgLy8gYikgcmVh
Y3RvciBvdmVyZmxvdyBsb2dpYyBvdXQgb2YgUmVuZGVyTGF5ZXIgKGFzIHN1Z2dlc3RlZCBieSBk
aHlhdHQpLCB3aGljaCBpcyBhIGxhcmdlIHRhc2sKLSAgICAvLwotICAgIC8vIFVudGlsIHRoaXMg
aXMgcmVzb2x2ZWQsIGRpc2FibGUgb3ZlcmZsb3cgc3VwcG9ydC4gT3BlcmEvRkYgZG9uJ3Qgc3Vw
cG9ydCBpdCBhcyB3ZWxsIGF0IHRoZSBtb21lbnQgKEZlYiAyMDEwKS4KLSAgICAvLwotICAgIC8v
IE5vdGU6IFRoaXMgZG9lcyBOT1QgYWZmZWN0IG92ZXJmbG93IGhhbmRsaW5nIG9uIG91dGVyL2lu
bmVyIDxzdmc+IGVsZW1lbnRzIC0gdGhpcyBpcyBoYW5kbGVkCi0gICAgLy8gbWFudWFsbHkgYnkg
UmVuZGVyU1ZHUm9vdCAtIHdoaWNoIG93bnMgdGhlIGRvY3VtZW50cyBlbmNsb3Npbmcgcm9vdCBs
YXllciBhbmQgdGh1cyB3b3JrcyBmaW5lLgotICAgIHNldEhhc092ZXJmbG93Q2xpcChmYWxzZSk7
Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHQmxvY2s6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiwgaW50LCBpbnQpCi17Ci0gICAgLy8gVGhpcyBjb2RlIHBhdGggc2hvdWxkIG5ldmVyIGJlIHRh
a2VuIGZvciBTVkcsIGFzIHdlJ3JlIGFzc3VtaW5nIHVzZVRyYW5zZm9ybXM9dHJ1ZSBldmVyeXdo
ZXJlLCBhYnNvbHV0ZVF1YWRzIHNob3VsZCBiZSB1c2VkLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotfQotCi12b2lkIFJlbmRlclNWR0Jsb2NrOjpkZXN0cm95KCkKLXsKLSAgICBTVkdSZXNv
dXJjZXNDYWNoZTo6Y2xpZW50RGVzdHJveWVkKHRoaXMpOwotICAgIFJlbmRlckJsb2NrOjpkZXN0
cm95KCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHQmxvY2s6OnN0eWxlV2lsbENoYW5nZShTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQotewotICAgIGlmIChk
aWZmID09IFN0eWxlRGlmZmVyZW5jZUxheW91dCkKLSAgICAgICAgc2V0TmVlZHNCb3VuZGFyaWVz
VXBkYXRlKCk7Ci0gICAgUmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5nZShkaWZmLCBuZXdTdHls
ZSk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgUmVuZGVyQmxv
Y2s6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLSAgICBTVkdSZXNvdXJjZXNDYWNo
ZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKHRoaXMsIGRpZmYsIHN0eWxlKCkpOwotfQotCi12b2lkIFJl
bmRlclNWR0Jsb2NrOjp1cGRhdGVGcm9tRWxlbWVudCgpCi17Ci0gICAgUmVuZGVyQmxvY2s6OnVw
ZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFVwZGF0ZWRG
cm9tRWxlbWVudCh0aGlzLCBzdHlsZSgpKTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oCShyZXZpc2lvbiA3NTM0NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2lmbmRlZiBSZW5kZXJTVkdCbG9ja19oCi0jZGVmaW5lIFJlbmRlclNWR0Jsb2Nr
X2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKLSNpbmNsdWRl
ICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU1ZH
RWxlbWVudDsKLQotY2xhc3MgUmVuZGVyU1ZHQmxvY2sgOiBwdWJsaWMgUmVuZGVyQmxvY2sgewot
cHVibGljOgotICAgIGV4cGxpY2l0IFJlbmRlclNWR0Jsb2NrKFNWR0VsZW1lbnQqKTsKLQotcHJp
dmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4p
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCb3hNb2RlbEluZm9Gcm9tU3R5bGUoKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50
IHR5KTsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0
eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHls
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVs
ZW1lbnQoKTsKLX07Ci0KLX0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNpb24gNzUzNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRh
aW5lci5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgotI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0jaW5j
bHVkZSAiU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclNWR0NvbnRhaW5lcjo6UmVuZGVyU1ZHQ29udGFp
bmVyKFNWR1N0eWxlZEVsZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChu
b2RlKQotICAgICwgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUodHJ1ZSkKLXsKLX0KLQotUmVuZGVy
U1ZHQ29udGFpbmVyOjp+UmVuZGVyU1ZHQ29udGFpbmVyKCkKLXsKLX0KLQotdm9pZCBSZW5kZXJT
VkdDb250YWluZXI6OmxheW91dCgpCi17Ci0gICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotCi0g
ICAgLy8gUmVuZGVyU1ZHUm9vdCBkaXNhYmxlcyBsYXlvdXRTdGF0ZSBmb3IgdGhlIFNWRyByZW5k
ZXJpbmcgdHJlZS4KLSAgICBBU1NFUlQoIXZpZXcoKS0+bGF5b3V0U3RhdGVFbmFibGVkKCkpOwot
Ci0gICAgLy8gQWxsb3cgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgdG8gdXBkYXRlIGl0cyB2
aWV3cG9ydC4KLSAgICBjYWxjVmlld3BvcnQoKTsKLQotICAgIExheW91dFJlcGFpbnRlciByZXBh
aW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpIHx8IHNlbGZXaWxsUGFp
bnQoKSk7Ci0KLSAgICAvLyBBbGxvdyBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyIHRv
IHVwZGF0ZSBpdHMgdHJhbnNmb3JtLgotICAgIGJvb2wgdXBkYXRlZFRyYW5zZm9ybSA9IGNhbGN1
bGF0ZUxvY2FsVHJhbnNmb3JtKCk7Ci0KLSAgICBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGls
ZHJlbih0aGlzLCBzZWxmTmVlZHNMYXlvdXQoKSk7Ci0KLSAgICAvLyBJbnZhbGlkYXRlIGFsbCBy
ZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgotICAgIGlmICht
X2V2ZXJIYWRMYXlvdXQgJiYgc2VsZk5lZWRzTGF5b3V0KCkpCi0gICAgICAgIFNWR1Jlc291cmNl
c0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKHRoaXMpOwotCi0gICAgLy8gQXQgdGhpcyBwb2lu
dCBMYXlvdXRSZXBhaW50ZXIgYWxyZWFkeSBncmFiYmVkIHRoZSBvbGQgYm91bmRzLAotICAgIC8v
IHJlY2FsY3VsYXRlIHRoZW0gbm93IHNvIHJlcGFpbnRBZnRlckxheW91dCgpIHVzZXMgdGhlIG5l
dyBib3VuZHMuCi0gICAgaWYgKG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlIHx8IHVwZGF0ZWRUcmFu
c2Zvcm0pIHsKLSAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwotICAgICAgICBtX25l
ZWRzQm91bmRhcmllc1VwZGF0ZSA9IGZhbHNlOwotICAgIAotICAgICAgICAvLyBJZiBvdXIgYm91
bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4KLSAgICAgICAgUmVuZGVyU1ZHTW9kZWxP
YmplY3Q6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwotICAgIH0KLQotICAgIHJlcGFpbnRl
ci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKLSAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Ci19Ci0K
LWJvb2wgUmVuZGVyU1ZHQ29udGFpbmVyOjpzZWxmV2lsbFBhaW50KCkKLXsKLSNpZiBFTkFCTEUo
RklMVEVSUykKLSAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hl
OjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhpcyk7Ci0gICAgcmV0dXJuIHJlc291
cmNlcyAmJiByZXNvdXJjZXMtPmZpbHRlcigpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQsIGludCkKLXsKLSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3BlYzogZ3JvdXBzIHcvbyBj
aGlsZHJlbiBzdGlsbCBtYXkgcmVuZGVyIGZpbHRlciBjb250ZW50LgotICAgIGlmICghZmlyc3RD
aGlsZCgpICYmICFzZWxmV2lsbFBhaW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0
UmVjdCByZXBhaW50UmVjdCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7Ci0gICAg
aWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QocmVw
YWludFJlY3QsIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSwgcGFpbnRJbmZvKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7Ci0gICAg
Y2hpbGRQYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwotCi0gICAgLy8gTGV0IHRoZSBSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lciBzdWJjbGFzcyBjbGlwIGlmIG5lY2Vzc2FyeQotICAgIGFwcGx5
Vmlld3BvcnRDbGlwKGNoaWxkUGFpbnRJbmZvKTsKLQotICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5
VHJhbnNmb3JtKGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSk7Ci0KLSAgICBib29sIGNvbnRpbnVl
UmVuZGVyaW5nID0gdHJ1ZTsKLSAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZUZvcmVncm91bmQpCi0gICAgICAgIGNvbnRpbnVlUmVuZGVyaW5nID0gU1ZHUmVuZGVyU3Vw
cG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbyk7Ci0K
LSAgICBpZiAoY29udGludWVSZW5kZXJpbmcpIHsKLSAgICAgICAgY2hpbGRQYWludEluZm8udXBk
YXRlUGFpbnRpbmdSb290Rm9yQ2hpbGRyZW4odGhpcyk7Ci0gICAgICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpCi0gICAgICAgICAgICBjaGlsZC0+cGFpbnQoY2hpbGRQYWludEluZm8sIDAsIDApOwot
ICAgIH0KLQotICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQp
Ci0gICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywg
Y2hpbGRQYWludEluZm8sIHBhaW50SW5mby5jb250ZXh0KTsKLQotICAgIGNoaWxkUGFpbnRJbmZv
LmNvbnRleHQtPnJlc3RvcmUoKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHJlYWxseSBzaG91bGQg
YmUgZHJhd24gZnJvbSBsb2NhbCBjb29yZGluYXRlcywgYnV0IGN1cnJlbnRseSB3ZSBoYWNrIGl0
Ci0gICAgLy8gdG8gYXZvaWQgb3VyIGNsaXAga2lsbGluZyBvdXIgb3V0bGluZSByZWN0LiAgVGh1
cyB3ZSB0cmFuc2xhdGUgb3VyCi0gICAgLy8gb3V0bGluZSByZWN0IGludG8gcGFyZW50IGNvb3Jk
cyBiZWZvcmUgZHJhd2luZy4KLSAgICAvLyBGSVhNRTogVGhpcyBtZWFucyBvdXIgZm9jdXMgcmlu
ZyB3b24ndCBzaGFyZSBvdXIgcm90YXRpb24gbGlrZSBpdCBzaG91bGQuCi0gICAgLy8gV2Ugc2hv
dWxkIGluc3RlYWQgZGlzYWJsZSBvdXIgY2xpcCBkdXJpbmcgUGFpbnRQaGFzZU91dGxpbmUKLSAg
ICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgpLT5vdXRsaW5lV2lkdGgo
KSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkgewotICAgICAgICBJbnRSZWN0
IHBhaW50UmVjdEluUGFyZW50ID0gZW5jbG9zaW5nSW50UmVjdChsb2NhbFRvUGFyZW50VHJhbnNm
b3JtKCkubWFwUmVjdChyZXBhaW50UmVjdCkpOwotICAgICAgICBwYWludE91dGxpbmUocGFpbnRJ
bmZvLmNvbnRleHQsIHBhaW50UmVjdEluUGFyZW50LngoKSwgcGFpbnRSZWN0SW5QYXJlbnQueSgp
LCBwYWludFJlY3RJblBhcmVudC53aWR0aCgpLCBwYWludFJlY3RJblBhcmVudC5oZWlnaHQoKSk7
Ci0gICAgfQotfQotCi0vLyBhZGRGb2N1c1JpbmdSZWN0cyBpcyBjYWxsZWQgZnJvbSBwYWludE91
dGxpbmUgYW5kIG5lZWRzIHRvIGJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGVzIGFzIHRoZSBwYWlu
dE91bGluZSBjYWxsCi12b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YWRkRm9jdXNSaW5nUmVjdHMo
VmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50LCBpbnQpCi17Ci0gICAgSW50UmVjdCBwYWludFJl
Y3RJblBhcmVudCA9IGVuY2xvc2luZ0ludFJlY3QobG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLm1h
cFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOwotICAgIGlmICghcGFpbnRS
ZWN0SW5QYXJlbnQuaXNFbXB0eSgpKQotICAgICAgICByZWN0cy5hcHBlbmQocGFpbnRSZWN0SW5Q
YXJlbnQpOwotfQotCi12b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6dXBkYXRlQ2FjaGVkQm91bmRh
cmllcygpCi17Ci0gICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgIG1f
c3Ryb2tlQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICBtX3JlcGFpbnRCb3VuZGluZ0Jv
eCA9IEZsb2F0UmVjdCgpOwotCi0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5l
ckJvdW5kaW5nQm94ZXModGhpcywgbV9vYmplY3RCb3VuZGluZ0JveCwgbV9zdHJva2VCb3VuZGlu
Z0JveCwgbV9yZXBhaW50Qm91bmRpbmdCb3gpOwotICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVy
c2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7
Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHQ29udGFpbmVyOjpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKLXsKLSAg
ICAvLyBHaXZlIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyIGEgY2hhbmNlIHRvIGFwcGx5IGl0
cyB2aWV3cG9ydCBjbGlwCi0gICAgaWYgKCFwb2ludElzSW5zaWRlVmlld3BvcnRDbGlwKHBvaW50
SW5QYXJlbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGbG9hdFBvaW50IGxvY2Fs
UG9pbnQgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50
SW5QYXJlbnQpOwotCi0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdB
cmVhKHRoaXMsIGxvY2FsUG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoY2hpbGQt
Pm5vZGVBdEZsb2F0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBvaW50LCBoaXRUZXN0QWN0
aW9uKSkgewotICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJvdW5kZWRJ
bnRQb2ludChsb2NhbFBvaW50KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFNwZWM6IE9ubHkgZ3JhcGhpY2FsIGVsZW1lbnRzIGNhbiBiZSB0
YXJnZXRlZCBieSB0aGUgbW91c2UsIHBlcmlvZC4KLSAgICAvLyAxNi40OiAiSWYgdGhlcmUgYXJl
IG5vIGdyYXBoaWNzIGVsZW1lbnRzIHdob3NlIHJlbGV2YW50IGdyYXBoaWNzIGNvbnRlbnQgaXMg
dW5kZXIgdGhlIHBvaW50ZXIgKGkuZS4sIHRoZXJlIGlzIG5vIHRhcmdldCBlbGVtZW50KSwgdGhl
IGV2ZW50IGlzIG5vdCBkaXNwYXRjaGVkLiIKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KLQot
I2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0NvbnRhaW5lci5oCShyZXZpc2lvbiA3NTM0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgUmVuZGVyU1ZHQ29udGFpbmVy
X2gKLSNkZWZpbmUgUmVuZGVyU1ZHQ29udGFpbmVyX2gKLQotI2lmIEVOQUJMRShTVkcpCi0KLSNp
bmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIFNWR0VsZW1lbnQ7Ci0KLWNsYXNzIFJlbmRlclNWR0NvbnRhaW5lciA6IHB1YmxpYyBS
ZW5kZXJTVkdNb2RlbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyU1ZHQ29u
dGFpbmVyKFNWR1N0eWxlZEVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJTVkdDb250YWlu
ZXIoKTsKLQotICAgIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25z
dCB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQotICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hp
bGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7Ci0gICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpIHsgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgPSB0
cnVlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCog
dmlydHVhbENoaWxkcmVuKCkgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQotICAgIHZpcnR1YWwgY29u
c3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVy
biBjaGlsZHJlbigpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTVkdDb250YWluZXIoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3QgeyByZXR1cm4gIlJlbmRlclNWR0NvbnRhaW5lciI7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8
SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmpl
Y3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KLSAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3Ryb2tlQm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRU
ZXN0QWN0aW9uKTsKLQotICAgIC8vIEFsbG93IFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWlu
ZXIgdG8gaG9vayBpbiBhdCB0aGUgcmlnaHQgdGltZSBpbiBsYXlvdXQoKQotICAgIHZpcnR1YWwg
Ym9vbCBjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAv
LyBBbGxvdyBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciB0byBob29rIGluIGF0IHRoZSByaWdo
dCB0aW1lcyBpbiBsYXlvdXQoKSwgcGFpbnQoKSBhbmQgbm9kZUF0RmxvYXRQb2ludCgpCi0gICAg
dmlydHVhbCB2b2lkIGNhbGNWaWV3cG9ydCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBhcHBseVZp
ZXdwb3J0Q2xpcChQYWludEluZm8mKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcG9pbnRJc0luc2lk
ZVZpZXdwb3J0Q2xpcChjb25zdCBGbG9hdFBvaW50JiAvKnBvaW50SW5QYXJlbnQqLykgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgYm9vbCBzZWxmV2lsbFBhaW50KCk7Ci0gICAgdm9pZCB1cGRhdGVD
YWNoZWRCb3VuZGFyaWVzKCk7Ci0KLXByaXZhdGU6Ci0gICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
IG1fY2hpbGRyZW47Ci0gICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7Ci0gICAgRmxv
YXRSZWN0IG1fc3Ryb2tlQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5k
aW5nQm94OwotICAgIGJvb2wgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgOiAxOwotfTsKLSAgCi1p
bmxpbmUgUmVuZGVyU1ZHQ29udGFpbmVyKiB0b1JlbmRlclNWR0NvbnRhaW5lcihSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKLXsKLSAgICAvLyBOb3RlOiBpc1NWR0NvbnRhaW5lciBpcyBhbHNvIHRydWUg
Zm9yIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLCB3aGljaCBpcyBub3QgZGVyaXZlZCBmcm9t
IHRoaXMuCi0gICAgQVNTRVJUKCFvYmplY3QgfHwgKG9iamVjdC0+aXNTVkdDb250YWluZXIoKSAm
JiBzdHJjbXAob2JqZWN0LT5yZW5kZXJOYW1lKCksICJSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
ciIpKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR0NvbnRhaW5lcio+KG9iamVj
dCk7Ci19Ci0KLWlubGluZSBjb25zdCBSZW5kZXJTVkdDb250YWluZXIqIHRvUmVuZGVyU1ZHQ29u
dGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIC8vIE5vdGU6IGlzU1ZH
Q29udGFpbmVyIGlzIGFsc28gdHJ1ZSBmb3IgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIsIHdo
aWNoIGlzIG5vdCBkZXJpdmVkIGZyb20gdGhpcy4KLSAgICBBU1NFUlQoIW9iamVjdCB8fCAob2Jq
ZWN0LT5pc1NWR0NvbnRhaW5lcigpICYmIHN0cmNtcChvYmplY3QtPnJlbmRlck5hbWUoKSwgIlJl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyIikpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyU1ZHQ29udGFpbmVyKj4ob2JqZWN0KTsKLX0KLQotLy8gVGhpcyB3aWxsIGNhdGNo
IGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b1JlbmRlclNWR0NvbnRh
aW5lcihjb25zdCBSZW5kZXJTVkdDb250YWluZXIqKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykKLSNlbmRpZiAvLyBSZW5kZXJTVkdDb250YWluZXJf
aApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50U3RvcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0dyYWRp
ZW50U3RvcC5jcHAJKHJldmlzaW9uIDc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRl
clNWR0dyYWRpZW50U3RvcC5oIgotCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIuaCIKLSNpbmNsdWRlICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdOYW1l
cy5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCi0jaW5jbHVkZSAiU1ZHU3RvcEVs
ZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotdXNpbmcgbmFtZXNwYWNlIFNW
R05hbWVzOwotCi1SZW5kZXJTVkdHcmFkaWVudFN0b3A6OlJlbmRlclNWR0dyYWRpZW50U3RvcChT
VkdTdG9wRWxlbWVudCogZWxlbWVudCkKLSAgICA6IFJlbmRlck9iamVjdChlbGVtZW50KQotewot
fQotCi1SZW5kZXJTVkdHcmFkaWVudFN0b3A6On5SZW5kZXJTVkdHcmFkaWVudFN0b3AoKQotewot
fQotCi12b2lkIFJlbmRlclNWR0dyYWRpZW50U3RvcDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZm
ZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICBSZW5kZXJP
YmplY3Q6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLSAgICBpZiAoZGlmZiA9PSBT
dHlsZURpZmZlcmVuY2VFcXVhbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gPHN0b3A+IGVs
ZW1lbnRzIHNob3VsZCBvbmx5IGJlIGFsbG93ZWQgdG8gbWFrZSByZW5kZXJlcnMgdW5kZXIgZ3Jh
ZGllbnQgZWxlbWVudHMKLSAgICAvLyBidXQgSSBjYW4gaW1hZ2luZSBhIGZldyBjYXNlcyB3ZSBt
aWdodCBub3QgYmUgY2F0Y2hpbmcsIHNvIGxldCdzIG5vdCBjcmFzaCBpZiBvdXIgcGFyZW50IGlz
bid0IGEgZ3JhZGllbnQuCi0gICAgU1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudCA9IGdyYWRp
ZW50RWxlbWVudCgpOwotICAgIGlmICghZ3JhZGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBncmFkaWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAo
IXJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocmVuZGVyZXItPmlzU1ZH
UmVzb3VyY2VDb250YWluZXIoKSk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGNv
bnRhaW5lciA9IHJlbmRlcmVyLT50b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCk7Ci0gICAg
Y29udGFpbmVyLT5yZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7Ci19Ci0KLXZvaWQgUmVuZGVy
U1ZHR3JhZGllbnRTdG9wOjpsYXlvdXQoKQotewotICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsK
LX0KLQotU1ZHR3JhZGllbnRFbGVtZW50KiBSZW5kZXJTVkdHcmFkaWVudFN0b3A6OmdyYWRpZW50
RWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IG5vZGUo
KS0+cGFyZW50Tm9kZSgpOwotICAgIGlmIChwYXJlbnROb2RlLT5oYXNUYWdOYW1lKGxpbmVhckdy
YWRpZW50VGFnKSB8fCBwYXJlbnROb2RlLT5oYXNUYWdOYW1lKHJhZGlhbEdyYWRpZW50VGFnKSkK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0dyYWRpZW50RWxlbWVudCo+KHBhcmVudE5v
ZGUpOwotICAgIHJldHVybiAwOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50U3RvcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdHcmFkaWVudFN0b3Au
aAkocmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
R3JhZGllbnRTdG9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFJlbmRlclNWR0dyYWRpZW50U3RvcF9o
Ci0jZGVmaW5lIFJlbmRlclNWR0dyYWRpZW50U3RvcF9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1jbGFz
cyBTVkdHcmFkaWVudEVsZW1lbnQ7Ci1jbGFzcyBTVkdTdG9wRWxlbWVudDsKLQotLy8gVGhpcyBj
bGFzcyBleGlzdHMgbW9zdGx5IHNvIHdlIGNhbiBoZWFyIGFib3V0IGdyYWRpZW50IHN0b3Agc3R5
bGUgY2hhbmdlcwotY2xhc3MgUmVuZGVyU1ZHR3JhZGllbnRTdG9wIDogcHVibGljIFJlbmRlck9i
amVjdCB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyU1ZHR3JhZGllbnRTdG9wKFNWR1N0b3BFbGVtZW50
Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHR3JhZGllbnRTdG9wKCk7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdHcmFkaWVudFN0b3AoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR0dy
YWRpZW50U3RvcCI7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLQotICAgIC8vIFRo
aXMgb3ZlcnJpZGVzIGFyZSBuZWVkZWQgdG8gcHJldmVudCBBU1NFUlRzIG9uIDxzdmc+PHN0b3Ag
Lz48L3N2Zz4KLSAgICAvLyBSZW5kZXJPYmplY3QncyBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBB
U1NFUlRfTk9UX1JFQUNIRUQoKQotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDQwMAotICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0
Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCopIHsgcmV0dXJuIEludFJlY3QoKTsgfQot
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4g
RmxvYXRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgp
IGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoKTsg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLQotcHJpdmF0ZToKLSAgICBT
VkdHcmFkaWVudEVsZW1lbnQqIGdyYWRpZW50RWxlbWVudCgpIGNvbnN0OwotfTsKLQotaW5saW5l
IGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCogdG9SZW5kZXJTVkdHcmFkaWVudFN0b3AoY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0
LT5pc1NWR0dyYWRpZW50U3RvcCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVu
ZGVyU1ZHR3JhZGllbnRTdG9wKj4ob2JqZWN0KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykKLSNlbmRpZiAvLyBSZW5kZXJTVkdHcmFkaWVudFN0b3BfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAJ
KHJldmlzaW9uIDc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hp
ZGRlbkNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR0hpZGRl
bkNvbnRhaW5lci5oIgotCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgotI2luY2x1ZGUgIlNW
R1N0eWxlZEVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZW5kZXJTVkdIaWRk
ZW5Db250YWluZXI6OlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50KiBl
bGVtZW50KQotICAgIDogUmVuZGVyU1ZHQ29udGFpbmVyKGVsZW1lbnQpCi17Ci19Ci0KLXZvaWQg
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpsYXlvdXQoKQotewotICAgIEFTU0VSVChuZWVkc0xh
eW91dCgpKTsKLSAgICBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbih0aGlzLCBzZWxm
TmVlZHNMYXlvdXQoKSk7IAotICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsgICAgCi19Ci0KLXZv
aWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpwYWludChQYWludEluZm8mLCBpbnQsIGludCkK
LXsKLSAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgcGFpbnQuCi19Ci0KLXZvaWQgUmVuZGVy
U1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JikKLXsK
LSAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgdGFrZSB1cCBzcGFjZSBvciBwYWludAotfQot
Ci1ib29sIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiwgSGl0VGVz
dEFjdGlvbikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJM
RShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5oCShyZXZpc2lvbiA3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpZm5kZWYgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyX2gKLSNkZWZpbmUgUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVu
ZGVyU1ZHQ29udGFpbmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLWNsYXNzIFNW
R1N0eWxlZEVsZW1lbnQ7Ci0KLS8vIFRoaXMgY2xhc3MgaXMgZm9yIGNvbnRhaW5lcnMgd2hpY2gg
YXJlIG5ldmVyIGRyYXduLCBidXQgZG8gbmVlZCB0byBzdXBwb3J0IHN0eWxlCi0vLyA8ZGVmcz4s
IDxsaW5lYXJHcmFkaWVudD4sIDxyYWRpYWxHcmFkaWVudD4gYXJlIGFsbCBnb29kIGV4YW1wbGVz
Ci1jbGFzcyBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZHQ29udGFp
bmVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIoU1ZH
U3R5bGVkRWxlbWVudCopOwotCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3QgeyByZXR1cm4gIlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lciI7IH0KLQotcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJv
b2wgaXNTVkdIaWRkZW5Db250YWluZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAg
dmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7
Ci0gICAgCi0gICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50
KFJlbmRlckJveE1vZGVsT2JqZWN0KikgeyByZXR1cm4gSW50UmVjdCgpOyB9Ci0gICAgdmlydHVh
bCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKTsKLQotICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwotfTsK
LX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0jZW5kaWYgLy8gUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdl
LmNwcAkocmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5NSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAwOSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fu
c3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5B
QkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJTVkdJbWFnZS5oIgotCi0jaW5jbHVkZSAiQXR0ci5o
IgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRS
dWxlcy5oIgotI2luY2x1ZGUgIlJlbmRlckltYWdlUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCi0jaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJTVkdJbWFnZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJTVkdMZW5ndGguaCIKLSNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvLmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotI2luY2x1ZGUgIlNWR1Jl
c291cmNlcy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclNWR0ltYWdlOjpSZW5k
ZXJTVkdJbWFnZShTVkdJbWFnZUVsZW1lbnQqIGltcGwpCi0gICAgOiBSZW5kZXJTVkdNb2RlbE9i
amVjdChpbXBsKQotICAgICwgbV91cGRhdGVDYWNoZWRSZXBhaW50UmVjdCh0cnVlKQotICAgICwg
bV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSh0cnVlKQotICAgICwgbV9pbWFnZVJlc291cmNlKFJlbmRl
ckltYWdlUmVzb3VyY2U6OmNyZWF0ZSgpKQotewotICAgIG1faW1hZ2VSZXNvdXJjZS0+aW5pdGlh
bGl6ZSh0aGlzKTsKLX0KLQotUmVuZGVyU1ZHSW1hZ2U6On5SZW5kZXJTVkdJbWFnZSgpCi17Ci0g
ICAgbV9pbWFnZVJlc291cmNlLT5zaHV0ZG93bigpOwotfQotCi12b2lkIFJlbmRlclNWR0ltYWdl
OjpsYXlvdXQoKQotewotICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLQotICAgIExheW91dFJl
cGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYm
IHNlbGZOZWVkc0xheW91dCgpKTsKLSAgICBTVkdJbWFnZUVsZW1lbnQqIGltYWdlID0gc3RhdGlj
X2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKLQotICAgIGJvb2wgdHJhbnNmb3JtT3JC
b3VuZGFyaWVzVXBkYXRlID0gbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSB8fCBtX3VwZGF0ZUNhY2hl
ZFJlcGFpbnRSZWN0OwotICAgIGlmIChtX25lZWRzVHJhbnNmb3JtVXBkYXRlKSB7Ci0gICAgICAg
IG1fbG9jYWxUcmFuc2Zvcm0gPSBpbWFnZS0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOwotICAg
ICAgICBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1f
dXBkYXRlQ2FjaGVkUmVwYWludFJlY3QpIHsKLSAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3gg
PSBtX29iamVjdEJvdW5kaW5nQm94OwotICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNl
Y3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOwot
ICAgICAgICBtX3VwZGF0ZUNhY2hlZFJlcGFpbnRSZWN0ID0gZmFsc2U7Ci0gICAgfQotCi0gICAg
Ly8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBsYXlvdXQg
Y2hhbmdlZC4KLSAgICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xheW91dCgpKQot
ICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZCh0aGlzKTsKLQot
ICAgIC8vIElmIG91ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgotICAgIGlm
ICh0cmFuc2Zvcm1PckJvdW5kYXJpZXNVcGRhdGUpCi0gICAgICAgIFJlbmRlclNWR01vZGVsT2Jq
ZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKTsKLQotICAgIHJlcGFpbnRlci5yZXBhaW50
QWZ0ZXJMYXlvdXQoKTsKLSAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyU1ZHSW1hZ2U6OnVwZGF0ZUZyb21FbGVtZW50KCkKLXsKLSAgICBTVkdJbWFnZUVsZW1lbnQq
IGltYWdlID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKLQotICAgIEZs
b2F0UmVjdCBvbGRCb3VuZGFyaWVzID0gbV9vYmplY3RCb3VuZGluZ0JveDsKLSAgICBtX29iamVj
dEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KGltYWdlLT54KCkudmFsdWUoaW1hZ2UpLCBpbWFnZS0+
eSgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPndpZHRoKCkudmFsdWUoaW1hZ2UpLCBpbWFnZS0+aGVp
Z2h0KCkudmFsdWUoaW1hZ2UpKTsKLSAgICBpZiAobV9vYmplY3RCb3VuZGluZ0JveCAhPSBvbGRC
b3VuZGFyaWVzKSB7Ci0gICAgICAgIG1fdXBkYXRlQ2FjaGVkUmVwYWludFJlY3QgPSB0cnVlOwot
ICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKLSAgICB9Ci0gICAgUmVuZGVyU1ZHTW9kZWxP
YmplY3Q6OnVwZGF0ZUZyb21FbGVtZW50KCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKLXsKLSAgICBpZiAocGFpbnRJbmZv
LmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0g
SElEREVOIHx8ICFtX2ltYWdlUmVzb3VyY2UtPmhhc0ltYWdlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCk7Ci0gICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3RzUmVw
YWludFJlY3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0sIHBhaW50SW5mbykpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhwYWludEluZm8pOwot
ICAgIGJvb2wgZHJhd3NPdXRsaW5lID0gc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgJiYgKGNoaWxk
UGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSk7Ci0gICAgaWYgKGRyYXdzT3V0bGluZSB8fCBj
aGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewotICAgICAgICBj
aGlsZFBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIGNoaWxkUGFpbnRJbmZvLmFw
cGx5VHJhbnNmb3JtKG1fbG9jYWxUcmFuc2Zvcm0pOwotCi0gICAgICAgIGlmIChjaGlsZFBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewotICAgICAgICAgICAgUGFpbnRJ
bmZvIHNhdmVkSW5mbyhjaGlsZFBhaW50SW5mbyk7Ci0KLSAgICAgICAgICAgIGlmIChTVkdSZW5k
ZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZv
KSkgewotICAgICAgICAgICAgICAgIEltYWdlKiBpbWFnZSA9IG1faW1hZ2VSZXNvdXJjZS0+aW1h
Z2UoKTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBtX29iamVjdEJvdW5k
aW5nQm94OwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAsIGltYWdlLT53
aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCkpOwotCi0gICAgICAgICAgICAgICAgU1ZHSW1hZ2VFbGVt
ZW50KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQqPihub2RlKCkp
OwotICAgICAgICAgICAgICAgIGlmIChpbWFnZUVsZW1lbnQtPnByZXNlcnZlQXNwZWN0UmF0aW8o
KS5hbGlnbigpICE9IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19QUkVTRVJWRUFTUEVDVFJB
VElPX05PTkUpCi0gICAgICAgICAgICAgICAgICAgIGltYWdlRWxlbWVudC0+cHJlc2VydmVBc3Bl
Y3RSYXRpbygpLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOwotCi0gICAgICAgICAg
ICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQ
YWludEluZm8sIHNhdmVkSW5mby5jb250ZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChk
cmF3c091dGxpbmUpCi0gICAgICAgICAgICBwYWludE91dGxpbmUoY2hpbGRQYWludEluZm8uY29u
dGV4dCwgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ0JveC54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+
KGJvdW5kaW5nQm94LnkoKSksCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihib3Vu
ZGluZ0JveC53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihib3VuZGluZ0JveC5oZWlnaHQoKSkp
OwotICAgICAgICAKLSAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwot
ICAgIH0KLX0KLQotYm9vbCBSZW5kZXJTVkdJbWFnZTo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCi17Ci0g
ICAgLy8gV2Ugb25seSBkcmF3IGluIHRoZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0
LXRlc3QgdGhlbi4KLSAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9pbnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1
bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX0lNQUdFX0hJVFRFU1RJTkcsIHJlcXVlc3Qs
IHN0eWxlKCktPnBvaW50ZXJFdmVudHMoKSk7Ci0gICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUo
KS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpOwotICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1
bGVzLnJlcXVpcmVWaXNpYmxlKSB7Ci0gICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGxv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xp
cHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIGlmIChoaXRSdWxlcy5jYW5IaXRGaWxsKSB7Ci0gICAgICAgICAgICBpZiAobV9v
YmplY3RCb3VuZGluZ0JveC5jb250YWlucyhsb2NhbFBvaW50KSkgewotICAgICAgICAgICAgICAg
IHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCByb3VuZGVkSW50UG9pbnQobG9jYWxQb2ludCkp
OwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclNWR0ltYWdlOjpp
bWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KikKLXsKLSAgICAvLyBU
aGUgaW1hZ2UgcmVzb3VyY2UgZGVmYXVsdHMgdG8gbnVsbEltYWdlIHVudGlsIHRoZSByZXNvdXJj
ZSBhcnJpdmVzLgotICAgIC8vIFRoaXMgZW1wdHkgaW1hZ2UgbWF5IGJlIGNhY2hlZCBieSBTVkcg
cmVzb3VyY2VzIHdoaWNoIG11c3QgYmUgaW52YWxpZGF0ZWQuCi0gICAgaWYgKFNWR1Jlc291cmNl
cyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRl
ck9iamVjdCh0aGlzKSkKLSAgICAgICAgcmVzb3VyY2VzLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUo
dGhpcyk7Ci0KLSAgICAvLyBFdmVudHVhbGx5IG5vdGlmeSBwYXJlbnQgcmVzb3VyY2VzLCB0aGF0
IHdlJ3ZlIGNoYW5nZWQuCi0gICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQ
YXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbih0aGlzLCBmYWxzZSk7Ci0KLSAgICByZXBhaW50KCk7
Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYgcmVjdHMsIGludCwgaW50KQotewotICAgIC8vIHRoaXMgaXMgY2FsbGVkIGZyb20gcGFp
bnQoKSBhZnRlciB0aGUgbG9jYWxUcmFuc2Zvcm0gaGFzIGFscmVhZHkgYmVlbiBhcHBsaWVkCi0g
ICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgaWYgKCFjb250ZW50UmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJlY3RzLmFwcGVuZChjb250ZW50UmVjdCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHSW1hZ2UuaAkocmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtk
ZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFJlbmRlclNW
R0ltYWdlX2gKLSNkZWZpbmUgUmVuZGVyU1ZHSW1hZ2VfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNs
dWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgotI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0
UmF0aW8uaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgUmVuZGVySW1hZ2VSZXNvdXJjZTsKLWNsYXNzIFNWR0ltYWdlRWxlbWVu
dDsKLQotY2xhc3MgUmVuZGVyU1ZHSW1hZ2UgOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3Qg
ewotcHVibGljOgotICAgIFJlbmRlclNWR0ltYWdlKFNWR0ltYWdlRWxlbWVudCopOwotICAgIHZp
cnR1YWwgflJlbmRlclNWR0ltYWdlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFu
c2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9Ci0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7Ci0KLSAgICBSZW5kZXJJbWFnZVJlc291cmNl
KiBpbWFnZVJlc291cmNlKCkgeyByZXR1cm4gbV9pbWFnZVJlc291cmNlLmdldCgpOyB9Ci0gICAg
Y29uc3QgUmVuZGVySW1hZ2VSZXNvdXJjZSogaW1hZ2VSZXNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW1hZ2VSZXNvdXJjZS5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdJbWFnZSI7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAg
IHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQotCi0gICAgdmlydHVhbCBGbG9hdFJl
Y3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94
OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJl
dHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGlu
Z0JveDsgfQotCi0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYsIGludCB0eCwgaW50IHR5KTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQo
V3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IDApOwotCi0gICAgdmlydHVhbCB2b2lk
IGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50
WCwgaW50IHBhcmVudFkpOwotCi0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7Ci0KLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5z
Zm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0K
LQotICAgIGJvb2wgbV91cGRhdGVDYWNoZWRSZXBhaW50UmVjdCA6IDE7Ci0gICAgYm9vbCBtX25l
ZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5z
Zm9ybTsKLSAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3Qg
bV9yZXBhaW50Qm91bmRpbmdCb3g7Ci0gICAgT3duUHRyPFJlbmRlckltYWdlUmVzb3VyY2U+IG1f
aW1hZ2VSZXNvdXJjZTsKLX07Ci0KLWlubGluZSBSZW5kZXJTVkdJbWFnZSogdG9SZW5kZXJTVkdJ
bWFnZShSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmpl
Y3QtPmlzU1ZHSW1hZ2UoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR0ltYWdl
Kj4ob2JqZWN0KTsKLX0KLQotaW5saW5lIGNvbnN0IFJlbmRlclNWR0ltYWdlKiB0b1JlbmRlclNW
R0ltYWdlKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIEFTU0VSVCghb2JqZWN0
IHx8IG9iamVjdC0+aXNTVkdJbWFnZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
UmVuZGVyU1ZHSW1hZ2UqPihvYmplY3QpOwotfQotCi0vLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25l
IGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCi12b2lkIHRvUmVuZGVyU1ZHSW1hZ2UoY29uc3Qg
UmVuZGVyU1ZHSW1hZ2UqKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFNWRykKLSNlbmRpZiAvLyBSZW5kZXJTVkdJbWFnZV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9u
IDc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
YykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0Lmgi
Ci0KLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZEVs
ZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZW5kZXJTVkdNb2RlbE9iamVjdDo6
UmVuZGVyU1ZHTW9kZWxPYmplY3QoU1ZHU3R5bGVkRWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRl
ck9iamVjdChub2RlKQotewotfQotCi1JbnRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0OjpjbGlw
cGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lcikKLXsKLSAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6Y2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWludENvbnRhaW5lcik7Ci19Ci0KLXZvaWQgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCi17
Ci0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFp
bnRDb250YWluZXIsIHJlcGFpbnRSZWN0LCBmaXhlZCk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6Om1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsIGJvb2wgZml4ZWQgLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0
YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKLXsKLSAgICBTVkdSZW5kZXJTdXBwb3J0OjptYXBM
b2NhbFRvQ29udGFpbmVyKHRoaXMsIHJlcGFpbnRDb250YWluZXIsIGZpeGVkLCB1c2VUcmFuc2Zv
cm1zLCB0cmFuc2Zvcm1TdGF0ZSk7Ci19Ci0KLS8vIENvcGllZCBmcm9tIFJlbmRlckJveCwgdGhp
cyBtZXRob2QgbGlrZWx5IHJlcXVpcmVzIGZ1cnRoZXIgcmVmYWN0b3JpbmcgdG8gd29yayBlYXNp
bHkgZm9yIGJvdGggU1ZHIGFuZCBDU1MgQm94IE1vZGVsIGNvbnRlbnQuCi0vLyBGSVhNRTogVGhp
cyBtYXkgYWxzbyBuZWVkIHRvIG1vdmUgaW50byBTVkdSZW5kZXJTdXBwb3J0IGFzIHRoZSBSZW5k
ZXJCb3ggdmVyc2lvbiBkZXBlbmRzCi0vLyBvbiBib3JkZXJCb3VuZGluZ0JveCgpIHdoaWNoIFNW
RyBSZW5kZXJCb3ggc3ViY2xhc2VzIChsaWtlIFNWR1JlbmRlckJsb2NrKSBkbyBub3QgaW1wbGVt
ZW50LgotSW50UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5kc0ZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFBvaW50KikgY29u
c3QKLXsKLSAgICBJbnRSZWN0IGJveCA9IGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgYWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3coYm94
KTsKLQotICAgIEZsb2F0UXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBsb2NhbFRvQ29udGFp
bmVyUXVhZChGbG9hdFJlY3QoYm94KSwgcmVwYWludENvbnRhaW5lcik7Ci0gICAgcmV0dXJuIGNv
bnRhaW5lclJlbGF0aXZlUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotfQotCi12b2lkIFJl
bmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCwg
aW50KQotewotICAgIC8vIFRoaXMgY29kZSBwYXRoIHNob3VsZCBuZXZlciBiZSB0YWtlbiBmb3Ig
U1ZHLCBhcyB3ZSdyZSBhc3N1bWluZyB1c2VUcmFuc2Zvcm1zPXRydWUgZXZlcnl3aGVyZSwgYWJz
b2x1dGVRdWFkcyBzaG91bGQgYmUgdXNlZC4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
LQotdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRR
dWFkPiYgcXVhZHMpCi17Ci0gICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoc3Ry
b2tlQm91bmRpbmdCb3goKSkpOwotfQotCi12b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjpkZXN0
cm95KCkKLXsKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50RGVzdHJveWVkKHRoaXMpOwot
ICAgIFJlbmRlck9iamVjdDo6ZGVzdHJveSgpOwotfQotCi12b2lkIFJlbmRlclNWR01vZGVsT2Jq
ZWN0OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0
eWxlKiBuZXdTdHlsZSkKLXsKLSAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQp
Ci0gICAgICAgIHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwotICAgIFJlbmRlck9iamVjdDo6
c3R5bGVXaWxsQ2hhbmdlKGRpZmYsIG5ld1N0eWxlKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICBSZW5kZXJPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKGRp
ZmYsIG9sZFN0eWxlKTsKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2Vk
KHRoaXMsIGRpZmYsIHN0eWxlKCkpOwotfQotCi12b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0Ojp1
cGRhdGVGcm9tRWxlbWVudCgpCi17Ci0gICAgUmVuZGVyT2JqZWN0Ojp1cGRhdGVGcm9tRWxlbWVu
dCgpOwotICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRVcGRhdGVkRnJvbUVsZW1lbnQodGhp
cywgc3R5bGUoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBpbnQsIGlu
dCwgSGl0VGVzdEFjdGlvbikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuaAkocmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgUmVuZGVyU1ZHTW9kZWxPYmplY3RfaAotI2RlZmluZSBSZW5kZXJTVkdNb2RlbE9i
amVjdF9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0j
aW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8v
IE1vc3QgcmVuZGVyZXJzIGluIHRoZSBTVkcgcmVuZGVyaW5nIHRyZWUgd2lsbCBpbmhlcml0IGZy
b20gdGhpcyBjbGFzcwotLy8gYnV0IG5vdCBhbGwuIChlLmcuIFJlbmRlclNWR0ZvcmVpZ25PYmpl
Y3QsIFJlbmRlclNWR0Jsb2NrKSB0aHVzIG1ldGhvZHMKLS8vIHJlcXVpcmVkIGJ5IFNWRyByZW5k
ZXJzIG5lZWQgdG8gYmUgZGVjbGFyZWQgb24gUmVuZGVyT2JqZWN0LCBidXQgc2hhcmVkCi0vLyBs
b2dpYyBjYW4gZ28gaW4gdGhpcyBjbGFzcyBvciBpbiBTVkdSZW5kZXJTdXBwb3J0LgotCi1jbGFz
cyBTVkdTdHlsZWRFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdNb2RlbE9iamVjdCA6IHB1Ymxp
YyBSZW5kZXJPYmplY3QgewotcHVibGljOgotICAgIGV4cGxpY2l0IFJlbmRlclNWR01vZGVsT2Jq
ZWN0KFNWR1N0eWxlZEVsZW1lbnQqKTsKLQotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVy
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVk
T3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lcik7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxz
ZSk7Ci0gICAgdmlydHVhbCBJbnRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRQb2ludCopIGNvbnN0OwotCi0gICAg
dmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQg
dHkpOwotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwotCi0gICAgdmlydHVhbCB2b2lkIG1hcExv
Y2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJv
b2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIG5ld1N0eWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotCi1wcml2YXRlOgotICAgIC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBuZXZlciBiZSBjYWxsZWQsIFNWRyB1c2VzIGEgZGlmZmVyZW50IG5vZGVBdFBvaW50
IG1ldGhvZAotICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgaW50IHhJbkNvbnRhaW5lciwgaW50IHlJbkNvbnRhaW5lciwgaW50IGR4UGFy
ZW50VG9Db250YWluZXIsIGludCBkeVBhcmVudFRvQ29udGFpbmVyLCBIaXRUZXN0QWN0aW9uKTsK
LX07Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmNwcAkocmV2aXNpb24gNzUz
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDE2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIK
LQotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCi0j
aW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Rh
dGljIGlubGluZSBSZW5kZXJTVkdSZXNvdXJjZSogcmVxdWVzdFBhaW50aW5nUmVzb3VyY2UoUmVu
ZGVyU1ZHUmVzb3VyY2VNb2RlIG1vZGUsIFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUsIENvbG9yJiBmYWxsYmFja0NvbG9yKQotewotICAgIEFTU0VSVChvYmpl
Y3QpOwotICAgIEFTU0VSVChzdHlsZSk7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIG5vIHN0eWxlIGF0
IGFsbCwgaWdub3JlIGl0LgotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0
eWxlLT5zdmdTdHlsZSgpOwotICAgIGlmICghc3ZnU3R5bGUpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgLy8gSWYgd2UgaGF2ZSBubyBmaWxsL3N0cm9rZSwgcmV0dXJuIDAuCi0gICAgaWYgKG1v
ZGUgPT0gQXBwbHlUb0ZpbGxNb2RlKSB7Ci0gICAgICAgIGlmICghc3ZnU3R5bGUtPmhhc0ZpbGwo
KSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghc3Zn
U3R5bGUtPmhhc1N0cm9rZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
U1ZHUGFpbnQqIHBhaW50ID0gbW9kZSA9PSBBcHBseVRvRmlsbE1vZGUgPyBzdmdTdHlsZS0+Zmls
bFBhaW50KCkgOiBzdmdTdHlsZS0+c3Ryb2tlUGFpbnQoKTsKLSAgICBBU1NFUlQocGFpbnQpOwot
Ci0gICAgU1ZHUGFpbnQ6OlNWR1BhaW50VHlwZSBwYWludFR5cGUgPSBwYWludC0+cGFpbnRUeXBl
KCk7Ci0gICAgaWYgKHBhaW50VHlwZSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9OT05FKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIENvbG9yIGNvbG9yOwotICAgIGlmIChwYWludFR5cGUg
PT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfUkdCQ09MT1IKLSAgICAgICAgfHwgcGFpbnRUeXBl
ID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1JHQkNPTE9SX0lDQ0NPTE9SCi0gICAgICAgIHx8
IHBhaW50VHlwZSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfUkdCQ09MT1IKLSAgICAg
ICAgfHwgcGFpbnRUeXBlID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1VSSV9SR0JDT0xPUl9J
Q0NDT0xPUikKLSAgICAgICAgY29sb3IgPSBwYWludC0+Y29sb3IoKTsKLSAgICBlbHNlIGlmIChw
YWludFR5cGUgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SIHx8IHBhaW50
VHlwZSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfQ1VSUkVOVENPTE9SKQotICAgICAg
ICBjb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7
Ci0KLSAgICBpZiAoc3R5bGUtPmluc2lkZUxpbmsoKSA9PSBJbnNpZGVWaXNpdGVkTGluaykgewot
ICAgICAgICBSZW5kZXJTdHlsZSogdmlzaXRlZFN0eWxlID0gc3R5bGUtPmdldENhY2hlZFBzZXVk
b1N0eWxlKFZJU0lURURfTElOSyk7Ci0gICAgICAgIEFTU0VSVCh2aXNpdGVkU3R5bGUpOwotCi0g
ICAgICAgIGlmIChTVkdQYWludCogdmlzaXRlZFBhaW50ID0gbW9kZSA9PSBBcHBseVRvRmlsbE1v
ZGUgPyB2aXNpdGVkU3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxQYWludCgpIDogdmlzaXRlZFN0eWxl
LT5zdmdTdHlsZSgpLT5zdHJva2VQYWludCgpKSB7Ci0gICAgICAgICAgICAvLyBGb3IgU1ZHX1BB
SU5UVFlQRV9DVVJSRU5UQ09MT1IsICdjb2xvcicgYWxyZWFkeSBjb250YWlucyB0aGUgJ3Zpc2l0
ZWRDb2xvcicuCi0gICAgICAgICAgICBpZiAodmlzaXRlZFBhaW50LT5wYWludFR5cGUoKSA8IFNW
R1BhaW50OjpTVkdfUEFJTlRUWVBFX1VSSV9OT05FICYmIHZpc2l0ZWRQYWludC0+cGFpbnRUeXBl
KCkgIT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SKSB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgQ29sb3ImIHZpc2l0ZWRDb2xvciA9IHZpc2l0ZWRQYWludC0+Y29sb3IoKTsK
LSAgICAgICAgICAgICAgICBpZiAodmlzaXRlZENvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgY29sb3IgPSBDb2xvcih2aXNpdGVkQ29sb3IucmVkKCksIHZpc2l0ZWRDb2xvci5n
cmVlbigpLCB2aXNpdGVkQ29sb3IuYmx1ZSgpLCBjb2xvci5hbHBoYSgpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHRoZSBwcmltYXJ5IHJlc291cmNlIGlz
IGp1c3QgYSBjb2xvciwgcmV0dXJuIGltbWVkaWF0ZWx5LgotICAgIFJlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvciogY29sb3JSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xp
ZFBhaW50aW5nUmVzb3VyY2UoKTsKLSAgICBpZiAocGFpbnRUeXBlIDwgU1ZHUGFpbnQ6OlNWR19Q
QUlOVFRZUEVfVVJJX05PTkUpIHsKLSAgICAgICAgLy8gSWYgYW4gaW52YWxpZCBmaWxsIGNvbG9y
IGlzIHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gZmlsbC9zdHJva2U9Im5vbmUiLgotICAgICAgICBp
ZiAoIWNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGNv
bG9yUmVzb3VyY2UtPnNldENvbG9yKGNvbG9yKTsKLSAgICAgICAgcmV0dXJuIGNvbG9yUmVzb3Vy
Y2U7Ci0gICAgfQotCi0gICAgLy8gSWYgbm8gcmVzb3VyY2VzIGFyZSBhc3NvY2lhdGVkIHdpdGgg
dGhlIGdpdmVuIHJlbmRlcmVyLCByZXR1cm4gdGhlIGNvbG9yIHJlc291cmNlLgotICAgIFNWR1Jl
c291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0Zv
clJlbmRlck9iamVjdChvYmplY3QpOwotICAgIGlmICghcmVzb3VyY2VzKSB7Ci0gICAgICAgIC8v
IElmIGEgcGFpbnQgc2VydmVyIGlzIHNwZWNpZmllZCwgYW5kIG5vIG9yIGFuIGludmFsaWQgZmFs
bGJhY2sgY29sb3IgaXMgZ2l2ZW4sIGRlZmF1bHQgdG8gZmlsbC9zdHJva2U9ImJsYWNrIi4KLSAg
ICAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBjb2xvciA9IENvbG9yOjpi
bGFjazsKLQotICAgICAgICBjb2xvclJlc291cmNlLT5zZXRDb2xvcihjb2xvcik7Ci0gICAgICAg
IHJldHVybiBjb2xvclJlc291cmNlOwotICAgIH0KLQotICAgIC8vIElmIHRoZSByZXF1ZXN0ZWQg
cmVzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSwgcmV0dXJuIHRoZSBjb2xvciByZXNvdXJjZS4KLSAg
ICBSZW5kZXJTVkdSZXNvdXJjZSogdXJpUmVzb3VyY2UgPSBtb2RlID09IEFwcGx5VG9GaWxsTW9k
ZSA/IHJlc291cmNlcy0+ZmlsbCgpIDogcmVzb3VyY2VzLT5zdHJva2UoKTsKLSAgICBpZiAoIXVy
aVJlc291cmNlKSB7Ci0gICAgICAgIC8vIElmIGEgcGFpbnQgc2VydmVyIGlzIHNwZWNpZmllZCwg
YW5kIG5vIG9yIGFuIGludmFsaWQgZmFsbGJhY2sgY29sb3IgaXMgZ2l2ZW4sIGRlZmF1bHQgdG8g
ZmlsbC9zdHJva2U9ImJsYWNrIi4KLSAgICAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0gICAg
ICAgICAgICBjb2xvciA9IENvbG9yOjpibGFjazsKLQotICAgICAgICBjb2xvclJlc291cmNlLT5z
ZXRDb2xvcihjb2xvcik7Ci0gICAgICAgIHJldHVybiBjb2xvclJlc291cmNlOwotICAgIH0KLQot
ICAgIC8vIFRoZSBwYWludCBzZXJ2ZXIgcmVzb3VyY2UgZXhpc3RzLCB0aG91Z2ggaXQgbWF5IGJl
IGludmFsaWQgKHBhdHRlcm4gd2l0aCB3aWR0aC9oZWlnaHQ9MCkuIFBhc3MgdGhlIGZhbGxiYWNr
IGNvbG9yIHRvIG91ciBjYWxsZXIKLSAgICAvLyBzbyBpdCBjYW4gdXNlIHRoZSBzb2xpZCBjb2xv
ciBwYWludGluZyByZXNvdXJjZSwgaWYgYXBwbHlSZXNvdXJjZSgpIG9uIHRoZSBVUkkgcmVzb3Vy
Y2UgZmFpbGVkLgotICAgIGZhbGxiYWNrQ29sb3IgPSBjb2xvcjsKLSAgICByZXR1cm4gdXJpUmVz
b3VyY2U7Ci19Ci0KLVJlbmRlclNWR1Jlc291cmNlKiBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBh
aW50aW5nUmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSwgQ29sb3ImIGZhbGxiYWNrQ29sb3IpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3RQYWludGlu
Z1Jlc291cmNlKEFwcGx5VG9GaWxsTW9kZSwgb2JqZWN0LCBzdHlsZSwgZmFsbGJhY2tDb2xvcik7
Ci19Ci0KLVJlbmRlclNWR1Jlc291cmNlKiBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRp
bmdSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
LCBDb2xvciYgZmFsbGJhY2tDb2xvcikKLXsKLSAgICByZXR1cm4gcmVxdWVzdFBhaW50aW5nUmVz
b3VyY2UoQXBwbHlUb1N0cm9rZU1vZGUsIG9iamVjdCwgc3R5bGUsIGZhbGxiYWNrQ29sb3IpOwot
fQotCi1SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIFJlbmRlclNWR1Jlc291cmNlOjpzaGFy
ZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKQotewotICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IqIHNfc2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlID0gMDsKLSAgICBpZiAo
IXNfc2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKQotICAgICAgICBzX3NoYXJlZFNvbGlkUGFp
bnRpbmdSZXNvdXJjZSA9IG5ldyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I7Ci0gICAgcmV0
dXJuIHNfc2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlOwotfQotCi12b2lkIFJlbmRlclNWR1Jl
c291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGJvb2wgbmVlZHNMYXlvdXQpCi17Ci0gICAgQVNTRVJUKG9iamVjdCk7
Ci0gICAgaWYgKG5lZWRzTGF5b3V0KQotICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRy
dWUpOwotCi0gICAgLy8gSW52YWxpZGF0ZSByZXNvdXJjZXMgaW4gYW5jZXN0b3IgY2hhaW4sIGlm
IG5lZWRlZC4KLSAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBvYmplY3QtPnBhcmVudCgpOwot
ICAgIHdoaWxlIChjdXJyZW50KSB7Ci0gICAgICAgIGlmIChjdXJyZW50LT5pc1NWR1Jlc291cmNl
Q29udGFpbmVyKCkpIHsKLSAgICAgICAgICAgIGN1cnJlbnQtPnRvUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXIoKS0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50KCk7Ci0g
ICAgfQotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlLmgJKHJldmlzaW9uIDc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAw
OS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlX2gK
LSNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRl
ICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9u
cy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gUmVuZGVyU1ZHUmVzb3VyY2VUeXBl
IHsKLSAgICBNYXNrZXJSZXNvdXJjZVR5cGUsCi0gICAgTWFya2VyUmVzb3VyY2VUeXBlLAotICAg
IFBhdHRlcm5SZXNvdXJjZVR5cGUsCi0gICAgTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGUsCi0g
ICAgUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGUsCi0gICAgU29saWRDb2xvclJlc291cmNlVHlw
ZSwKLSAgICBGaWx0ZXJSZXNvdXJjZVR5cGUsCi0gICAgQ2xpcHBlclJlc291cmNlVHlwZQotfTsK
LQotZW51bSBSZW5kZXJTVkdSZXNvdXJjZU1vZGUgewotICAgIEFwcGx5VG9EZWZhdWx0TW9kZSA9
IDEgPDwgMCwgLy8gdXNlZCBmb3IgYWxsIHJlc291cmNlcyBleGNlcHQgZ3JhZGllbnQvcGF0dGVy
bgotICAgIEFwcGx5VG9GaWxsTW9kZSAgICA9IDEgPDwgMSwKLSAgICBBcHBseVRvU3Ryb2tlTW9k
ZSAgPSAxIDw8IDIsCi0gICAgQXBwbHlUb1RleHRNb2RlICAgID0gMSA8PCAzIC8vIHVzZWQgaW4g
Y29tYmluYXRpb24gd2l0aCBBcHBseVRve0ZpbGx8U3Ryb2tlfU1vZGUKLX07Ci0KLWNsYXNzIENv
bG9yOwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgUGF0
aDsKLWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclN0eWxlOwotY2xhc3MgUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yOwotCi1jbGFzcyBSZW5kZXJTVkdSZXNvdXJjZSB7Ci1wdWJs
aWM6Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2UoKSB7IH0KLSAgICB2aXJ0dWFsIH5SZW5kZXJTVkdS
ZXNvdXJjZSgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbENsaWVudHNGcm9tQ2Fj
aGUoYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxp
ZGF0aW9uID0gdHJ1ZSkgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVu
ZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hv
cnQgcmVzb3VyY2VNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3Qg
UGF0aCopIHsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVu
ZGVyT2JqZWN0KikgPSAwOwotCi0gICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVz
b3VyY2VUeXBlKCkgY29uc3QgPSAwOwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgUmVuZGVyZXI+Ci0g
ICAgUmVuZGVyZXIqIGNhc3QoKQotICAgIHsKLSAgICAgICAgaWYgKFJlbmRlcmVyOjpzX3Jlc291
cmNlVHlwZSA9PSByZXNvdXJjZVR5cGUoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxSZW5kZXJlcio+KHRoaXMpOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8v
IEhlbHBlciB1dGlsaXRpZXMgdXNlZCBpbiB0aGUgcmVuZGVyIHRyZWUgdG8gYWNjZXNzIHJlc291
cmNlcyB1c2VkIGZvciBwYWludGluZyBzaGFwZXMvdGV4dCAoZ3JhZGllbnRzICYgcGF0dGVybnMg
JiBzb2xpZCBjb2xvcnMgb25seSkKLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQ
YWludGluZ1Jlc291cmNlKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiwgQ29sb3Im
IGZhbGxiYWNrQ29sb3IpOwotICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSosIENvbG9yJiBm
YWxsYmFja0NvbG9yKTsKLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBz
aGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKLQotICAgIHN0YXRpYyB2b2lkIG1hcmtGb3JM
YXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihSZW5kZXJPYmplY3QqLCBib29sIG5l
ZWRzTGF5b3V0ID0gdHJ1ZSk7Ci19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmNwcAkocmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNDkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgotI2luY2x1ZGUg
IlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHQ2xpcFBhdGhFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKLSNpbmNs
dWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRl
ICJTVkdSZXNvdXJjZXMuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdVbml0VHlw
ZXMuaCIKLSNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCi0jaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6c19yZXNvdXJjZVR5cGUgPSBDbGlwcGVyUmVzb3VyY2VU
eXBlOwotCi1SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
cihTVkdDbGlwUGF0aEVsZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lcihub2RlKQotICAgICwgbV9pbnZhbGlkYXRpb25CbG9ja2VkKGZhbHNlKQotewotfQotCi1S
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6On5SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIoKQotewot
ICAgIGlmIChtX2NsaXBwZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkZWxl
dGVBbGxWYWx1ZXMobV9jbGlwcGVyKTsKLSAgICBtX2NsaXBwZXIuY2xlYXIoKTsKLX0KLQotdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9v
bCBtYXJrRm9ySW52YWxpZGF0aW9uKQotewotICAgIGlmIChtX2ludmFsaWRhdGlvbkJsb2NrZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpcEJvdW5kYXJpZXMgPSBGbG9hdFJlY3QoKTsK
LSAgICBpZiAoIW1fY2xpcHBlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVz
KG1fY2xpcHBlcik7Ci0gICAgICAgIG1fY2xpcHBlci5jbGVhcigpOwotICAgIH0KLQotICAgIG1h
cmtBbGxDbGllbnRzRm9ySW52YWxpZGF0aW9uKG1hcmtGb3JJbnZhbGlkYXRpb24gPyBMYXlvdXRB
bmRCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7Ci19Ci0K
LXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpyZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyT2JqZWN0KiBjbGllbnQsIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbikKLXsKLSAgICBBU1NF
UlQoY2xpZW50KTsKLSAgICBpZiAobV9pbnZhbGlkYXRpb25CbG9ja2VkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9jbGlwcGVyLmNvbnRhaW5zKGNsaWVudCkpCi0gICAgICAgIGRlbGV0
ZSBtX2NsaXBwZXIudGFrZShjbGllbnQpOwotCi0gICAgbWFya0NsaWVudEZvckludmFsaWRhdGlv
bihjbGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDog
UGFyZW50T25seUludmFsaWRhdGlvbik7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSosIEdy
YXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkKLXsK
LSAgICBBU1NFUlQob2JqZWN0KTsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0jaWZuZGVmIE5ERUJV
RwotICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgPT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHJlc291cmNlTW9kZSk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBh
cHBseUNsaXBwaW5nVG9Db250ZXh0KG9iamVjdCwgb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgp
LCBvYmplY3QtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCksIGNvbnRleHQpOwotfQot
Ci1ib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6cGF0aE9ubHlDbGlwcGluZyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gpCi17
Ci0gICAgLy8gSWYgdGhlIGN1cnJlbnQgY2xpcC1wYXRoIGdldHMgY2xpcHBlZCBpdHNlbGYsIHdl
IGhhdmUgdG8gZmFsbGJhY2sgdG8gbWFza2luZy4KLSAgICBpZiAoIXN0eWxlKCktPnN2Z1N0eWxl
KCktPmNsaXBwZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIFdpbmRSdWxlIGNsaXBSdWxlID0gUlVMRV9OT05aRVJPOwotICAgIFBhdGggY2xpcFBhdGgg
PSBQYXRoKCk7Ci0KLSAgICAvLyBJZiBjbGlwLXBhdGggb25seSBjb250YWlucyBvbmUgdmlzaWJs
ZSBzaGFwZSBvciBwYXRoLCB3ZSBjYW4gdXNlIHBhdGgtYmFzZWQgY2xpcHBpbmcuIEludmlzaWJs
ZQotICAgIC8vIHNoYXBlcyBkb24ndCBhZmZlY3QgdGhlIGNsaXBwaW5nIGFuZCBjYW4gYmUgaWdu
b3JlZC4gSWYgY2xpcC1wYXRoIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUKLSAgICAvLyB2aXNpYmxl
IHNoYXBlLCB0aGUgYWRkaXRpdmUgY2xpcHBpbmcgbWF5IG5vdCB3b3JrLCBjYXVzZWQgYnkgdGhl
IGNsaXBSdWxlLiBFdmVuT2RkCi0gICAgLy8gYXMgd2VsbCBhcyBOb25aZXJvIGNhbiBjYXVzZSBz
ZWxmLWNsaXBwaW5nIG9mIHRoZSBlbGVtZW50cy4KLSAgICAvLyBTZWUgYWxzbyBodHRwOi8vd3d3
LnczLm9yZy9UUi9TVkcvcGFpbnRpbmcuaHRtbCNGaWxsUnVsZVByb3BlcnR5Ci0gICAgZm9yIChO
b2RlKiBjaGlsZE5vZGUgPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGROb2RlOyBjaGlsZE5v
ZGUgPSBjaGlsZE5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJlcikK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBPbmx5IHNoYXBlcyBvciBwYXRocyBh
cmUgc3VwcG9ydGVkIGZvciBkaXJlY3QgY2xpcHBpbmcuIFdlIG5lZWQgdG8gZmFsbGJhY2sgdG8g
bWFza2luZyBmb3IgdGV4dHMuCi0gICAgICAgIGlmIChyZW5kZXJlci0+aXNTVkdUZXh0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0Vs
ZW1lbnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVk
VHJhbnNmb3JtYWJsZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50KiBzdHlsZWQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCo+KGNoaWxkTm9kZSk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwotICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5kaXNw
bGF5KCkgPT0gTk9ORSB8fCBzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCi0gICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9
IHN0eWxlLT5zdmdTdHlsZSgpOwotICAgICAgICAvLyBDdXJyZW50IHNoYXBlIGluIGNsaXAtcGF0
aCBnZXRzIGNsaXBwZWQgdG9vLiBGYWxsYmFjayB0byBtYXNraW5nLgotICAgICAgICBpZiAoIXN2
Z1N0eWxlLT5jbGlwcGVyUmVzb3VyY2UoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIG1hc2tpbmcsIGlmIHRoZXJlIGlzIG1vcmUg
dGhhbiBvbmUgY2xpcHBpbmcgcGF0aC4KLSAgICAgICAgaWYgKGNsaXBQYXRoLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgc3R5bGVkLT50b0NsaXBQYXRoKGNsaXBQYXRoKTsKLSAgICAgICAgICAg
IGNsaXBSdWxlID0gc3ZnU3R5bGUtPmNsaXBSdWxlKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBPbmx5IG9uZSB2aXNpYmxlIHNoYXBl
L3BhdGggd2FzIGZvdW5kLiBEaXJlY3RseSBjb250aW51ZSBjbGlwcGluZyBhbmQgdHJhbnNmb3Jt
IHRoZSBjb250ZW50IHRvIHVzZXJzcGFjZSBpZiBuZWNlc3NhcnkuCi0gICAgaWYgKHN0YXRpY19j
YXN0PFNWR0NsaXBQYXRoRWxlbWVudCo+KG5vZGUoKSktPmNsaXBQYXRoVW5pdHMoKSA9PSBTVkdV
bml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKLSAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShvYmpl
Y3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7Ci0gICAgICAgIHRyYW5z
Zm9ybS5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91
bmRpbmdCb3guaGVpZ2h0KCkpOwotICAgICAgICBjbGlwUGF0aC50cmFuc2Zvcm0odHJhbnNmb3Jt
KTsKLSAgICB9Ci0gICAgLy8gVGhlIFNWRyBzcGVjaWZpY2F0aW9uIHdhbnRzIHVzIHRvIGNsaXAg
ZXZlcnl0aGluZywgaWYgY2xpcC1wYXRoIGRvZXNuJ3QgaGF2ZSBhIGNoaWxkLgotICAgIGlmIChj
bGlwUGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIGNsaXBQYXRoLmFkZFJlY3QoRmxvYXRSZWN0KCkp
OwotICAgIGNvbnRleHQtPmNsaXBQYXRoKGNsaXBQYXRoLCBjbGlwUnVsZSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5n
VG9Db250ZXh0KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJv
dW5kaW5nQm94LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiByZXBhaW50UmVjdCwgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0KQotewotICAgIGlmICghbV9jbGlwcGVyLmNvbnRhaW5zKG9iamVjdCkpCi0gICAgICAg
IG1fY2xpcHBlci5zZXQob2JqZWN0LCBuZXcgQ2xpcHBlckRhdGEpOwotCi0gICAgYm9vbCBzaG91
bGRDcmVhdGVDbGlwRGF0YSA9IGZhbHNlOwotICAgIENsaXBwZXJEYXRhKiBjbGlwcGVyRGF0YSA9
IG1fY2xpcHBlci5nZXQob2JqZWN0KTsKLSAgICBpZiAoIWNsaXBwZXJEYXRhLT5jbGlwTWFza0lt
YWdlKSB7Ci0gICAgICAgIGlmIChwYXRoT25seUNsaXBwaW5nKGNvbnRleHQsIG9iamVjdEJvdW5k
aW5nQm94KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBzaG91bGRDcmVhdGVD
bGlwRGF0YSA9IHRydWU7Ci0gICAgfQotCi0gICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJh
bnNmb3JtOwotICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9u
VG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKG9iamVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0p
OwotCi0gICAgRmxvYXRSZWN0IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVHJhbnNmb3Jt
Lm1hcFJlY3QocmVwYWludFJlY3QpOwotICAgIEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1dGVUYXJn
ZXRSZWN0ID0gU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZv
clJlbmRlcmVyKG9iamVjdCwgYWJzb2x1dGVUYXJnZXRSZWN0KTsKLQotICAgIGlmIChzaG91bGRD
cmVhdGVDbGlwRGF0YSAmJiAhY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgaWYgKCFTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihhYnNv
bHV0ZVRhcmdldFJlY3QsIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIGNsaXBwZXJEYXRhLT5j
bGlwTWFza0ltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHQqIG1hc2tDb250ZXh0ID0gY2xpcHBlckRh
dGEtPmNsaXBNYXNrSW1hZ2UtPmNvbnRleHQoKTsKLSAgICAgICAgQVNTRVJUKG1hc2tDb250ZXh0
KTsKLQotICAgICAgICAvLyBUaGUgc2F2ZS9yZXN0b3JlIHBhaXIgaXMgbmVlZGVkIGZvciBjbGlw
VG9JbWFnZUJ1ZmZlciAtIGl0IGRvZXNuJ3Qgd29yayB3aXRob3V0IGl0IG9uIG5vbi1DZyBwbGF0
Zm9ybXMuCi0gICAgICAgIG1hc2tDb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIG1hc2tDb250ZXh0
LT50cmFuc2xhdGUoLWNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QueCgpLCAtY2xhbXBlZEFic29s
dXRlVGFyZ2V0UmVjdC55KCkpOwotICAgICAgICBtYXNrQ29udGV4dC0+Y29uY2F0Q1RNKGFic29s
dXRlVHJhbnNmb3JtKTsKLQotICAgICAgICAvLyBjbGlwUGF0aCBjYW4gYWxzbyBiZSBjbGlwcGVk
IGJ5IGFub3RoZXIgY2xpcFBhdGguCi0gICAgICAgIGlmIChTVkdSZXNvdXJjZXMqIHJlc291cmNl
cyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhp
cykpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIg
PSByZXNvdXJjZXMtPmNsaXBwZXIoKSkgewotICAgICAgICAgICAgICAgIGlmICghY2xpcHBlci0+
YXBwbHlDbGlwcGluZ1RvQ29udGV4dCh0aGlzLCBvYmplY3RCb3VuZGluZ0JveCwgcmVwYWludFJl
Y3QsIG1hc2tDb250ZXh0KSkgewotICAgICAgICAgICAgICAgICAgICBtYXNrQ29udGV4dC0+cmVz
dG9yZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZHJhd0NvbnRlbnRJbnRv
TWFza0ltYWdlKGNsaXBwZXJEYXRhLCBvYmplY3RCb3VuZGluZ0JveCk7Ci0gICAgICAgIG1hc2tD
b250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgfQotCi0gICAgaWYgKCFjbGlwcGVyRGF0YS0+Y2xpcE1h
c2tJbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU1ZHSW1hZ2VCdWZmZXJUb29s
czo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29udGV4dCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNsYW1wZWRB
YnNvbHV0ZVRhcmdldFJlY3QsIGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmRyYXdDb250ZW50
SW50b01hc2tJbWFnZShDbGlwcGVyRGF0YSogY2xpcHBlckRhdGEsIGNvbnN0IEZsb2F0UmVjdCYg
b2JqZWN0Qm91bmRpbmdCb3gpCi17Ci0gICAgQVNTRVJUKGNsaXBwZXJEYXRhKTsKLSAgICBBU1NF
UlQoY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBt
YXNrQ29udGV4dCA9IGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlLT5jb250ZXh0KCk7Ci0gICAg
QVNTRVJUKG1hc2tDb250ZXh0KTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBtYXNrQ29udGVudFRy
YW5zZm9ybWF0aW9uOwotICAgIFNWR0NsaXBQYXRoRWxlbWVudCogY2xpcFBhdGggPSBzdGF0aWNf
Y2FzdDxTVkdDbGlwUGF0aEVsZW1lbnQqPihub2RlKCkpOwotICAgIGlmIChjbGlwUGF0aC0+Y2xp
cFBhdGhVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElO
R0JPWCkgewotICAgICAgICBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZShvYmpl
Y3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7Ci0gICAgICAgIG1hc2tD
b250ZW50VHJhbnNmb3JtYXRpb24uc2NhbGVOb25Vbmlmb3JtKG9iamVjdEJvdW5kaW5nQm94Lndp
ZHRoKCksIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpKTsKLSAgICAgICAgbWFza0NvbnRleHQt
PmNvbmNhdENUTShtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uKTsKLSAgICB9Ci0KLSAgICAvLyBE
cmF3IGFsbCBjbGlwUGF0aCBjaGlsZHJlbiBpbnRvIGEgZ2xvYmFsIG1hc2suCi0gICAgZm9yIChO
b2RlKiBjaGlsZE5vZGUgPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGROb2RlOyBjaGlsZE5v
ZGUgPSBjaGlsZE5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFjaGlsZE5vZGUt
PmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGROb2RlKS0+
aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgICAgIGlmICghc3R5
bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFdpbmRSdWxlIG5ld0Ns
aXBSdWxlID0gc3R5bGUtPnN2Z1N0eWxlKCktPmNsaXBSdWxlKCk7Ci0gICAgICAgIGJvb2wgaXNV
c2VFbGVtZW50ID0gcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKTsKLSAg
ICAgICAgaWYgKGlzVXNlRWxlbWVudCkgewotICAgICAgICAgICAgU1ZHVXNlRWxlbWVudCogdXNl
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1VzZUVsZW1lbnQqPihjaGlsZE5vZGUpOwotICAgICAg
ICAgICAgcmVuZGVyZXIgPSB1c2VFbGVtZW50LT5yZW5kZXJlckNsaXBDaGlsZCgpOwotICAgICAg
ICAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGlmICghdXNlRWxlbWVudC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpjbGlwX3J1bGVBdHRy
KSkKLSAgICAgICAgICAgICAgICBuZXdDbGlwUnVsZSA9IHJlbmRlcmVyLT5zdHlsZSgpLT5zdmdT
dHlsZSgpLT5jbGlwUnVsZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT25seSBzaGFwZXMs
IHBhdGhzIGFuZCB0ZXh0cyBhcmUgYWxsb3dlZCBmb3IgY2xpcHBpbmcuCi0gICAgICAgIGlmICgh
cmVuZGVyZXItPmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBTYXZlIHRoZSBvbGQgUmVuZGVyU3R5bGUgb2Yg
dGhlIGN1cnJlbnQgb2JqZWN0IGZvciByZXN0b3JpbmcgYWZ0ZXIgZHJhd2luZwotICAgICAgICAv
LyBpdCB0byB0aGUgTWFza0ltYWdlLiBUaGUgbmV3IGludGVybWVkaWF0ZSBSZW5kZXJTdHlsZSBu
ZWVkcyB0byBpbmhlcml0IGZyb20KLSAgICAgICAgLy8gdGhlIG9sZCBvbmUuCi0gICAgICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gb2xkUmVuZGVyU3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKLSAg
ICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdSZW5kZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpj
bG9uZShvbGRSZW5kZXJTdHlsZS5nZXQoKSk7Ci0gICAgICAgIFNWR1JlbmRlclN0eWxlKiBzdmdT
dHlsZSA9IG5ld1JlbmRlclN0eWxlLmdldCgpLT5hY2Nlc3NTVkdTdHlsZSgpOwotICAgICAgICBz
dmdTdHlsZS0+c2V0RmlsbFBhaW50KFNWR1BhaW50OjpkZWZhdWx0RmlsbCgpKTsKLSAgICAgICAg
c3ZnU3R5bGUtPnNldFN0cm9rZVBhaW50KFNWR1BhaW50OjpkZWZhdWx0U3Ryb2tlKCkpOwotICAg
ICAgICBzdmdTdHlsZS0+c2V0RmlsbFJ1bGUobmV3Q2xpcFJ1bGUpOwotICAgICAgICBuZXdSZW5k
ZXJTdHlsZS5nZXQoKS0+c2V0T3BhY2l0eSgxLjBmKTsKLSAgICAgICAgc3ZnU3R5bGUtPnNldEZp
bGxPcGFjaXR5KDEuMGYpOwotICAgICAgICBzdmdTdHlsZS0+c2V0U3Ryb2tlT3BhY2l0eSgxLjBm
KTsKLSAgICAgICAgc3ZnU3R5bGUtPnNldEZpbHRlclJlc291cmNlKFN0cmluZygpKTsKLSAgICAg
ICAgc3ZnU3R5bGUtPnNldE1hc2tlclJlc291cmNlKFN0cmluZygpKTsKLQotICAgICAgICAvLyBU
aGUgc2V0U3R5bGUoKSBjYWxsIHJlc3VsdHMgaW4gYSBzdHlsZURpZENoYW5nZSgpIGNhbGwsIHdo
aWNoIGluIHR1cm4gaW52YWxpZGF0aW9ucyB0aGUgcmVzb3VyY2VzLgotICAgICAgICAvLyBBcyB3
ZSdyZSBtdXRhdGluZyB0aGUgcmVzb3VyY2Ugb24gcHVycG9zZSwgYmxvY2sgdXBkYXRlcyB1bnRp
bCB3ZSd2ZSByZXNldHRlZCB0aGUgc3R5bGUgYWdhaW4uCi0gICAgICAgIG1faW52YWxpZGF0aW9u
QmxvY2tlZCA9IHRydWU7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXRTdHlsZShuZXdSZW5kZXJTdHls
ZS5yZWxlYXNlKCkpOwotCi0gICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgPHVzZT4gZWxlbWVu
dCwgd2Ugb2J0YWluZWQgaXRzIHJlbmRlcmVyZSBhYm92ZSwgdG8gcmV0cmlldmUgaXRzIGNsaXBS
dWxlLgotICAgICAgICAvLyBXZSBoYXZlIHRvIHBhc3MgdGhlIDx1c2U+IHJlbmRlcmVyIGl0c2Vs
ZiB0byByZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcigpIHRvIGFwcGx5IGl0J3MgeC95L3RyYW5z
Zm9ybS9ldGMuIHZhbHVlcyB3aGVuIHJlbmRlcmluZy4KLSAgICAgICAgLy8gU28gaWYgaXNVc2VF
bGVtZW50IGlzIHRydWUsIHJlZmV0Y2ggdGhlIGNoaWxkTm9kZS0+cmVuZGVyZXIoKSwgYXMgcmVu
ZGVyZXIgZ290IG92ZXJyaWRlbiBhYm92ZS4KLSAgICAgICAgU1ZHSW1hZ2VCdWZmZXJUb29sczo6
cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UuZ2V0
KCksIGlzVXNlRWxlbWVudCA/IGNoaWxkTm9kZS0+cmVuZGVyZXIoKSA6IHJlbmRlcmVyLCBtYXNr
Q29udGVudFRyYW5zZm9ybWF0aW9uKTsKLQotICAgICAgICByZW5kZXJlci0+c2V0U3R5bGUob2xk
UmVuZGVyU3R5bGUucmVsZWFzZSgpKTsKLSAgICAgICAgbV9pbnZhbGlkYXRpb25CbG9ja2VkID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyOjpjYWxjdWxhdGVDbGlwQ29udGVudFJlcGFpbnRSZWN0KCkKLXsKLSAgICAv
LyBUaGlzIGlzIGEgcm91Z2ggaGV1cmlzdGljIHRvIGFwcHJhaXNlIHRoZSBjbGlwIHNpemUgYW5k
IGRvZXNuJ3QgY29uc2lkZXIgY2xpcCBvbiBjbGlwLgotICAgIGZvciAoTm9kZSogY2hpbGROb2Rl
ID0gbm9kZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkTm9kZTsgY2hpbGROb2RlID0gY2hpbGROb2Rl
LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGls
ZE5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQo
KSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwg
IXJlbmRlcmVyKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcmVuZGVyZXIt
PmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NW
R1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgICAgIGlmICgh
c3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNpYmlsaXR5KCkg
IT0gVklTSUJMRSkKLSAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9jbGlwQm91bmRh
cmllcy51bml0ZShyZW5kZXJlci0+bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLm1hcFJlY3QocmVu
ZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKLSAgICB9Ci19Ci0KLWJv
b2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpoaXRUZXN0Q2xpcENvbnRlbnQoY29uc3QgRmxv
YXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRQb2ludCYgbm9kZUF0UG9pbnQp
Ci17Ci0gICAgRmxvYXRQb2ludCBwb2ludCA9IG5vZGVBdFBvaW50OwotICAgIGlmICghU1ZHUmVu
ZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYSh0aGlzLCBwb2ludCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChzdGF0aWNfY2FzdDxTVkdDbGlwUGF0aEVsZW1lbnQqPihu
b2RlKCkpLT5jbGlwUGF0aFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YKSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0g
ICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgpLCBvYmplY3RC
b3VuZGluZ0JveC55KCkpOwotICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKG9iamVj
dEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpKTsKLSAgICAg
ICAgcG9pbnQgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50KTsKLSAgICB9Ci0K
LSAgICBmb3IgKE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZE5v
ZGU7IGNoaWxkTm9kZSA9IGNoaWxkTm9kZS0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2RlLT5yZW5kZXJlcigpOwotICAgICAgICBpZiAo
IWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihj
aGlsZE5vZGUpLT5pc1N0eWxlZCgpIHx8ICFyZW5kZXJlcikKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1NWR1BhdGgoKSAmJiAhcmVuZGVyZXItPmlzU1ZH
VGV4dCgpICYmICFyZW5kZXJlci0+aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEludFBvaW50IGhpdFBvaW50OwotICAgICAgICBI
aXRUZXN0UmVzdWx0IHJlc3VsdChoaXRQb2ludCk7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+bm9k
ZUF0RmxvYXRQb2ludChIaXRUZXN0UmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6U1ZHQ2xpcENvbnRl
bnQpLCByZXN1bHQsIHBvaW50LCBIaXRUZXN0Rm9yZWdyb3VuZCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUZsb2F0UmVjdCBSZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KiBv
YmplY3QpCi17Ci0gICAgLy8gUmVzb3VyY2Ugd2FzIG5vdCBsYXlvdXRlZCB5ZXQuIEdpdmUgYmFj
ayB0aGUgYm91bmRpbmdCb3ggb2YgdGhlIG9iamVjdC4KLSAgICBpZiAoc2VsZk5lZWRzTGF5b3V0
KCkpCi0gICAgICAgIHJldHVybiBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7Ci0gICAgCi0g
ICAgaWYgKG1fY2xpcEJvdW5kYXJpZXMuaXNFbXB0eSgpKQotICAgICAgICBjYWxjdWxhdGVDbGlw
Q29udGVudFJlcGFpbnRSZWN0KCk7Ci0KLSAgICBpZiAoc3RhdGljX2Nhc3Q8U1ZHQ2xpcFBhdGhF
bGVtZW50Kj4obm9kZSgpKS0+Y2xpcFBhdGhVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VO
SVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAgICAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91
bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7Ci0gICAgICAgIEFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91
bmRpbmdCb3gueCgpLCBvYmplY3RCb3VuZGluZ0JveC55KCkpOwotICAgICAgICB0cmFuc2Zvcm0u
c2NhbGVOb25Vbmlmb3JtKG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJvdW5kaW5n
Qm94LmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS5tYXBSZWN0KG1fY2xpcEJv
dW5kYXJpZXMpOwotICAgIH0KLQotICAgIHJldHVybiBtX2NsaXBCb3VuZGFyaWVzOwotfQotCi19
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaAkocmV2aXNpb24gNzUzNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZu
ZGVmIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcl9oCi0jZGVmaW5lIFJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlcl9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR0NsaXBQYXRoRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IENsaXBw
ZXJEYXRhIDogRmFzdEFsbG9jQmFzZSB7Ci0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBjbGlwTWFz
a0ltYWdlOwotfTsKLQotY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyIDogcHVibGljIFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIoU1ZHQ2xpcFBhdGhFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyKCk7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCB7IHJldHVybiAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyIjsgfQotCi0gICAgdmlydHVh
bCB2b2lkIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9u
ID0gdHJ1ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJP
YmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKLQotICAgIHZpcnR1YWwg
Ym9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3ND
b250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCBGbG9h
dFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKTsKLQotICAgIHZpcnR1YWwg
UmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIENsaXBw
ZXJSZXNvdXJjZVR5cGU7IH0KLSAgICAKLSAgICBib29sIGhpdFRlc3RDbGlwQ29udGVudChjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0KLSAgICBTVkdVbml0VHlwZXM6OlNW
R1VuaXRUeXBlIGNsaXBQYXRoVW5pdHMoKSBjb25zdCB7IHJldHVybiB0b1VuaXRUeXBlKHN0YXRp
Y19jYXN0PFNWR0NsaXBQYXRoRWxlbWVudCo+KG5vZGUoKSktPmNsaXBQYXRoVW5pdHMoKSk7IH0K
LQotICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgc19yZXNvdXJjZVR5cGU7Ci1wcml2
YXRlOgotICAgIC8vIGNsaXBQYXRoIGNhbiBiZSBjbGlwcGVkIHRvbywgYnV0IGRvbid0IGhhdmUg
YSBib3VuZGluZ0JveCBvciByZXBhaW50UmVjdC4gU28gd2UgY2FuJ3QgY2FsbAotICAgIC8vIGFw
cGx5UmVzb3VyY2UgZGlyZWN0bHkgYW5kIHVzZSB0aGUgcmVjdHMgZnJvbSB0aGUgb2JqZWN0LCBz
aW5jZSB0aGV5IGFyZSBlbXB0eSBmb3IgUmVuZGVyU1ZHUmVzb3VyY2VzCi0gICAgYm9vbCBhcHBs
eUNsaXBwaW5nVG9Db250ZXh0KFJlbmRlck9iamVjdCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dCopOwotICAgIGJvb2wgcGF0aE9ubHlDbGlwcGlu
ZyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBib29sIGRyYXdDb250
ZW50SW50b01hc2tJbWFnZShDbGlwcGVyRGF0YSosIGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91
bmRpbmdCb3gpOwotICAgIHZvaWQgY2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVjdCgpOwot
Ci0gICAgYm9vbCBtX2ludmFsaWRhdGlvbkJsb2NrZWQ7Ci0gICAgRmxvYXRSZWN0IG1fY2xpcEJv
dW5kYXJpZXM7Ci0gICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBDbGlwcGVyRGF0YSo+IG1fY2xp
cHBlcjsKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAkocmV2
aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCi0KLSNpbmNsdWRlICJSZW5kZXJTVkdT
aGFkb3dUcmVlUm9vdENvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBTVkdE
b2N1bWVudEV4dGVuc2lvbnMqIHN2Z0V4dGVuc2lvbnNGcm9tTm9kZShOb2RlKiBub2RlKQotewot
ICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAgcmV0
dXJuIG5vZGUtPmRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKTsKLX0KLQotUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXI6OlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKFNWR1N0eWxl
ZEVsZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIobm9kZSkKLSAg
ICAsIG1faWQobm9kZS0+aGFzSUQoKSA/IG5vZGUtPmdldElkQXR0cmlidXRlKCkgOiBudWxsQXRv
bSkKLSAgICAsIG1fcmVnaXN0ZXJlZChmYWxzZSkKLXsKLX0KLQotUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXI6On5SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcigpCi17Ci0gICAgaWYgKG1fcmVn
aXN0ZXJlZCkKLSAgICAgICAgc3ZnRXh0ZW5zaW9uc0Zyb21Ob2RlKG5vZGUoKSktPnJlbW92ZVJl
c291cmNlKG1faWQpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpsYXlv
dXQoKQotewotICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBpZiBvdXIgbGF5b3V0IGNo
YW5nZWQuCi0gICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkKLSAg
ICAgICAgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOwotCi0gICAgUmVuZGVyU1ZHSGlkZGVu
Q29udGFpbmVyOjpsYXlvdXQoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
cjo6ZGVzdHJveSgpCi17Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlc291cmNlRGVzdHJveWVk
KHRoaXMpOwotICAgIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6ZGVzdHJveSgpOwotfQotCi12
b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIFJlbmRlclNW
R0hpZGRlbkNvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwotCi0gICAg
aWYgKCFtX3JlZ2lzdGVyZWQpIHsKLSAgICAgICAgbV9yZWdpc3RlcmVkID0gdHJ1ZTsKLSAgICAg
ICAgcmVnaXN0ZXJSZXNvdXJjZSgpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lcjo6aWRDaGFuZ2VkKCkKLXsKLSAgICAvLyBJbnZhbGlkYXRlIGFsbCBvdXIgY3Vy
cmVudCBjbGllbnRzLgotICAgIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoKTsKLQotICAgIC8v
IFJlbW92ZSBvbGQgaWQsIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBwcmVzZW50IGluIGNhY2hl
LgotICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IHN2Z0V4dGVuc2lvbnNG
cm9tTm9kZShub2RlKCkpOwotICAgIGV4dGVuc2lvbnMtPnJlbW92ZVJlc291cmNlKG1faWQpOwot
ICAgIG1faWQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKS0+Z2V0SWRBdHRyaWJ1dGUo
KTsKLQotICAgIHJlZ2lzdGVyUmVzb3VyY2UoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lcjo6bWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24oSW52YWxpZGF0aW9uTW9k
ZSBtb2RlKQotewotICAgIGlmIChtX2NsaWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBib29sIG5lZWRzTGF5b3V0ID0gbW9kZSA9PSBMYXlvdXRBbmRCb3VuZGFyaWVzSW52
YWxpZGF0aW9uOwotICAgIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IG1vZGUgIT0gUGFyZW50
T25seUludmFsaWRhdGlvbjsKLQotICAgIEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj46Oml0ZXJhdG9y
IGVuZCA9IG1fY2xpZW50cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj46
Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBSZW5kZXJPYmplY3QqIGNsaWVudCA9ICppdDsKLSAgICAgICAgaWYgKGNsaWVudC0+aXNT
VkdSZXNvdXJjZUNvbnRhaW5lcigpKSB7Ci0gICAgICAgICAgICBjbGllbnQtPnRvUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIoKS0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShtYXJrRm9ySW52
YWxpZGF0aW9uKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1hcmtGb3JJbnZhbGlkYXRpb24pCi0gICAgICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxp
ZGF0aW9uKGNsaWVudCwgbW9kZSk7Ci0KLSAgICAgICAgaWYgKG5lZWRzTGF5b3V0KQotICAgICAg
ICAgICAgY2xpZW50LT5zZXROZWVkc0xheW91dCh0cnVlKTsKLQotICAgICAgICAvLyBJbnZhbGlk
YXRlIHJlc291cmNlcyBpbiBhbmNlc3RvciBjaGFpbiwgaWYgbmVlZGVkLgotICAgICAgICBSZW5k
ZXJPYmplY3QqIGN1cnJlbnQgPSBjbGllbnQtPnBhcmVudCgpOwotICAgICAgICB3aGlsZSAoY3Vy
cmVudCkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmlzU1ZHUmVzb3VyY2VDb250YWluZXIo
KSkgewotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIoKS0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShtYXJrRm9ySW52YWxpZGF0aW9uKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQtPnBhcmVudCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyOjptYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKFJlbmRlck9i
amVjdCogY2xpZW50LCBJbnZhbGlkYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgQVNTRVJUKGNsaWVu
dCk7Ci0gICAgQVNTRVJUKCFtX2NsaWVudHMuaXNFbXB0eSgpKTsKLQotICAgIHN3aXRjaCAobW9k
ZSkgewotICAgIGNhc2UgTGF5b3V0QW5kQm91bmRhcmllc0ludmFsaWRhdGlvbjoKLSAgICBjYXNl
IEJvdW5kYXJpZXNJbnZhbGlkYXRpb246Ci0gICAgICAgIGNsaWVudC0+c2V0TmVlZHNCb3VuZGFy
aWVzVXBkYXRlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVwYWludEludmFsaWRhdGlv
bjoKLSAgICAgICAgaWYgKGNsaWVudC0+dmlldygpKQotICAgICAgICAgICAgY2xpZW50LT5yZXBh
aW50KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGFyZW50T25seUludmFsaWRhdGlvbjoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyOjphZGRDbGllbnQoUmVuZGVyT2JqZWN0KiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKGNsaWVu
dCk7Ci0gICAgbV9jbGllbnRzLmFkZChjbGllbnQpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyOjpyZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0KiBjbGllbnQpCi17Ci0gICAg
QVNTRVJUKGNsaWVudCk7Ci0gICAgbV9jbGllbnRzLnJlbW92ZShjbGllbnQpOwotfQotCi12b2lk
IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291cmNlKCkKLXsKLSAgICBT
VkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lvbnMgPSBzdmdFeHRlbnNpb25zRnJvbU5vZGUo
bm9kZSgpKTsKLSAgICBpZiAoIWV4dGVuc2lvbnMtPmlzUGVuZGluZ1Jlc291cmNlKG1faWQpKSB7
Ci0gICAgICAgIGV4dGVuc2lvbnMtPmFkZFJlc291cmNlKG1faWQsIHRoaXMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgT3duUHRyPFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6U1ZHUGVu
ZGluZ0VsZW1lbnRzPiBjbGllbnRzKGV4dGVuc2lvbnMtPnJlbW92ZVBlbmRpbmdSZXNvdXJjZSht
X2lkKSk7Ci0KLSAgICAvLyBDYWNoZSB1cyB3aXRoIHRoZSBuZXcgaWQuCi0gICAgZXh0ZW5zaW9u
cy0+YWRkUmVzb3VyY2UobV9pZCwgdGhpcyk7Ci0KLSAgICAvLyBVcGRhdGUgY2FjaGVkIHJlc291
cmNlcyBvZiBwZW5kaW5nIGNsaWVudHMuCi0gICAgY29uc3QgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
OjpTVkdQZW5kaW5nRWxlbWVudHM6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNsaWVudHMtPmVuZCgp
OwotICAgIGZvciAoU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpTVkdQZW5kaW5nRWxlbWVudHM6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gY2xpZW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSAoKml0KS0+cmVuZGVyZXIoKTsKLSAgICAg
ICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBTVkdSZXNv
dXJjZXNDYWNoZTo6Y2xpZW50VXBkYXRlZEZyb21FbGVtZW50KHJlbmRlcmVyLCByZW5kZXJlci0+
c3R5bGUoKSk7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0xheW91dCh0cnVlKTsKLSAgICB9
Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGJlbG9uZyBoZXJlLgotQWZmaW5lVHJhbnNm
b3JtIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjp0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJv
a2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcmVzb3VyY2VU
cmFuc2Zvcm0pCi17Ci0gICAgaWYgKCFvYmplY3QtPmlzU1ZHUGF0aCgpKQotICAgICAgICByZXR1
cm4gcmVzb3VyY2VUcmFuc2Zvcm07Ci0KLSAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4o
b2JqZWN0LT5ub2RlKCkpOwotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSByZXNvdXJj
ZVRyYW5zZm9ybTsKLSAgICB0cmFuc2Zvcm0ubXVsdGlwbHkoZWxlbWVudC0+Z2V0U2NyZWVuQ1RN
KFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSkpOwotICAgIHJldHVybiB0cmFuc2Zv
cm07Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaAkocmV2aXNpb24gNzUzNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVm
IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyX2gKLSNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXJfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJTVkdIaWRkZW5D
b250YWluZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIDogcHVibGljIFJl
bmRlclNWR0hpZGRlbkNvbnRhaW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFJlbmRlclNWR1Jlc291cmNlIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwotICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShT
dHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNTVkdSZXNvdXJjZUNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiB0b1JlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyKCkgeyByZXR1cm4gdGhpczsgfQotCi0gICAgc3RhdGljIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm1Pbk5vblNjYWxpbmdTdHJva2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiByZXNvdXJjZVRyYW5zZm9ybSk7Ci0KLSAgICB2b2lkIGlkQ2hhbmdlZCgp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgZW51bSBJbnZhbGlkYXRpb25Nb2RlIHsKLSAgICAgICAgTGF5
b3V0QW5kQm91bmRhcmllc0ludmFsaWRhdGlvbiwKLSAgICAgICAgQm91bmRhcmllc0ludmFsaWRh
dGlvbiwKLSAgICAgICAgUmVwYWludEludmFsaWRhdGlvbiwKLSAgICAgICAgUGFyZW50T25seUlu
dmFsaWRhdGlvbgotICAgIH07Ci0KLSAgICAvLyBVc2VkIGZyb20gdGhlIGludmFsaWRhdGVDbGll
bnQvaW52YWxpZGF0ZUNsaWVudHMgbWV0aG9kcyBmcm9tIGNsYXNzZXMsIGluaGVyaXRpbmcgZnJv
bSB1cy4KLSAgICB2b2lkIG1hcmtBbGxDbGllbnRzRm9ySW52YWxpZGF0aW9uKEludmFsaWRhdGlv
bk1vZGUpOwotICAgIHZvaWQgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihSZW5kZXJPYmplY3Qq
LCBJbnZhbGlkYXRpb25Nb2RlKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgU1ZHUmVz
b3VyY2VzQ2FjaGU7Ci0gICAgdm9pZCBhZGRDbGllbnQoUmVuZGVyT2JqZWN0Kik7Ci0gICAgdm9p
ZCByZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0Kik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCByZWdp
c3RlclJlc291cmNlKCk7Ci0KLSAgICBBdG9taWNTdHJpbmcgbV9pZDsKLSAgICBib29sIG1fcmVn
aXN0ZXJlZDsKLSAgICBIYXNoU2V0PFJlbmRlck9iamVjdCo+IG1fY2xpZW50czsKLX07Ci0KLWlu
bGluZSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogZ2V0UmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXJCeUlkKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCkKLXsK
LSAgICBpZiAoaWQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVuZGVyUmVzb3VyY2UgPSBkb2N1bWVudC0+YWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLT5yZXNvdXJjZUJ5SWQoaWQpKQotICAgICAgICByZXR1cm4gcmVuZGVy
UmVzb3VyY2U7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgUmVuZGVy
ZXI+Ci1SZW5kZXJlciogZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkKERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCkKLXsKLSAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXIqIGNvbnRhaW5lciA9IGdldFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyQnlJZChk
b2N1bWVudCwgaWQpKQotICAgICAgICByZXR1cm4gY29udGFpbmVyLT5jYXN0PFJlbmRlcmVyPigp
OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cAkocmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMyOCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5B
QkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRp
dmUuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCi0j
aW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIK
LSNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKLSNp
bmNsdWRlICJTVkdVbml0VHlwZXMuaCIKLQotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotc3RhdGljIGNvbnN0IGZsb2F0IGtNYXhGaWx0ZXJT
aXplID0gNTAwMC4wZjsKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1SZW5kZXJTVkdSZXNvdXJjZVR5cGUgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnNf
cmVzb3VyY2VUeXBlID0gRmlsdGVyUmVzb3VyY2VUeXBlOwotCi1SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIoU1ZHRmlsdGVyRWxlbWVudCogbm9kZSkKLSAg
ICA6IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKG5vZGUpCi17Ci19Ci0KLVJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjp+UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIoKQotewotICAgIGlmIChtX2Zp
bHRlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlbGV0ZUFsbFZhbHVlcyht
X2ZpbHRlcik7Ci0gICAgbV9maWx0ZXIuY2xlYXIoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlk
YXRpb24pCi17Ci0gICAgaWYgKCFtX2ZpbHRlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVsZXRl
QWxsVmFsdWVzKG1fZmlsdGVyKTsKLSAgICAgICAgbV9maWx0ZXIuY2xlYXIoKTsKLSAgICB9Ci0K
LSAgICBtYXJrQWxsQ2xpZW50c0ZvckludmFsaWRhdGlvbihtYXJrRm9ySW52YWxpZGF0aW9uID8g
TGF5b3V0QW5kQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24p
OwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVDbGllbnRGcm9tQ2Fj
aGUoUmVuZGVyT2JqZWN0KiBjbGllbnQsIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbikKLXsKLSAg
ICBBU1NFUlQoY2xpZW50KTsKLQotICAgIGlmIChtX2ZpbHRlci5jb250YWlucyhjbGllbnQpKQot
ICAgICAgICBkZWxldGUgbV9maWx0ZXIudGFrZShjbGllbnQpOwotCi0gICAgbWFya0NsaWVudEZv
ckludmFsaWRhdGlvbihjbGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52
YWxpZGF0aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7Ci19Ci0KLVBhc3NSZWZQdHI8U1ZH
RmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyhG
aWx0ZXIqIGZpbHRlcikKLXsKLSAgICBTVkdGaWx0ZXJFbGVtZW50KiBmaWx0ZXJFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHRmlsdGVyRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgYm9vbCBwcmltaXRp
dmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVtZW50LT5wcmltaXRpdmVVbml0cygpID09IFNW
R1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKLQotICAgIC8vIEFk
ZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCi0gICAgUmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+IGJ1
aWxkZXIgPSBTVkdGaWx0ZXJCdWlsZGVyOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBmb3IgKE5vZGUq
IG5vZGUgPSBmaWx0ZXJFbGVtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5u
ZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghbm9kZS0+aXNTVkdFbGVtZW50KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpOwotICAgICAgICBpZiAoIWVsZW1lbnQtPmlzRmlsdGVy
RWZmZWN0KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIGVmZmVjdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqPihlbGVtZW50KTsKLSAgICAgICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gZWZmZWN0RWxlbWVudC0+YnVpbGQoYnVpbGRlci5n
ZXQoKSwgZmlsdGVyKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAgICAgICAgICAgIGJ1aWxk
ZXItPmNsZWFyRWZmZWN0cygpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnVpbGRlci0+YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKGVmZmVjdCk7Ci0g
ICAgICAgIGVmZmVjdEVsZW1lbnQtPnNldFN0YW5kYXJkQXR0cmlidXRlcyhwcmltaXRpdmVCb3Vu
ZGluZ0JveE1vZGUsIGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RF
bGVtZW50LT5yZXN1bHQoKSwgZWZmZWN0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxkZXIucmVs
ZWFzZSgpOwotfQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpmaXRzSW5NYXhpbXVt
SW1hZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAg
ICBib29sIG1hdGNoZXNGaWx0ZXJTaXplID0gdHJ1ZTsKLSAgICBpZiAoc2l6ZS53aWR0aCgpID4g
a01heEZpbHRlclNpemUpIHsKLSAgICAgICAgc2NhbGUuc2V0V2lkdGgoc2NhbGUud2lkdGgoKSAq
IGtNYXhGaWx0ZXJTaXplIC8gc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgbWF0Y2hlc0ZpbHRlclNp
emUgPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHNpemUuaGVpZ2h0KCkgPiBrTWF4RmlsdGVyU2l6
ZSkgewotICAgICAgICBzY2FsZS5zZXRIZWlnaHQoc2NhbGUuaGVpZ2h0KCkgKiBrTWF4RmlsdGVy
U2l6ZSAvIHNpemUuaGVpZ2h0KCkpOwotICAgICAgICBtYXRjaGVzRmlsdGVyU2l6ZSA9IGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiBtYXRjaGVzRmlsdGVyU2l6ZTsKLX0KLQotYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwg
UmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCBy
ZXNvdXJjZU1vZGUpCi17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgQVNTRVJUKGNvbnRleHQp
OwotI2lmbmRlZiBOREVCVUcKLSAgICBBU1NFUlQocmVzb3VyY2VNb2RlID09IEFwcGx5VG9EZWZh
dWx0TW9kZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZXNvdXJjZU1vZGUpOwotI2VuZGlm
Ci0KLSAgICAvLyBSZXR1cm5pbmcgZmFsc2UgaGVyZSwgdG8gYXZvaWQgZHJhd2luZ3Mgb250byB0
aGUgY29udGV4dC4gV2UganVzdCB3YW50IHRvCi0gICAgLy8gZHJhdyB0aGUgc3RvcmVkIGZpbHRl
ciBvdXRwdXQsIG5vdCB0aGUgdW5maWx0ZXJlZCBvYmplY3QgYXMgd2VsbC4KLSAgICBpZiAobV9m
aWx0ZXIuY29udGFpbnMob2JqZWN0KSkgewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRh
ID0gbV9maWx0ZXIuZ2V0KG9iamVjdCk7Ci0gICAgICAgIGlmIChmaWx0ZXJEYXRhLT5idWlsZGVk
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGRlbGV0ZSBtX2ZpbHRlci50
YWtlKG9iamVjdCk7IC8vIE9vcHMsIGhhdmUgdG8gcmVidWlsZCwgZ28gdGhyb3VnaCBub3JtYWwg
Y29kZSBwYXRoCi0gICAgfQotCi0gICAgT3duUHRyPEZpbHRlckRhdGE+IGZpbHRlckRhdGEobmV3
IEZpbHRlckRhdGEpOwotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IG9iamVjdC0+
b2JqZWN0Qm91bmRpbmdCb3goKTsKLQotICAgIFNWR0ZpbHRlckVsZW1lbnQqIGZpbHRlckVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBmaWx0ZXJE
YXRhLT5ib3VuZGFyaWVzID0gZmlsdGVyRWxlbWVudC0+ZmlsdGVyQm91bmRpbmdCb3godGFyZ2V0
Qm91bmRpbmdCb3gpOwotICAgIGlmIChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIHRyYW5z
Zm9ybWF0aW9uIG1hdHJpeCBmb3IgZmlsdGVyLiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1
dGVUcmFuc2Zvcm07Ci0gICAgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2FsY3VsYXRlVHJhbnNmb3Jt
YXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0ob2JqZWN0LCBhYnNvbHV0ZVRyYW5z
Zm9ybSk7Ci0gICAgaWYgKCFhYnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRWxpbWluYXRlIHNoZWFyIG9mIHRoZSBhYnNvbHV0
ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIHRvIGJlIGFibGUgdG8gcHJvZHVjZSB1bnNoZWFyZWQg
dGlsZSBpbWFnZXMgZm9yIGZlVGlsZS4KLSAgICBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0
ZVRyYW5zZm9ybSA9IEFmZmluZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwg
MCwgMCwgYWJzb2x1dGVUcmFuc2Zvcm0ueVNjYWxlKCksIGFic29sdXRlVHJhbnNmb3JtLmUoKSwg
YWJzb2x1dGVUcmFuc2Zvcm0uZigpKTsKLQotICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSBib3Vu
ZGFyaWVzIG9mIHRoZSBmaWx0ZXIgYW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4KLSAgICBGbG9hdFJl
Y3QgYWJzb2x1dGVGaWx0ZXJCb3VuZGFyaWVzID0gZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1
dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzKTsKLSAgICBGbG9hdFJl
Y3QgZHJhd2luZ1JlZ2lvbiA9IG9iamVjdC0+c3Ryb2tlQm91bmRpbmdCb3goKTsKLSAgICBkcmF3
aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzKTsKLSAgICBGbG9hdFJl
Y3QgYWJzb2x1dGVEcmF3aW5nUmVnaW9uID0gZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVU
cmFuc2Zvcm0ubWFwUmVjdChkcmF3aW5nUmVnaW9uKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgU1ZH
RmlsdGVyIG9iamVjdC4KLSAgICBib29sIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9IGZpbHRl
ckVsZW1lbnQtPnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YOwotICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6
Y3JlYXRlKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLCBhYnNvbHV0ZURy
YXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBw
cmltaXRpdmVCb3VuZGluZ0JveE1vZGUpOwotCi0gICAgLy8gQ3JlYXRlIGFsbCByZWxldmFudCBm
aWx0ZXIgcHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gYnVpbGRQcmltaXRp
dmVzKGZpbHRlckRhdGEtPmZpbHRlci5nZXQoKSk7Ci0gICAgaWYgKCFmaWx0ZXJEYXRhLT5idWls
ZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDYWxjdWxhdGUgdGhlIHNjYWxl
IGZhY3RvciBmb3IgdGhlIHVzZSBvZiBmaWx0ZXJSZXMuCi0gICAgLy8gQWxzbyBzZWUgaHR0cDov
L3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNGaWx0ZXJFZmZlY3RzUmVnaW9uCi0gICAg
RmxvYXRTaXplIHNjYWxlKDEsIDEpOwotICAgIGlmIChmaWx0ZXJFbGVtZW50LT5oYXNBdHRyaWJ1
dGUoU1ZHTmFtZXM6OmZpbHRlclJlc0F0dHIpKSB7Ci0gICAgICAgIHNjYWxlLnNldFdpZHRoKGZp
bHRlckVsZW1lbnQtPmZpbHRlclJlc1goKSAvIGFic29sdXRlRmlsdGVyQm91bmRhcmllcy53aWR0
aCgpKTsKLSAgICAgICAgc2NhbGUuc2V0SGVpZ2h0KGZpbHRlckVsZW1lbnQtPmZpbHRlclJlc1ko
KSAvIGFic29sdXRlRmlsdGVyQm91bmRhcmllcy5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgaWYg
KHNjYWxlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRGV0ZXJt
aW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlhdGUgSW1h
Z2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4KLSAgICBG
bG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247Ci0gICAgdGVt
cFNvdXJjZVJlY3Quc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwotICAgIGZp
dHNJbk1heGltdW1JbWFnZVNpemUodGVtcFNvdXJjZVJlY3Quc2l6ZSgpLCBzY2FsZSk7Ci0KLSAg
ICAvLyBTZXQgdGhlIHNjYWxlIGxldmVsIGluIFNWR0ZpbHRlci4KLSAgICBmaWx0ZXJEYXRhLT5m
aWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotCi0gICAgRmlsdGVyRWZmZWN0KiBs
YXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwotICAgIGlmICgh
bGFzdEVmZmVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihsYXN0
RWZmZWN0LCBmaWx0ZXJEYXRhLT5maWx0ZXIuZ2V0KCkpOwotICAgIEZsb2F0UmVjdCBzdWJSZWdp
b24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25lIEZp
bHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsCi0gICAgLy8gcmVjYWxjdWxhdGUg
dGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIGlmICghZml0c0lu
TWF4aW11bUltYWdlU2l6ZShzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAgICAgZmls
dGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLSAgICAgICAgUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbihsYXN0RWZmZWN0LCBmaWx0ZXJEYXRhLT5maWx0ZXIuZ2V0KCkpOwotICAgIH0KLQot
ICAgIC8vIElmIHRoZSBkcmF3aW5nUmVnaW9uIGlzIGVtcHR5LCB3ZSBoYXZlIHNvbWV0aGluZyBs
aWtlIDxnIGZpbHRlcj0iLi4iLz4uCi0gICAgLy8gRXZlbiBpZiB0aGUgdGFyZ2V0IG9iamVjdEJv
dW5kaW5nQm94KCkgaXMgZW1wdHksIHdlIHN0aWxsIGhhdmUgdG8gZHJhdyB0aGUgbGFzdCBlZmZl
Y3QgcmVzdWx0IGltYWdlIGluIHBvc3RBcHBseVJlc291cmNlLgotICAgIGlmIChkcmF3aW5nUmVn
aW9uLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQoIW1fZmlsdGVyLmNvbnRhaW5zKG9iamVj
dCkpOwotICAgICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwotICAgICAg
ICBtX2ZpbHRlci5zZXQob2JqZWN0LCBmaWx0ZXJEYXRhLmxlYWtQdHIoKSk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBhYnNvbHV0ZURyYXdpbmdSZWdpb24uc2NhbGUoc2Nh
bGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwotCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBz
b3VyY2VHcmFwaGljOwotICAgIGlmICghU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VC
dWZmZXIoYWJzb2x1dGVEcmF3aW5nUmVnaW9uLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIHNvdXJj
ZUdyYXBoaWMsIENvbG9yU3BhY2VMaW5lYXJSR0IpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9maWx0
ZXIuY29udGFpbnMob2JqZWN0KSk7Ci0gICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9
IGNvbnRleHQ7Ci0gICAgICAgIG1fZmlsdGVyLnNldChvYmplY3QsIGZpbHRlckRhdGEubGVha1B0
cigpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBHcmFwaGljc0Nv
bnRleHQqIHNvdXJjZUdyYXBoaWNDb250ZXh0ID0gc291cmNlR3JhcGhpYy0+Y29udGV4dCgpOwot
ICAgIEFTU0VSVChzb3VyY2VHcmFwaGljQ29udGV4dCk7Ci0gIAotICAgIHNvdXJjZUdyYXBoaWND
b250ZXh0LT50cmFuc2xhdGUoLWFic29sdXRlRHJhd2luZ1JlZ2lvbi54KCksIC1hYnNvbHV0ZURy
YXdpbmdSZWdpb24ueSgpKTsKLSAgICBpZiAoc2NhbGUud2lkdGgoKSAhPSAxIHx8IHNjYWxlLmhl
aWdodCgpICE9IDEpCi0gICAgICAgIHNvdXJjZUdyYXBoaWNDb250ZXh0LT5zY2FsZShzY2FsZSk7
Ci0KLSAgICBzb3VyY2VHcmFwaGljQ29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEtPnNoZWFy
RnJlZUFic29sdXRlVHJhbnNmb3JtKTsKLSAgICBzb3VyY2VHcmFwaGljQ29udGV4dC0+Y2xlYXJS
ZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlRHJhd2luZ1JlZ2lvbi5zaXplKCkp
KTsKLSAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyID0gc291cmNlR3JhcGhpYy5y
ZWxlYXNlKCk7Ci0gICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4dDsKLQotICAg
IGNvbnRleHQgPSBzb3VyY2VHcmFwaGljQ29udGV4dDsKLQotICAgIEFTU0VSVCghbV9maWx0ZXIu
Y29udGFpbnMob2JqZWN0KSk7Ci0gICAgbV9maWx0ZXIuc2V0KG9iamVjdCwgZmlsdGVyRGF0YS5s
ZWFrUHRyKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGlj
c0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBh
dGgqKQotewotICAgIEFTU0VSVChvYmplY3QpOwotICAgIEFTU0VSVChjb250ZXh0KTsKLSNpZm5k
ZWYgTkRFQlVHCi0gICAgQVNTRVJUKHJlc291cmNlTW9kZSA9PSBBcHBseVRvRGVmYXVsdE1vZGUp
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVzb3VyY2VNb2RlKTsKLSNlbmRpZgotCi0gICAg
aWYgKCFtX2ZpbHRlci5jb250YWlucyhvYmplY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBG
aWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0gbV9maWx0ZXIuZ2V0KG9iamVjdCk7Ci0gICAgaWYgKCFm
aWx0ZXJEYXRhLT5idWlsZGVkKSB7Ci0gICAgICAgIGlmICghZmlsdGVyRGF0YS0+c2F2ZWRDb250
ZXh0KSB7Ci0gICAgICAgICAgICByZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0KTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnRleHQgPSBmaWx0ZXJEYXRh
LT5zYXZlZENvbnRleHQ7Ci0gICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9IDA7Ci0j
aWYgIVBMQVRGT1JNKENHKQotICAgICAgICBpZiAoZmlsdGVyRGF0YS0+c291cmNlR3JhcGhpY0J1
ZmZlcikKLSAgICAgICAgICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXItPnRyYW5z
Zm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZURldmljZVJHQiwgQ29sb3JTcGFjZUxpbmVhclJHQik7
Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJE
YXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0gICAgCi0gICAgaWYgKGxhc3RFZmZlY3QgJiYg
IWZpbHRlckRhdGEtPmJvdW5kYXJpZXMuaXNFbXB0eSgpICYmICFsYXN0RWZmZWN0LT5maWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gVGhpcyBpcyB0aGUg
cmVhbCBmaWx0ZXJpbmcgb2YgdGhlIG9iamVjdC4gSXQganVzdCBuZWVkcyB0byBiZSBjYWxsZWQg
b24gdGhlCi0gICAgICAgIC8vIGluaXRpYWwgZmlsdGVyaW5nIHByb2Nlc3MuIFdlIGp1c3QgdGFr
ZSB0aGUgc3RvcmVkIGZpbHRlciByZXN1bHQgb24gYQotICAgICAgICAvLyBzZWNvbmQgZHJhd2lu
Zy4KLSAgICAgICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVkKSB7Ci0gICAgICAgICAgICBmaWx0
ZXJEYXRhLT5maWx0ZXItPnNldFNvdXJjZUltYWdlKGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNC
dWZmZXIucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7Ci0jaWYg
IVBMQVRGT1JNKENHKQotICAgICAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFz
dEVmZmVjdC0+YXNJbWFnZUJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKHJlc3VsdEltYWdlKQot
ICAgICAgICAgICAgICAgIHJlc3VsdEltYWdlLT50cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3Bh
Y2VMaW5lYXJSR0IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotI2VuZGlmCi0gICAgICAgICAgICBm
aWx0ZXJEYXRhLT5idWlsZGVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEltYWdlQnVm
ZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RFZmZlY3QtPmFzSW1hZ2VCdWZmZXIoKTsKLSAgICAgICAg
aWYgKHJlc3VsdEltYWdlKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVy
RGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpKTsKLQotICAgICAgICAg
ICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRhLT5maWx0ZXItPmZpbHRl
clJlc29sdXRpb24oKS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS0+ZmlsdGVyLT5maWx0ZXJSZXNv
bHV0aW9uKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmNsaXAobGFzdEVmZmVj
dC0+bWF4RWZmZWN0UmVjdCgpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZl
cihyZXN1bHRJbWFnZSwgb2JqZWN0LT5zdHlsZSgpLT5jb2xvclNwYWNlKCksIGxhc3RFZmZlY3Qt
PmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVy
RGF0YS0+ZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkpOwotCi0gICAgICAgICAgICBjb250ZXh0
LT5jb25jYXRDVE0oZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXIuY2xlYXIo
KTsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZXNvdXJjZUJvdW5k
aW5nQm94KFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIGlmIChTVkdGaWx0ZXJFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyRWxlbWVudCo+KG5vZGUoKSkpCi0gICAg
ICAgIHJldHVybiBlbGVtZW50LT5maWx0ZXJCb3VuZGluZ0JveChvYmplY3QtPm9iamVjdEJvdW5k
aW5nQm94KCkpOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotfQotCi19Ci0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5oCShyZXZpc2lvbiA3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyX2gKLSNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJfaAotCi0jaWYgRU5BQkxFKFNW
RykgJiYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgot
I2luY2x1ZGUgIlNWR0ZpbHRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKLSNp
bmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCi0K
LSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEZp
bHRlckRhdGEgewotICAgIEZpbHRlckRhdGEoKQotICAgICAgICA6IHNhdmVkQ29udGV4dCgwKQot
ICAgICAgICAsIGJ1aWxkZWQoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxTVkdG
aWx0ZXI+IGZpbHRlcjsKLSAgICBSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRlcjsKLSAg
ICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWNCdWZmZXI7Ci0gICAgR3JhcGhpY3ND
b250ZXh0KiBzYXZlZENvbnRleHQ7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBib3VuZGFyaWVzOwotICAgIEZsb2F0U2l6ZSBz
Y2FsZTsKLSAgICBib29sIGJ1aWxkZWQ7Ci19OwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0K
LWNsYXNzIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyIDogcHVibGljIFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcihTVkdGaWx0
ZXJFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIoKTsKLQot
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlciI7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxDbGll
bnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9y
SW52YWxpZGF0aW9uID0gdHJ1ZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBz
aG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VN
b2RlLCBjb25zdCBQYXRoKik7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5k
aW5nQm94KFJlbmRlck9iamVjdCopOwotCi0gICAgUGFzc1JlZlB0cjxTVkdGaWx0ZXJCdWlsZGVy
PiBidWlsZFByaW1pdGl2ZXMoRmlsdGVyKik7Ci0KLSAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRU
eXBlIGZpbHRlclVuaXRzKCkgY29uc3QgeyByZXR1cm4gdG9Vbml0VHlwZShzdGF0aWNfY2FzdDxT
VkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKS0+ZmlsdGVyVW5pdHMoKSk7IH0KLSAgICBTVkdVbml0
VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKCkgY29uc3QgeyByZXR1cm4gdG9Vbml0
VHlwZShzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKS0+cHJpbWl0aXZlVW5p
dHMoKSk7IH0KLQotICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9Ci0gICAgc3RhdGljIFJlbmRlclNW
R1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKLQotcHJpdmF0ZToKLSAgICBib29sIGZpdHNJ
bk1heGltdW1JbWFnZVNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJik7Ci0KLSAgICBI
YXNoTWFwPFJlbmRlck9iamVjdCosIEZpbHRlckRhdGEqPiBtX2ZpbHRlcjsKLX07Ci0KLX0KLQot
I2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcAkocmV2aXNpb24g
NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXJQcmltaXRpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgWm9sdGFuIEhlcmN6ZWcKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZS5oIgotCi0jaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2
ZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlckVmZmVjdCogZWZmZWN0
LCBTVkdGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBGbG9hdFJlY3QgdW5pdGVSZWN0OwotICAgIEZs
b2F0UmVjdCBzdWJyZWdpb25Cb3VuZGluZ0JveCA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRhcmllcygp
OwotICAgIEZsb2F0UmVjdCBzdWJyZWdpb24gPSBzdWJyZWdpb25Cb3VuZGluZ0JveDsKLQotICAg
IGlmIChlZmZlY3QtPmZpbHRlckVmZmVjdFR5cGUoKSAhPSBGaWx0ZXJFZmZlY3RUeXBlVGlsZSkg
ewotICAgICAgICAvLyBGRVR1cmJ1bGVuY2UsIEZFSW1hZ2UgYW5kIEZFRmxvb2QgZG9uJ3QgaGF2
ZSBpbnB1dCBlZmZlY3RzLCB0YWtlIHRoZSBmaWx0ZXIgcmVnaW9uIGFzIHVuaXRlIHJlY3QuCi0g
ICAgICAgIGlmICh1bnNpZ25lZCBudW1iZXJPZklucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRF
ZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZJbnB1dEVmZmVjdHM7ICsraSkKLSAgICAgICAgICAgICAgICB1bml0ZVJlY3QudW5p
dGUoZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGVmZmVjdC0+aW5wdXRFZmZlY3Qo
aSksIGZpbHRlcikpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHVuaXRlUmVjdCA9IGZp
bHRlci0+ZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBk
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZWZmZWN0LT5pbnB1dEVmZmVjdCgwKSwg
ZmlsdGVyKTsKLSAgICAgICAgdW5pdGVSZWN0ID0gZmlsdGVyLT5maWx0ZXJSZWdpb25JblVzZXJT
cGFjZSgpOwotICAgIH0KLQotICAgIGlmIChmaWx0ZXItPmVmZmVjdEJvdW5kaW5nQm94TW9kZSgp
KSB7Ci0gICAgICAgIHN1YnJlZ2lvbiA9IHVuaXRlUmVjdDsKLSAgICAgICAgLy8gQXZvaWQgdGhl
IGNhbGxpbmcgb2YgYSB2aXJ0dWFsIG1ldGhvZCBzZXZlcmFsIHRpbWVzLgotICAgICAgICBGbG9h
dFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXItPnRhcmdldEJvdW5kaW5nQm94KCk7Ci0K
LSAgICAgICAgaWYgKGVmZmVjdC0+aGFzWCgpKQotICAgICAgICAgICAgc3VicmVnaW9uLnNldFgo
dGFyZ2V0Qm91bmRpbmdCb3gueCgpICsgc3VicmVnaW9uQm91bmRpbmdCb3gueCgpICogdGFyZ2V0
Qm91bmRpbmdCb3gud2lkdGgoKSk7Ci0KLSAgICAgICAgaWYgKGVmZmVjdC0+aGFzWSgpKQotICAg
ICAgICAgICAgc3VicmVnaW9uLnNldFkodGFyZ2V0Qm91bmRpbmdCb3gueSgpICsgc3VicmVnaW9u
Qm91bmRpbmdCb3gueSgpICogdGFyZ2V0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwotCi0gICAgICAg
IGlmIChlZmZlY3QtPmhhc1dpZHRoKCkpCi0gICAgICAgICAgICBzdWJyZWdpb24uc2V0V2lkdGgo
c3VicmVnaW9uQm91bmRpbmdCb3gud2lkdGgoKSAqIHRhcmdldEJvdW5kaW5nQm94LndpZHRoKCkp
OwotCi0gICAgICAgIGlmIChlZmZlY3QtPmhhc0hlaWdodCgpKQotICAgICAgICAgICAgc3VicmVn
aW9uLnNldEhlaWdodChzdWJyZWdpb25Cb3VuZGluZ0JveC5oZWlnaHQoKSAqIHRhcmdldEJvdW5k
aW5nQm94LmhlaWdodCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWVmZmVjdC0+aGFz
WCgpKQotICAgICAgICAgICAgc3VicmVnaW9uLnNldFgodW5pdGVSZWN0LngoKSk7Ci0KLSAgICAg
ICAgaWYgKCFlZmZlY3QtPmhhc1koKSkKLSAgICAgICAgICAgIHN1YnJlZ2lvbi5zZXRZKHVuaXRl
UmVjdC55KCkpOwotCi0gICAgICAgIGlmICghZWZmZWN0LT5oYXNXaWR0aCgpKQotICAgICAgICAg
ICAgc3VicmVnaW9uLnNldFdpZHRoKHVuaXRlUmVjdC53aWR0aCgpKTsKLQotICAgICAgICBpZiAo
IWVmZmVjdC0+aGFzSGVpZ2h0KCkpCi0gICAgICAgICAgICBzdWJyZWdpb24uc2V0SGVpZ2h0KHVu
aXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgZWZmZWN0LT5zZXRGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oc3VicmVnaW9uKTsKLQotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVN1YnJlZ2lv
biA9IGZpbHRlci0+bWFwTG9jYWxSZWN0VG9BYnNvbHV0ZVJlY3Qoc3VicmVnaW9uKTsKLSAgICBG
bG9hdFNpemUgZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpOwot
ICAgIGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24ud2lkdGgoKSwgZmls
dGVyUmVzb2x1dGlvbi5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGRUltYWdlIG5lZWRzIHRoZSB1bmNs
aXBwZWQgc3VicmVnaW9uIGluIGFic29sdXRlIGNvb3JkaW5hdGVzIHRvIGRldGVybWluZSB0aGUg
Y29ycmVjdAotICAgIC8vIGRlc3RpbmF0aW9uIHJlY3QgaW4gY29tYmluYXRpb24gd2l0aCBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvLgotICAgIGlmIChlZmZlY3QtPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBG
aWx0ZXJFZmZlY3RUeXBlSW1hZ2UpCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8RkVJbWFnZSo+
KGVmZmVjdCktPnNldEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9uKTsKLQotICAg
IC8vIENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVyIHJlZ2lvbi4KLSAgICBG
bG9hdFJlY3QgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24gPSBmaWx0ZXItPmZpbHRlclJlZ2lv
bigpOwotICAgIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRp
b24ud2lkdGgoKSwgZmlsdGVyUmVzb2x1dGlvbi5oZWlnaHQoKSk7Ci0gICAgYWJzb2x1dGVTdWJy
ZWdpb24uaW50ZXJzZWN0KGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uKTsKLQotICAgIGVmZmVj
dC0+c2V0TWF4RWZmZWN0UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlU3VicmVnaW9uKSk7
Ci0gICAgcmV0dXJuIHN1YnJlZ2lvbjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUuaAkocmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlX2gKLSNkZWZpbmUgUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmVfaAotCi0jaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
Ci0KLSNpbmNsdWRlICJSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCIKLSNpbmNsdWRlICJTVkdG
aWx0ZXIuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZSA6IHB1YmxpYyBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIgewotcHVibGljOgot
Ci0gICAgZXhwbGljaXQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKiBmaWx0ZXJQcmltaXRpdmVFbGVtZW50KQotICAg
ICAgICA6IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcihmaWx0ZXJQcmltaXRpdmVFbGVtZW50KQot
ICAgIHsKLSAgICB9Ci0KLSAgICAvLyBUaGV5IGRlcGVuZCBvbiB0aGUgUmVuZGVyT2JqZWN0IGFy
Z3VtZW50IG9mIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlLgotICAgIHN0
YXRpYyBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlckVm
ZmVjdCosIFNWR0ZpbHRlciopOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgY29uc3QgY2hhciog
cmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZSI7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotCi0jZW5kaWYgLy8gUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAkocmV2aXNp
b24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjgxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAwOCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgiCi0KLSNpbmNsdWRlICJHcmFkaWVudEF0dHJpYnV0
ZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdU
ZXh0LmgiCi0jaW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJUb29scy5oIgotI2luY2x1ZGUgIlNWR1Jl
bmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjpSZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50KFNWR0dyYWRpZW50RWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyKG5vZGUpCi0gICAgLCBtX3Nob3VsZENvbGxlY3RHcmFkaWVudEF0dHJpYnV0
ZXModHJ1ZSkKLSNpZiBQTEFURk9STShDRykKLSAgICAsIG1fc2F2ZWRDb250ZXh0KDApCi0jZW5k
aWYKLXsKLX0KLQotUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6flJlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQoKQotewotICAgIGlmIChtX2dyYWRpZW50LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZGVsZXRlQWxsVmFsdWVzKG1fZ3JhZGllbnQpOwotICAgIG1fZ3JhZGllbnQu
Y2xlYXIoKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjpyZW1vdmVBbGxD
bGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbikKLXsKLSAgICBpZiAoIW1f
Z3JhZGllbnQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2dyYWRpZW50
KTsKLSAgICAgICAgbV9ncmFkaWVudC5jbGVhcigpOwotICAgIH0KLQotICAgIG1fc2hvdWxkQ29s
bGVjdEdyYWRpZW50QXR0cmlidXRlcyA9IHRydWU7Ci0gICAgbWFya0FsbENsaWVudHNGb3JJbnZh
bGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IFJlcGFpbnRJbnZhbGlkYXRpb24gOiBQYXJl
bnRPbmx5SW52YWxpZGF0aW9uKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
OjpyZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiBjbGllbnQsIGJvb2wgbWFya0Zv
ckludmFsaWRhdGlvbikKLXsKLSAgICBBU1NFUlQoY2xpZW50KTsKLQotICAgIGlmIChtX2dyYWRp
ZW50LmNvbnRhaW5zKGNsaWVudCkpCi0gICAgICAgIGRlbGV0ZSBtX2dyYWRpZW50LnRha2UoY2xp
ZW50KTsKLQotICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52
YWxpZGF0aW9uID8gUmVwYWludEludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24p
OwotfQotCi0jaWYgUExBVEZPUk0oQ0cpCi1zdGF0aWMgaW5saW5lIGJvb2wgY3JlYXRlTWFza0Fu
ZFN3YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dComIHNhdmVkQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiYg
aW1hZ2VCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIFJlbmRlck9iamVj
dCogdGV4dFJvb3RCbG9jayA9IFJlbmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNl
c3RvcihvYmplY3QpOwotICAgIEFTU0VSVCh0ZXh0Um9vdEJsb2NrKTsKLQotICAgIEFmZmluZVRy
YW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxj
dWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbSh0ZXh0Um9v
dEJsb2NrLCBhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0KLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVUYXJn
ZXRSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdCh0ZXh0Um9vdEJsb2NrLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRl
VGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJl
Y3RGb3JSZW5kZXJlcih0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRhcmdldFJlY3QpOwotICAgIGlm
IChjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2U7Ci0gICAgaWYgKCFTVkdJ
bWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihhYnNvbHV0ZVRhcmdldFJlY3QsIGNs
YW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIG1hc2tJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdl
Q29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOwotICAgIEFTU0VSVChtYXNrSW1hZ2VDb250
ZXh0KTsKLQotICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtY2xhbXBlZEFic29sdXRl
VGFyZ2V0UmVjdC54KCksIC1jbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LnkoKSk7Ci0gICAgbWFz
a0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKGFic29sdXRlVHJhbnNmb3JtKTsKLQotICAgIEFTU0VS
VChtYXNrSW1hZ2UpOwotICAgIHNhdmVkQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgY29udGV4dCA9
IG1hc2tJbWFnZUNvbnRleHQ7Ci0gICAgaW1hZ2VCdWZmZXIgPSBtYXNrSW1hZ2UucmVsZWFzZSgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSBj
bGlwVG9UZXh0TWFzayhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1
ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0
UmVjdCYgdGFyZ2V0UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBib3VuZGluZ0JveE1vZGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRp
ZW50VHJhbnNmb3JtKQotewotICAgIFJlbmRlck9iamVjdCogdGV4dFJvb3RCbG9jayA9IFJlbmRl
clNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3RvcihvYmplY3QpOwotICAgIEFTU0VS
VCh0ZXh0Um9vdEJsb2NrKTsKLQotICAgIHRhcmdldFJlY3QgPSB0ZXh0Um9vdEJsb2NrLT5yZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIGFic29s
dXRlVHJhbnNmb3JtOwotICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5zZm9y
bWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKHRleHRSb290QmxvY2ssIGFic29s
dXRlVHJhbnNmb3JtKTsKLQotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNv
bHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRhcmdldFJlY3QpOwotICAgIEZsb2F0UmVjdCBjbGFtcGVk
QWJzb2x1dGVUYXJnZXRSZWN0ID0gU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xhbXBlZEFic29sdXRl
VGFyZ2V0UmVjdEZvclJlbmRlcmVyKHRleHRSb290QmxvY2ssIGFic29sdXRlVGFyZ2V0UmVjdCk7
Ci0KLSAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGlwVG9JbWFnZUJ1ZmZlcihjb250ZXh0LCBh
YnNvbHV0ZVRyYW5zZm9ybSwgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCwgaW1hZ2VCdWZmZXIp
OwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKLSAgICBpZiAoYm91bmRpbmdCb3hNb2Rl
KSB7Ci0gICAgICAgIEZsb2F0UmVjdCBtYXNrQm91bmRpbmdCb3ggPSB0ZXh0Um9vdEJsb2NrLT5v
YmplY3RCb3VuZGluZ0JveCgpOwotICAgICAgICBtYXRyaXgudHJhbnNsYXRlKG1hc2tCb3VuZGlu
Z0JveC54KCksIG1hc2tCb3VuZGluZ0JveC55KCkpOwotICAgICAgICBtYXRyaXguc2NhbGVOb25V
bmlmb3JtKG1hc2tCb3VuZGluZ0JveC53aWR0aCgpLCBtYXNrQm91bmRpbmdCb3guaGVpZ2h0KCkp
OwotICAgIH0KLSAgICBtYXRyaXgubXVsdExlZnQoZ3JhZGllbnRUcmFuc2Zvcm0pOwotICAgIHJl
dHVybiBtYXRyaXg7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
OjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSogc3R5bGUs
IEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkK
LXsKLSAgICBBU1NFUlQob2JqZWN0KTsKLSAgICBBU1NFUlQoc3R5bGUpOwotICAgIEFTU0VSVChj
b250ZXh0KTsKLSAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7
Ci0KLSAgICAvLyBCZSBzdXJlIHRvIHN5bmNocm9uaXplIGFsbCBTVkcgcHJvcGVydGllcyBvbiB0
aGUgZ3JhZGllbnRFbGVtZW50IF9iZWZvcmVfIHByb2Nlc3NpbmcgYW55IGZ1cnRoZXIuCi0gICAg
Ly8gT3RoZXJ3aGlzZSB0aGUgY2FsbCB0byBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKCkgaW4g
Y3JlYXRlVGlsZUltYWdlKCksIG1heSBjYXVzZSB0aGUgU1ZHIERPTSBwcm9wZXJ0eQotICAgIC8v
IHN5bmNocm9uaXphdGlvbiB0byBraWNrIGluLCB3aGljaCBjYXVzZXMgcmVtb3ZlQWxsQ2xpZW50
c0Zyb21DYWNoZSgpIHRvIGJlIGNhbGxlZCwgd2hpY2ggaW4gdHVybiBkZWxldGVzIG91cgotICAg
IC8vIEdyYWRpZW50RGF0YSBvYmplY3QhIExlYXZpbmcgb3V0IHRoZSBsaW5lIGJlbG93IHdpbGwg
Y2F1c2Ugc3ZnL2R5bmFtaWMtdXBkYXRlcy9TVkcqR3JhZGllbnRFbGVtZW50LXN2Z2RvbSogdG8g
Y3Jhc2guCi0gICAgU1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdHcmFkaWVudEVsZW1lbnQqPihub2RlKCkpOwotICAgIGlmICghZ3JhZGllbnRFbGVt
ZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9zaG91bGRDb2xsZWN0R3Jh
ZGllbnRBdHRyaWJ1dGVzKSB7Ci0gICAgICAgIGdyYWRpZW50RWxlbWVudC0+dXBkYXRlQW5pbWF0
ZWRTVkdBdHRyaWJ1dGUoYW55UU5hbWUoKSk7Ci0gICAgICAgIGNvbGxlY3RHcmFkaWVudEF0dHJp
YnV0ZXMoZ3JhZGllbnRFbGVtZW50KTsKLSAgICAgICAgbV9zaG91bGRDb2xsZWN0R3JhZGllbnRB
dHRyaWJ1dGVzID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gU3BlYzogV2hlbiB0aGUgZ2VvbWV0
cnkgb2YgdGhlIGFwcGxpY2FibGUgZWxlbWVudCBoYXMgbm8gd2lkdGggb3IgaGVpZ2h0IGFuZCBv
YmplY3RCb3VuZGluZ0JveCBpcyBzcGVjaWZpZWQsCi0gICAgLy8gdGhlbiB0aGUgZ2l2ZW4gZWZm
ZWN0IChlLmcuIGEgZ3JhZGllbnQgb3IgYSBmaWx0ZXIpIHdpbGwgYmUgaWdub3JlZC4KLSAgICBG
bG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7
Ci0gICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX2dyYWRpZW50LmNvbnRhaW5z
KG9iamVjdCkpCi0gICAgICAgIG1fZ3JhZGllbnQuc2V0KG9iamVjdCwgbmV3IEdyYWRpZW50RGF0
YSk7Ci0KLSAgICBHcmFkaWVudERhdGEqIGdyYWRpZW50RGF0YSA9IG1fZ3JhZGllbnQuZ2V0KG9i
amVjdCk7Ci0gICAgYm9vbCBpc1BhaW50aW5nVGV4dCA9IHJlc291cmNlTW9kZSAmIEFwcGx5VG9U
ZXh0TW9kZTsKLQotICAgIC8vIENyZWF0ZSBncmFkaWVudCBvYmplY3QKLSAgICBpZiAoIWdyYWRp
ZW50RGF0YS0+Z3JhZGllbnQpIHsKLSAgICAgICAgYnVpbGRHcmFkaWVudChncmFkaWVudERhdGEs
IGdyYWRpZW50RWxlbWVudCk7Ci0KLSAgICAgICAgLy8gQ0cgcGxhdGZvcm1zIHdpbGwgaGFuZGxl
IHRoZSBncmFkaWVudCBzcGFjZSB0cmFuc2Zvcm0gZm9yIHRleHQgYWZ0ZXIgYXBwbHlpbmcgdGhl
Ci0gICAgICAgIC8vIHJlc291cmNlLCBzbyBkb24ndCBhcHBseSBpdCBoZXJlLiBGb3Igbm9uLUNH
IHBsYXRmb3Jtcywgd2Ugd2FudCB0aGUgdGV4dCBib3VuZGluZwotICAgICAgICAvLyBib3ggYXBw
bGllZCB0byB0aGUgZ3JhZGllbnQgc3BhY2UgdHJhbnNmb3JtIG5vdywgc28gdGhlIGdyYWRpZW50
IHNoYWRlciBjYW4gdXNlIGl0LgotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICBpZiAoYm91bmRp
bmdCb3hNb2RlKCkgJiYgIW9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSAmJiAhaXNQYWludGlu
Z1RleHQpIHsKLSNlbHNlCi0gICAgICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSAmJiAhb2JqZWN0
Qm91bmRpbmdCb3guaXNFbXB0eSgpKSB7Ci0jZW5kaWYKLSAgICAgICAgICAgIGdyYWRpZW50RGF0
YS0+dXNlcnNwYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54KCksIG9i
amVjdEJvdW5kaW5nQm94LnkoKSk7Ci0gICAgICAgICAgICBncmFkaWVudERhdGEtPnVzZXJzcGFj
ZVRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2Jq
ZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIGdyYWRpZW50VHJhbnNmb3JtOwotICAgICAgICBjYWxjdWxhdGVHcmFkaWVudFRyYW5z
Zm9ybShncmFkaWVudFRyYW5zZm9ybSk7Ci0KLSAgICAgICAgZ3JhZGllbnREYXRhLT51c2Vyc3Bh
Y2VUcmFuc2Zvcm0ubXVsdExlZnQoZ3JhZGllbnRUcmFuc2Zvcm0pOwotICAgICAgICBncmFkaWVu
dERhdGEtPmdyYWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGdyYWRpZW50RGF0YS0+
dXNlcnNwYWNlVHJhbnNmb3JtKTsKLSAgICB9Ci0KLSAgICBpZiAoIWdyYWRpZW50RGF0YS0+Z3Jh
ZGllbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIERyYXcgZ3JhZGllbnQKLSAg
ICBjb250ZXh0LT5zYXZlKCk7Ci0KLSAgICBpZiAoaXNQYWludGluZ1RleHQpIHsKLSNpZiBQTEFU
Rk9STShDRykKLSAgICAgICAgaWYgKCFjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRGb3JUZXh0R3Jh
ZGllbnQoY29udGV4dCwgbV9zYXZlZENvbnRleHQsIG1faW1hZ2VCdWZmZXIsIG9iamVjdCkpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdN
b2RlKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSA/IFRleHRNb2RlRmlsbCA6IFRleHRN
b2RlU3Ryb2tlKTsKLSAgICB9Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUg
PSBzdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICBBU1NFUlQoc3ZnU3R5bGUpOwotCi0gICAgaWYgKHJl
c291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkgewotICAgICAgICBjb250ZXh0LT5zZXRBbHBo
YShzdmdTdHlsZS0+ZmlsbE9wYWNpdHkoKSk7Ci0gICAgICAgIGNvbnRleHQtPnNldEZpbGxHcmFk
aWVudChncmFkaWVudERhdGEtPmdyYWRpZW50KTsKLSAgICAgICAgY29udGV4dC0+c2V0RmlsbFJ1
bGUoc3ZnU3R5bGUtPmZpbGxSdWxlKCkpOwotICAgIH0gZWxzZSBpZiAocmVzb3VyY2VNb2RlICYg
QXBwbHlUb1N0cm9rZU1vZGUpIHsKLSAgICAgICAgaWYgKHN2Z1N0eWxlLT52ZWN0b3JFZmZlY3Qo
KSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0UpCi0gICAgICAgICAgICBncmFkaWVudERhdGEtPmdy
YWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKHRyYW5zZm9ybU9uTm9uU2NhbGluZ1N0
cm9rZShvYmplY3QsIGdyYWRpZW50RGF0YS0+dXNlcnNwYWNlVHJhbnNmb3JtKSk7Ci0gICAgICAg
IGNvbnRleHQtPnNldEFscGhhKHN2Z1N0eWxlLT5zdHJva2VPcGFjaXR5KCkpOwotICAgICAgICBj
b250ZXh0LT5zZXRTdHJva2VHcmFkaWVudChncmFkaWVudERhdGEtPmdyYWRpZW50KTsKLSAgICAg
ICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBz
dHlsZSwgb2JqZWN0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9i
amVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VN
b2RlLCBjb25zdCBQYXRoKiBwYXRoKQotewotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBBU1NF
UlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7Ci0KLSAgICBpZiAocmVzb3Vy
Y2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSB7Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgIC8v
IENHIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGdyYWRpZW50IG9uIHRleHQKLSAgICAg
ICAgaWYgKG1fc2F2ZWRDb250ZXh0ICYmIG1fZ3JhZGllbnQuY29udGFpbnMob2JqZWN0KSkgewot
ICAgICAgICAgICAgR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEgPSBtX2dyYWRpZW50LmdldChv
YmplY3QpOwotCi0gICAgICAgICAgICAvLyBSZXN0b3JlIG9uLXNjcmVlbiBkcmF3aW5nIGNvbnRl
eHQKLSAgICAgICAgICAgIGNvbnRleHQgPSBtX3NhdmVkQ29udGV4dDsKLSAgICAgICAgICAgIG1f
c2F2ZWRDb250ZXh0ID0gMDsKLQotICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50
VHJhbnNmb3JtOwotICAgICAgICAgICAgY2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zvcm0oZ3JhZGll
bnRUcmFuc2Zvcm0pOwotCi0gICAgICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdDsKLSAgICAg
ICAgICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQtPnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0o
Y2xpcFRvVGV4dE1hc2soY29udGV4dCwgbV9pbWFnZUJ1ZmZlciwgdGFyZ2V0UmVjdCwgb2JqZWN0
LCBib3VuZGluZ0JveE1vZGUoKSwgZ3JhZGllbnRUcmFuc2Zvcm0pKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnNldEZpbGxHcmFkaWVudChncmFkaWVudERhdGEtPmdyYWRpZW50KTsKLQotICAgICAg
ICAgICAgY29udGV4dC0+ZmlsbFJlY3QodGFyZ2V0UmVjdCk7Ci0gICAgICAgICAgICBtX2ltYWdl
QnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShv
YmplY3QpOwotI2VuZGlmCi0gICAgfSBlbHNlIGlmIChwYXRoKSB7Ci0gICAgICAgIGlmIChyZXNv
dXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0
aCgqcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VN
b2RlKQotICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7Ci0gICAgfQotCi0g
ICAgY29udGV4dC0+cmVzdG9yZSgpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQ6OmFkZFN0b3BzKEdyYWRpZW50RGF0YSogZ3JhZGllbnREYXRhLCBjb25zdCBWZWN0b3I8R3Jh
ZGllbnQ6OkNvbG9yU3RvcD4mIHN0b3BzKSBjb25zdAotewotICAgIEFTU0VSVChncmFkaWVudERh
dGEtPmdyYWRpZW50KTsKLQotICAgIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RvcHMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8R3JhZGll
bnQ6OkNvbG9yU3RvcD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RvcHMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
Kml0KTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAkocmV2aXNpb24gNzUzNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRl
ZiBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50X2gKLSNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudF9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYWRpZW50LmgiCi0jaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5o
IgotI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgR3JhZGllbnREYXRhIHsKLSAg
ICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50OwotICAgIEFmZmluZVRyYW5zZm9ybSB1c2Vyc3Bh
Y2VUcmFuc2Zvcm07Ci19OwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0KLWNsYXNzIFJlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQgOiBwdWJsaWMgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIg
ewotcHVibGljOgotICAgIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQoU1ZHR3JhZGllbnRFbGVt
ZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudCgpOwotCi0gICAg
dmlydHVhbCB2b2lkIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9vbCBtYXJrRm9ySW52YWxp
ZGF0aW9uID0gdHJ1ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShS
ZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3Jh
cGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVh
bCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dCom
LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKLSAgICB2aXJ0dWFs
IEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZs
b2F0UmVjdCgpOyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGFkZFN0b3BzKEdyYWRpZW50RGF0
YSosIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiYpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKFNWR0dyYWRpZW50RWxlbWVudCop
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFkaWVudChHcmFkaWVudERhdGEqLCBTVkdH
cmFkaWVudEVsZW1lbnQqKSBjb25zdCA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX3Nob3Vs
ZENvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMgOiAxOwotICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0
KiwgR3JhZGllbnREYXRhKj4gbV9ncmFkaWVudDsKLQotI2lmIFBMQVRGT1JNKENHKQotICAgIEdy
YXBoaWNzQ29udGV4dCogbV9zYXZlZENvbnRleHQ7Ci0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBt
X2ltYWdlQnVmZmVyOwotI2VuZGlmCi19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlTGluZWFyR3JhZGllbnQuY3BwCShyZXZpc2lvbiA3NTM0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
TGluZWFyR3JhZGllbnQuaCIKLQotI2luY2x1ZGUgIkxpbmVhckdyYWRpZW50QXR0cmlidXRlcy5o
IgotI2luY2x1ZGUgIlNWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVJlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdy
YWRpZW50OjpzX3Jlc291cmNlVHlwZSA9IExpbmVhckdyYWRpZW50UmVzb3VyY2VUeXBlOwotCi1S
ZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50OjpSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdy
YWRpZW50KFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQobm9kZSkKLXsKLX0KLQotUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFk
aWVudDo6flJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQoKQotewotfQotCi12b2lkIFJl
bmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OmNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMo
U1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQpCi17Ci0gICAgbV9hdHRyaWJ1dGVz
ID0gTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzKCk7Ci0gICAgc3RhdGljX2Nhc3Q8U1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KS0+Y29sbGVjdEdyYWRpZW50QXR0cmli
dXRlcyhtX2F0dHJpYnV0ZXMpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3Jh
ZGllbnQ6OmJ1aWxkR3JhZGllbnQoR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEsIFNWR0dyYWRp
ZW50RWxlbWVudCogZ3JhZGllbnRFbGVtZW50KSBjb25zdAotewotICAgIFNWR0xpbmVhckdyYWRp
ZW50RWxlbWVudCogbGluZWFyR3JhZGllbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KTsKLQotICAgIC8vIERldGVybWluZSBn
cmFkaWVudCBzdGFydC9lbmQgcG9pbnRzCi0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50OwotICAg
IEZsb2F0UG9pbnQgZW5kUG9pbnQ7Ci0gICAgbGluZWFyR3JhZGllbnRFbGVtZW50LT5jYWxjdWxh
dGVTdGFydEVuZFBvaW50cyhtX2F0dHJpYnV0ZXMsIHN0YXJ0UG9pbnQsIGVuZFBvaW50KTsKLQot
ICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKHN0YXJ0UG9pbnQs
IGVuZFBvaW50KTsKLSAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5zZXRTcHJlYWRNZXRob2Qo
bV9hdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpKTsKLQotICAgIC8vIEFkZCBzdG9wcwotICAgIGFk
ZFN0b3BzKGdyYWRpZW50RGF0YSwgbV9hdHRyaWJ1dGVzLnN0b3BzKCkpOwotfQotCi19Ci0KLSNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlTGlu
ZWFyR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oCShyZXZpc2lvbiA3NTM0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lm
bmRlZiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50X2gKLSNkZWZpbmUgUmVuZGVyU1ZH
UmVzb3VyY2VMaW5lYXJHcmFkaWVudF9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkxp
bmVhckdyYWRpZW50QXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ7Ci0KLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQgOiBwdWJs
aWMgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudCB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyU1ZHUmVz
b3VyY2VMaW5lYXJHcmFkaWVudChTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQqKTsKLSAgICB2aXJ0
dWFsIH5SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHUmVzb3VyY2VM
aW5lYXJHcmFkaWVudCI7IH0KLQotICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJl
c291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9Ci0gICAgc3RhdGlj
IFJlbmRlclNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKLQotICAgIHZpcnR1YWwgYm9v
bCBib3VuZGluZ0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuYm91bmRpbmdC
b3hNb2RlKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zvcm0o
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIHsgdHJhbnNmb3JtID0gbV9hdHRyaWJ1dGVzLmdy
YWRpZW50VHJhbnNmb3JtKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdEdyYWRpZW50QXR0
cmlidXRlcyhTVkdHcmFkaWVudEVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFk
aWVudChHcmFkaWVudERhdGEqLCBTVkdHcmFkaWVudEVsZW1lbnQqKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwotfTsKLQotfQot
Ci0jZW5kaWYKLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCShyZXZpc2lvbiA3NTM0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAw
OS0yMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBF
TkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFya2VyLmgiCi0KLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIK
LSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHTWFya2VyRWxlbWVudC5oIgot
I2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50
LmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1SZW5kZXJTVkdSZXNvdXJjZVR5cGUgUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXI6OnNfcmVzb3VyY2VUeXBlID0gTWFya2VyUmVzb3VyY2VUeXBlOwotCi1SZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlcjo6UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIoU1ZHTWFya2VyRWxlbWVudCog
bm9kZSkKLSAgICA6IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKG5vZGUpCi17Ci19Ci0KLVJl
bmRlclNWR1Jlc291cmNlTWFya2VyOjp+UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIoKQotewotfQot
Ci12b2lkIFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjpsYXlvdXQoKQotewotICAgIC8vIEludmFs
aWRhdGUgYWxsIHJlc291cmNlcyBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCi0gICAgaWYgKG1fZXZl
ckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkKLSAgICAgICAgcmVtb3ZlQWxsQ2xpZW50
c0Zyb21DYWNoZSgpOwotCi0gICAgLy8gUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyIG92ZXJ3cml0
ZXMgbGF5b3V0KCkuIFdlIG5lZWQgdGhlCi0gICAgLy8gbGF5b3V0aW5nIG9mIFJlbmRlclNWR0Nv
bnRhaW5lciBmb3IgY2FsY3VsYXRpbmcgIGxvY2FsCi0gICAgLy8gdHJhbnNmb3JtYXRpb25zIGFu
ZCByZXBhaW50LgotICAgIFJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0KCk7Ci19Ci0KLXZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9vbCBt
YXJrRm9ySW52YWxpZGF0aW9uKQotewotICAgIG1hcmtBbGxDbGllbnRzRm9ySW52YWxpZGF0aW9u
KG1hcmtGb3JJbnZhbGlkYXRpb24gPyBMYXlvdXRBbmRCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDog
UGFyZW50T25seUludmFsaWRhdGlvbik7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXI6OnJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqIGNsaWVudCwgYm9vbCBtYXJr
Rm9ySW52YWxpZGF0aW9uKQotewotICAgIEFTU0VSVChjbGllbnQpOwotICAgIG1hcmtDbGllbnRG
b3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRhcmllc0lu
dmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwotfQotCi12b2lkIFJlbmRlclNW
R1Jlc291cmNlTWFya2VyOjphcHBseVZpZXdwb3J0Q2xpcChQYWludEluZm8mIHBhaW50SW5mbykK
LXsKLSAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlzKSkKLSAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAobV92aWV3cG9ydCk7Ci19Ci0KLUZsb2F0UmVj
dCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bWFya2VyQm91bmRhcmllcyhjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIG1hcmtlclRyYW5zZm9ybWF0aW9uKSBjb25zdAotewotICAgIEZsb2F0UmVjdCBj
b29yZGluYXRlcyA9IFJlbmRlclNWR0NvbnRhaW5lcjo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKTsKLQotICAgIC8vIE1hcCByZXBhaW50IHJlY3QgaW50byBwYXJlbnQgY29vcmRpbmF0
ZSBzcGFjZSwgaW4gd2hpY2ggdGhlIG1hcmtlciBib3VuZGFyaWVzIGhhdmUgdG8gYmUgZXZhbHVh
dGVkCi0gICAgY29vcmRpbmF0ZXMgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkubWFwUmVjdChj
b29yZGluYXRlcyk7Ci0KLSAgICByZXR1cm4gbWFya2VyVHJhbnNmb3JtYXRpb24ubWFwUmVjdChj
b29yZGluYXRlcyk7Ci19Ci0KLWNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXI6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIEFmZmluZVRy
YW5zZm9ybSB2aWV3cG9ydFRyYW5zbGF0aW9uKHZpZXdwb3J0VHJhbnNmb3JtKCkpOwotICAgIG1f
bG9jYWxUb1BhcmVudFRyYW5zZm9ybSA9IHZpZXdwb3J0VHJhbnNsYXRpb24udHJhbnNsYXRlUmln
aHQobV92aWV3cG9ydC54KCksIG1fdmlld3BvcnQueSgpKTsKLSAgICByZXR1cm4gbV9sb2NhbFRv
UGFyZW50VHJhbnNmb3JtOwotICAgIC8vIElmIHRoaXMgY2xhc3Mgd2VyZSBldmVyIGdpdmVuIGEg
bG9jYWxUcmFuc2Zvcm0oKSwgdGhlbiB0aGUgYWJvdmUgd291bGQgcmVhZDoKLSAgICAvLyByZXR1
cm4gdmlld3BvcnRUcmFuc2Zvcm0oKSAqIGxvY2FsVHJhbnNmb3JtKCkgKiB2aWV3cG9ydFRyYW5z
bGF0aW9uOwotfQotCi1GbG9hdFBvaW50IFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjpyZWZlcmVu
Y2VQb2ludCgpIGNvbnN0Ci17Ci0gICAgU1ZHTWFya2VyRWxlbWVudCogbWFya2VyID0gc3RhdGlj
X2Nhc3Q8U1ZHTWFya2VyRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgQVNTRVJUKG1hcmtlcik7Ci0K
LSAgICByZXR1cm4gRmxvYXRQb2ludChtYXJrZXItPnJlZlgoKS52YWx1ZShtYXJrZXIpLCBtYXJr
ZXItPnJlZlkoKS52YWx1ZShtYXJrZXIpKTsKLX0KLQotZmxvYXQgUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXI6OmFuZ2xlKCkgY29uc3QKLXsKLSAgICBTVkdNYXJrZXJFbGVtZW50KiBtYXJrZXIgPSBz
dGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBBU1NFUlQobWFya2Vy
KTsKLQotICAgIGZsb2F0IGFuZ2xlID0gLTE7Ci0gICAgaWYgKG1hcmtlci0+b3JpZW50VHlwZSgp
ID09IFNWR01hcmtlckVsZW1lbnQ6OlNWR19NQVJLRVJfT1JJRU5UX0FOR0xFKQotICAgICAgICBh
bmdsZSA9IG1hcmtlci0+b3JpZW50QW5nbGUoKS52YWx1ZSgpOwotCi0gICAgcmV0dXJuIGFuZ2xl
OwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6Om1hcmtlclRy
YW5zZm9ybWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgYXV0b0FuZ2xlLCBm
bG9hdCBzdHJva2VXaWR0aCkgY29uc3QKLXsKLSAgICBTVkdNYXJrZXJFbGVtZW50KiBtYXJrZXIg
PSBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBBU1NFUlQobWFy
a2VyKTsKLQotICAgIGZsb2F0IG1hcmtlckFuZ2xlID0gYW5nbGUoKTsKLSAgICBib29sIHVzZVN0
cm9rZVdpZHRoID0gKG1hcmtlci0+bWFya2VyVW5pdHMoKSA9PSBTVkdNYXJrZXJFbGVtZW50OjpT
VkdfTUFSS0VSVU5JVFNfU1RST0tFV0lEVEgpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybTsKLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG9yaWdpbi54KCksIG9yaWdpbi55KCkpOwot
ICAgIHRyYW5zZm9ybS5yb3RhdGUobWFya2VyQW5nbGUgPT0gLTEgPyBhdXRvQW5nbGUgOiBtYXJr
ZXJBbmdsZSk7Ci0gICAgdHJhbnNmb3JtID0gbWFya2VyQ29udGVudFRyYW5zZm9ybWF0aW9uKHRy
YW5zZm9ybSwgcmVmZXJlbmNlUG9pbnQoKSwgdXNlU3Ryb2tlV2lkdGggPyBzdHJva2VXaWR0aCA6
IC0xKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNl
TWFya2VyOjpkcmF3KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKLXsKLSAgICBQYWludEluZm8gaW5mbyhwYWludEluZm8pOwotICAgIGluZm8u
Y29udGV4dC0+c2F2ZSgpOwotICAgIGluZm8uYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtKTsKLSAg
ICBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KGluZm8sIDAsIDApOwotICAgIGluZm8uY29udGV4
dC0+cmVzdG9yZSgpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXI6Om1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNv
bnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBzdHJv
a2VXaWR0aCkgY29uc3QKLXsKLSAgICAvLyBUaGUgJ29yaWdpbicgY29vcmRpbmF0ZSBtYXBzIHRv
IFNWR3MgcmVmWC9yZWZZLCBnaXZlbiBpbiBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgdmll
d3BvcnQgZXN0YWJsaXNoZWQgYnkgdGhlIG1hcmtlcgotICAgIEZsb2F0UG9pbnQgbWFwcGVkT3Jp
Z2luID0gdmlld3BvcnRUcmFuc2Zvcm0oKS5tYXBQb2ludChvcmlnaW4pOwotCi0gICAgQWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybWF0aW9uID0gY29udGVudFRyYW5zZm9ybWF0aW9uOwotICAgIGlm
IChzdHJva2VXaWR0aCAhPSAtMSkKLSAgICAgICAgdHJhbnNmb3JtYXRpb24uc2NhbGVOb25Vbmlm
b3JtKHN0cm9rZVdpZHRoLCBzdHJva2VXaWR0aCk7Ci0KLSAgICB0cmFuc2Zvcm1hdGlvbi50cmFu
c2xhdGUoLW1hcHBlZE9yaWdpbi54KCksIC1tYXBwZWRPcmlnaW4ueSgpKTsKLSAgICByZXR1cm4g
dHJhbnNmb3JtYXRpb247Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlcjo6dmlld3BvcnRUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIFNWR01hcmtlckVsZW1lbnQq
IG1hcmtlciA9IHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQqPihub2RlKCkpOwotICAgIEFT
U0VSVChtYXJrZXIpOwotCi0gICAgcmV0dXJuIG1hcmtlci0+dmlld0JveFRvVmlld1RyYW5zZm9y
bShtX3ZpZXdwb3J0LndpZHRoKCksIG1fdmlld3BvcnQuaGVpZ2h0KCkpOwotfQotCi12b2lkIFJl
bmRlclNWR1Jlc291cmNlTWFya2VyOjpjYWxjVmlld3BvcnQoKQotewotICAgIGlmICghc2VsZk5l
ZWRzTGF5b3V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNWR01hcmtlckVsZW1lbnQqIG1h
cmtlciA9IHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQqPihub2RlKCkpOwotICAgIEFTU0VS
VChtYXJrZXIpOwotCi0gICAgZmxvYXQgdyA9IG1hcmtlci0+bWFya2VyV2lkdGgoKS52YWx1ZSht
YXJrZXIpOwotICAgIGZsb2F0IGggPSBtYXJrZXItPm1hcmtlckhlaWdodCgpLnZhbHVlKG1hcmtl
cik7Ci0gICAgbV92aWV3cG9ydCA9IEZsb2F0UmVjdCgwLCAwLCB3LCBoKTsKLX0KLQotfQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oCShyZXZpc2lvbiA3NTM0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlcl9oCi0jZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlTWFya2VyX2gK
LQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKLSNp
bmNsdWRlICJTVkdNYXJrZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5o
IgotCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci0KLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlTWFya2VyIDog
cHVibGljIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlcihTVkdNYXJrZXJFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIoKTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciI7IH0KLQotICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRh
dGlvbiA9IHRydWUpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7Ci0KLSAgICB2b2lk
IGRyYXcoUGFpbnRJbmZvJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0KLSAgICAvLyBDYWxj
dWxhdGVzIG1hcmtlciBib3VuZGFyaWVzLCBtYXBwZWQgdG8gdGhlIHRhcmdldCBlbGVtZW50J3Mg
Y29vcmRpbmF0ZSBzcGFjZQotICAgIEZsb2F0UmVjdCBtYXJrZXJCb3VuZGFyaWVzKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgbWFya2VyVHJhbnNmb3JtYXRpb24pIGNvbnN0OwotCi0gICAgdmlydHVh
bCB2b2lkIGFwcGx5Vmlld3BvcnRDbGlwKFBhaW50SW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCBs
YXlvdXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ZpZXdwb3J0KCk7Ci0KLSAgICB2aXJ0dWFs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0Owot
ICAgIEFmZmluZVRyYW5zZm9ybSBtYXJrZXJUcmFuc2Zvcm1hdGlvbihjb25zdCBGbG9hdFBvaW50
JiBvcmlnaW4sIGZsb2F0IGFuZ2xlLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdy
YXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0
dXJuIEZsb2F0UmVjdCgpOyB9Ci0KLSAgICBGbG9hdFBvaW50IHJlZmVyZW5jZVBvaW50KCkgY29u
c3Q7Ci0gICAgZmxvYXQgYW5nbGUoKSBjb25zdDsKLSAgICBTVkdNYXJrZXJFbGVtZW50OjpTVkdN
YXJrZXJVbml0c1R5cGUgbWFya2VyVW5pdHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxT
VkdNYXJrZXJFbGVtZW50OjpTVkdNYXJrZXJVbml0c1R5cGU+KHN0YXRpY19jYXN0PFNWR01hcmtl
ckVsZW1lbnQqPihub2RlKCkpLT5tYXJrZXJVbml0cygpKTsgfQotCi0gICAgdmlydHVhbCBSZW5k
ZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJj
ZVR5cGU7IH0KLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBl
OwotCi1wcml2YXRlOgotICAgIC8vIEdlbmVyYXRlcyBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB1
c2FibGUgdG8gcmVuZGVyIG1hcmtlciBjb250ZW50LiBIYW5kbGVzIHNjYWxpbmcgdGhlIG1hcmtl
ciBjb250ZW50Ci0gICAgLy8gYWNvcmRpbmcgdG8gU1ZHcyBtYXJrZXJVbml0cz0ic3Ryb2tlV2lk
dGgiIGNvbmNlcHQsIHdoZW4gYSBzdHJva2VXaWR0aCB2YWx1ZSAhPSAtMSBpcyBwYXNzZWQgaW4u
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYg
b3JpZ2luLCBmbG9hdCBzdHJva2VXaWR0aCA9IC0xKSBjb25zdDsKLQotICAgIEFmZmluZVRyYW5z
Zm9ybSB2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0OwotCi0gICAgbXV0YWJsZSBBZmZpbmVUcmFu
c2Zvcm0gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBtX3ZpZXdwb3J0
OwotfTsKLQotfQotI2VuZGlmCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCShyZXZpc2lvbiA3NTM0
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlci5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0j
aW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFn
ZS5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKLSNpbmNsdWRlICJTVkdNYXNrRWxlbWVudC5o
IgotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdVbml0VHlwZXMu
aCIKLQotI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFy
YW0uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
UmVuZGVyU1ZHUmVzb3VyY2VUeXBlIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjpzX3Jlc291cmNl
VHlwZSA9IE1hc2tlclJlc291cmNlVHlwZTsKLQotUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OlJl
bmRlclNWR1Jlc291cmNlTWFza2VyKFNWR01hc2tFbGVtZW50KiBub2RlKQotICAgIDogUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKLXsKLX0KLQotUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXI6On5SZW5kZXJTVkdSZXNvdXJjZU1hc2tlcigpCi17Ci0gICAgaWYgKG1fbWFza2VyLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVsZXRlQWxsVmFsdWVzKG1fbWFza2VyKTsK
LSAgICBtX21hc2tlci5jbGVhcigpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlTWFza2Vy
OjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbikKLXsK
LSAgICBtX21hc2tDb250ZW50Qm91bmRhcmllcyA9IEZsb2F0UmVjdCgpOwotICAgIGlmICghbV9t
YXNrZXIuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX21hc2tlcik7Ci0g
ICAgICAgIG1fbWFza2VyLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgbWFya0FsbENsaWVudHNGb3JJ
bnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IExheW91dEFuZEJvdW5kYXJpZXNJbnZh
bGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCogY2xpZW50
LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCi17Ci0gICAgQVNTRVJUKGNsaWVudCk7Ci0KLSAg
ICBpZiAobV9tYXNrZXIuY29udGFpbnMoY2xpZW50KSkKLSAgICAgICAgZGVsZXRlIG1fbWFza2Vy
LnRha2UoY2xpZW50KTsKLQotICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBt
YXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJ
bnZhbGlkYXRpb24pOwotfQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4
dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkKLXsKLSAgICBBU1NFUlQo
b2JqZWN0KTsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIEFTU0VS
VChyZXNvdXJjZU1vZGUgPT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHJlc291cmNlTW9kZSk7Ci0jZW5kaWYKLQotICAgIGlmICghbV9tYXNrZXIuY29udGFp
bnMob2JqZWN0KSkKLSAgICAgICAgbV9tYXNrZXIuc2V0KG9iamVjdCwgbmV3IE1hc2tlckRhdGEp
OwotCi0gICAgTWFza2VyRGF0YSogbWFza2VyRGF0YSA9IG1fbWFza2VyLmdldChvYmplY3QpOwot
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwotICAgIFNWR0ltYWdlQnVm
ZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRl
U3lzdGVtKG9iamVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0pOwotCi0gICAgRmxvYXRSZWN0IGFic29s
dXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3Qob2JqZWN0LT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRl
VGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJl
Y3RGb3JSZW5kZXJlcihvYmplY3QsIGFic29sdXRlVGFyZ2V0UmVjdCk7Ci0KLSAgICBpZiAoIW1h
c2tlckRhdGEtPm1hc2tJbWFnZSAmJiAhY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgU1ZHTWFza0VsZW1lbnQqIG1hc2tFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpOwotICAgICAgICBpZiAoIW1hc2tFbGVtZW50KQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghU1ZHSW1hZ2VCdWZmZXJUb29s
czo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVUYXJnZXRSZWN0LCBjbGFtcGVkQWJzb2x1dGVU
YXJnZXRSZWN0LCBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UsIENvbG9yU3BhY2VMaW5lYXJSR0IpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCogbWFz
a0ltYWdlQ29udGV4dCA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Y29udGV4dCgpOwotICAgICAg
ICBBU1NFUlQobWFza0ltYWdlQ29udGV4dCk7Ci0KLSAgICAgICAgLy8gVGhlIHNhdmUvcmVzdG9y
ZSBwYWlyIGlzIG5lZWRlZCBmb3IgY2xpcFRvSW1hZ2VCdWZmZXIgLSBpdCBkb2Vzbid0IHdvcmsg
d2l0aG91dCBpdCBvbiBub24tQ2cgcGxhdGZvcm1zLgotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0
LT5zYXZlKCk7Ci0gICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtY2xhbXBlZEFi
c29sdXRlVGFyZ2V0UmVjdC54KCksIC1jbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LnkoKSk7Ci0g
ICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0K
LSAgICAgICAgZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKG1hc2tlckRhdGEsIG1hc2tFbGVtZW50
LCBvYmplY3QpOwotICAgIH0KLQotICAgIGlmICghbWFza2VyRGF0YS0+bWFza0ltYWdlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGlwVG9JbWFn
ZUJ1ZmZlcihjb250ZXh0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY2xhbXBlZEFic29sdXRlVGFyZ2V0
UmVjdCwgbWFza2VyRGF0YS0+bWFza0ltYWdlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKE1hc2tl
ckRhdGEqIG1hc2tlckRhdGEsIGNvbnN0IFNWR01hc2tFbGVtZW50KiBtYXNrRWxlbWVudCwgUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBtYXNrSW1hZ2VDb250
ZXh0ID0gbWFza2VyRGF0YS0+bWFza0ltYWdlLT5jb250ZXh0KCk7Ci0gICAgQVNTRVJUKG1hc2tJ
bWFnZUNvbnRleHQpOwotCi0gICAgLy8gRXZlbnR1YWxseSBhZGp1c3QgdGhlIG1hc2sgaW1hZ2Ug
Y29udGV4dCBhY2NvcmRpbmcgdG8gdGhlIHRhcmdldCBvYmplY3RCb3VuZGluZ0JveC4KLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKLSAgICBpZiAobWFza0Vs
ZW1lbnQtPm1hc2tDb250ZW50VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVf
T0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94
ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwotICAgICAgICBtYXNrQ29udGVudFRyYW5z
Zm9ybWF0aW9uLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5n
Qm94LnkoKSk7Ci0gICAgICAgIG1hc2tDb250ZW50VHJhbnNmb3JtYXRpb24uc2NhbGVOb25Vbmlm
b3JtKG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgp
KTsKLSAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKG1hc2tDb250ZW50VHJhbnNm
b3JtYXRpb24pOwotICAgIH0KLQotICAgIC8vIERyYXcgdGhlIGNvbnRlbnQgaW50byB0aGUgSW1h
Z2VCdWZmZXIuCi0gICAgZm9yIChOb2RlKiBub2RlID0gbWFza0VsZW1lbnQtPmZpcnN0Q2hpbGQo
KTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghbm9kZS0+aXNT
VkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKS0+aXNTdHlsZWQo
KSB8fCAhcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgICAgIGlmICghc3R5bGUgfHwgc3R5
bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyZW5k
ZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihtYXNrZXJEYXRhLT5tYXNrSW1hZ2UuZ2V0KCksIHJlbmRl
cmVyLCBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uKTsKLSAgICB9Ci0KLSAgICBtYXNrSW1hZ2VD
b250ZXh0LT5yZXN0b3JlKCk7Ci0KLSNpZiAhUExBVEZPUk0oQ0cpCi0gICAgbWFza2VyRGF0YS0+
bWFza0ltYWdlLT50cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbG9y
U3BhY2VMaW5lYXJSR0IpOwotI2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgdGhlIGx1bWluYW5jZSBt
YXNrLgotICAgIEludFJlY3QgbWFza0ltYWdlUmVjdChJbnRQb2ludCgpLCBtYXNrZXJEYXRhLT5t
YXNrSW1hZ2UtPnNpemUoKSk7Ci0gICAgUmVmUHRyPEJ5dGVBcnJheT4gc3JjUGl4ZWxBcnJheSA9
IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKG1hc2tJbWFn
ZVJlY3QpOwotCi0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXkt
Pmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNl
dCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgdW5zaWdu
ZWQgY2hhciBhID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsT2Zmc2V0ICsgMyk7Ci0gICAgICAg
IGlmICghYSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIHIg
PSBzcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxPZmZzZXQpOwotICAgICAgICB1bnNpZ25lZCBjaGFy
IGcgPSBzcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAgdW5zaWdu
ZWQgY2hhciBiID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsT2Zmc2V0ICsgMik7Ci0KLSAgICAg
ICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAq
ICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9m
ZnNldCArIDMsIGx1bWEpOwotICAgIH0KLQotICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+cHV0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY1BpeGVsQXJyYXkuZ2V0KCksIG1hc2tJbWFnZVJlY3Qu
c2l6ZSgpLCBtYXNrSW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlcjo6Y2FsY3VsYXRlTWFza0NvbnRlbnRSZXBhaW50UmVjdCgpCi17Ci0gICAg
Zm9yIChOb2RlKiBjaGlsZE5vZGUgPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGROb2RlOyBj
aGlsZE5vZGUgPSBjaGlsZE5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFjaGls
ZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGRO
b2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgICAgIGlm
ICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNpYmlsaXR5
KCkgIT0gVklTSUJMRSkKLSAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9tYXNrQ29u
dGVudEJvdW5kYXJpZXMudW5pdGUocmVuZGVyZXItPmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5t
YXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7Ci0gICAg
fQotfQotCi1GbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OnJlc291cmNlQm91bmRp
bmdCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgU1ZHTWFza0VsZW1lbnQqIG1hc2tF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpOwotICAgIEFTU0VS
VChtYXNrRWxlbWVudCk7Ci0KLSAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmpl
Y3QtPm9iamVjdEJvdW5kaW5nQm94KCk7Ci0gICAgRmxvYXRSZWN0IG1hc2tCb3VuZGFyaWVzID0g
bWFza0VsZW1lbnQtPm1hc2tCb3VuZGluZ0JveChvYmplY3RCb3VuZGluZ0JveCk7Ci0KLSAgICAv
LyBSZXNvdXJjZSB3YXMgbm90IGxheW91dGVkIHlldC4gR2l2ZSBiYWNrIGNsaXBwaW5nIHJlY3Qg
b2YgdGhlIG1hc2suCi0gICAgaWYgKHNlbGZOZWVkc0xheW91dCgpKQotICAgICAgICByZXR1cm4g
bWFza0JvdW5kYXJpZXM7Ci0KLSAgICBpZiAobV9tYXNrQ29udGVudEJvdW5kYXJpZXMuaXNFbXB0
eSgpKQotICAgICAgICBjYWxjdWxhdGVNYXNrQ29udGVudFJlcGFpbnRSZWN0KCk7Ci0KLSAgICBG
bG9hdFJlY3QgbWFza1JlY3QgPSBtX21hc2tDb250ZW50Qm91bmRhcmllczsKLSAgICBpZiAobWFz
a0VsZW1lbnQtPm1hc2tDb250ZW50VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZ
UEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9y
bTsKLSAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54KCksIG9i
amVjdEJvdW5kaW5nQm94LnkoKSk7Ci0gICAgICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0o
b2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwot
ICAgICAgICBtYXNrUmVjdCA9IHRyYW5zZm9ybS5tYXBSZWN0KG1hc2tSZWN0KTsKLSAgICB9Ci0K
LSAgICBtYXNrUmVjdC5pbnRlcnNlY3QobWFza0JvdW5kYXJpZXMpOwotICAgIHJldHVybiBtYXNr
UmVjdDsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oCShyZXZpc2lv
biA3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZU1h
c2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcl9oCi0jZGVmaW5lIFJlbmRlclNW
R1Jlc291cmNlTWFza2VyX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuaCIKLSNpbmNsdWRlICJTVkdNYXNrRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1VuaXRU
eXBlcy5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IE1hc2tlckRhdGEgewotICAgIE93
blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlOwotfTsKLQotY2xhc3MgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIgOiBwdWJsaWMgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIgewotcHVibGljOgot
ICAgIFJlbmRlclNWR1Jlc291cmNlTWFza2VyKFNWR01hc2tFbGVtZW50Kik7Ci0gICAgdmlydHVh
bCB+UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIoKTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciog
cmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciI7IH0K
LQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0Zv
ckludmFsaWRhdGlvbiA9IHRydWUpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9t
Q2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7Ci0g
ICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUq
LCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2
aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopOwotCi0g
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtYXNrVW5pdHMoKSBjb25zdCB7IHJldHVybiB0
b1VuaXRUeXBlKHN0YXRpY19jYXN0PFNWR01hc2tFbGVtZW50Kj4obm9kZSgpKS0+bWFza1VuaXRz
KCkpOyB9Ci0gICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtYXNrQ29udGVudFVuaXRzKCkg
Y29uc3QgeyByZXR1cm4gdG9Vbml0VHlwZShzdGF0aWNfY2FzdDxTVkdNYXNrRWxlbWVudCo+KG5v
ZGUoKSktPm1hc2tDb250ZW50VW5pdHMoKSk7IH0KLQotICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVz
b3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9
Ci0gICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKLQotcHJp
dmF0ZToKLSAgICB2b2lkIGRyYXdDb250ZW50SW50b01hc2tJbWFnZShNYXNrZXJEYXRhKiwgY29u
c3QgU1ZHTWFza0VsZW1lbnQqLCBSZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIGNhbGN1bGF0ZU1h
c2tDb250ZW50UmVwYWludFJlY3QoKTsKLQotICAgIEZsb2F0UmVjdCBtX21hc2tDb250ZW50Qm91
bmRhcmllczsKLSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIE1hc2tlckRhdGEqPiBtX21hc2tl
cjsKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShyZXZpc2lvbiA3
NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIgotCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybkF0dHJpYnV0ZXMu
aCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCi0jaW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJU
b29scy5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1SZW5kZXJTVkdSZXNvdXJjZVR5cGUgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpz
X3Jlc291cmNlVHlwZSA9IFBhdHRlcm5SZXNvdXJjZVR5cGU7Ci0KLVJlbmRlclNWR1Jlc291cmNl
UGF0dGVybjo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuKFNWR1BhdHRlcm5FbGVtZW50KiBub2Rl
KQotICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKLSAgICAsIG1fc2hvdWxk
Q29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzKHRydWUpCi17Ci19Ci0KLVJlbmRlclNWR1Jlc291cmNl
UGF0dGVybjo6flJlbmRlclNWR1Jlc291cmNlUGF0dGVybigpCi17Ci0gICAgaWYgKG1fcGF0dGVy
bi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3Bh
dHRlcm4pOwotICAgIG1fcGF0dGVybi5jbGVhcigpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291
cmNlUGF0dGVybjo6cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlk
YXRpb24pCi17Ci0gICAgaWYgKCFtX3BhdHRlcm4uaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlbGV0
ZUFsbFZhbHVlcyhtX3BhdHRlcm4pOwotICAgICAgICBtX3BhdHRlcm4uY2xlYXIoKTsKLSAgICB9
Ci0KLSAgICBtX3Nob3VsZENvbGxlY3RQYXR0ZXJuQXR0cmlidXRlcyA9IHRydWU7Ci0gICAgbWFy
a0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IFJlcGFpbnRJ
bnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKLX0KLQotdm9pZCBSZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm46OnJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqIGNs
aWVudCwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uKQotewotICAgIEFTU0VSVChjbGllbnQpOwot
Ci0gICAgaWYgKG1fcGF0dGVybi5jb250YWlucyhjbGllbnQpKQotICAgICAgICBkZWxldGUgbV9w
YXR0ZXJuLnRha2UoY2xpZW50KTsKLQotICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xp
ZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gUmVwYWludEludmFsaWRhdGlvbiA6IFBhcmVudE9u
bHlJbnZhbGlkYXRpb24pOwotfQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBw
bHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBHcmFw
aGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpCi17Ci0g
ICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLSAgICBBU1NFUlQoY29udGV4
dCk7Ci0gICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwotCi0g
ICAgLy8gQmUgc3VyZSB0byBzeW5jaHJvbml6ZSBhbGwgU1ZHIHByb3BlcnRpZXMgb24gdGhlIHBh
dHRlcm5FbGVtZW50IF9iZWZvcmVfIHByb2Nlc3NpbmcgYW55IGZ1cnRoZXIuCi0gICAgLy8gT3Ro
ZXJ3aGlzZSB0aGUgY2FsbCB0byBjb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMoKSBiZWxvdywgbWF5
IGNhdXNlIHRoZSBTVkcgRE9NIHByb3BlcnR5Ci0gICAgLy8gc3luY2hyb25pemF0aW9uIHRvIGtp
Y2sgaW4sIHdoaWNoIGNhdXNlcyByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCkgdG8gYmUgY2Fs
bGVkLCB3aGljaCBpbiB0dXJuIGRlbGV0ZXMgb3VyCi0gICAgLy8gUGF0dGVybkRhdGEgb2JqZWN0
ISBMZWF2aW5nIG91dCB0aGUgbGluZSBiZWxvdyB3aWxsIGNhdXNlIHN2Zy9keW5hbWljLXVwZGF0
ZXMvU1ZHUGF0dGVybkVsZW1lbnQtc3ZnZG9tKiB0byBjcmFzaC4KLSAgICBTVkdQYXR0ZXJuRWxl
bWVudCogcGF0dGVybkVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdQYXR0ZXJuRWxlbWVudCo+KG5v
ZGUoKSk7Ci0gICAgaWYgKCFwYXR0ZXJuRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKG1fc2hvdWxkQ29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzKSB7Ci0gICAgICAgIHBh
dHRlcm5FbGVtZW50LT51cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShhbnlRTmFtZSgpKTsKLQot
ICAgICAgICBtX2F0dHJpYnV0ZXMgPSBQYXR0ZXJuQXR0cmlidXRlcygpOwotICAgICAgICBwYXR0
ZXJuRWxlbWVudC0+Y29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzKG1fYXR0cmlidXRlcyk7Ci0gICAg
ICAgIG1fc2hvdWxkQ29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzID0gZmFsc2U7Ci0gICAgfQotCi0g
ICAgLy8gU3BlYzogV2hlbiB0aGUgZ2VvbWV0cnkgb2YgdGhlIGFwcGxpY2FibGUgZWxlbWVudCBo
YXMgbm8gd2lkdGggb3IgaGVpZ2h0IGFuZCBvYmplY3RCb3VuZGluZ0JveCBpcyBzcGVjaWZpZWQs
Ci0gICAgLy8gdGhlbiB0aGUgZ2l2ZW4gZWZmZWN0IChlLmcuIGEgZ3JhZGllbnQgb3IgYSBmaWx0
ZXIpIHdpbGwgYmUgaWdub3JlZC4KLSAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBv
YmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7Ci0gICAgaWYgKG1fYXR0cmlidXRlcy5ib3VuZGlu
Z0JveE1vZGUoKSAmJiBvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghbV9wYXR0ZXJuLmNvbnRhaW5zKG9iamVjdCkpCi0gICAgICAg
IG1fcGF0dGVybi5zZXQob2JqZWN0LCBuZXcgUGF0dGVybkRhdGEpOwotCi0gICAgUGF0dGVybkRh
dGEqIHBhdHRlcm5EYXRhID0gbV9wYXR0ZXJuLmdldChvYmplY3QpOwotICAgIGlmICghcGF0dGVy
bkRhdGEtPnBhdHRlcm4pIHsKLSAgICAgICAgLy8gSWYgd2UgY291bGRuJ3QgZGV0ZXJtaW5lIHRo
ZSBwYXR0ZXJuIGNvbnRlbnQgZWxlbWVudCByb290LCBzdG9wIGhlcmUuCi0gICAgICAgIGlmICgh
bV9hdHRyaWJ1dGVzLnBhdHRlcm5Db250ZW50RWxlbWVudCgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIC8vIENvbXB1dGUgYWxsIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlv
bnMgdG8gYnVpbGQgdGhlIHRpbGUgaW1hZ2UgJiB0aGUgcGF0dGVybi4KLSAgICAgICAgRmxvYXRS
ZWN0IHRpbGVCb3VuZGFyaWVzOwotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdGlsZUltYWdlVHJh
bnNmb3JtOwotICAgICAgICBpZiAoIWJ1aWxkVGlsZUltYWdlVHJhbnNmb3JtKG9iamVjdCwgbV9h
dHRyaWJ1dGVzLCBwYXR0ZXJuRWxlbWVudCwgdGlsZUJvdW5kYXJpZXMsIHRpbGVJbWFnZVRyYW5z
Zm9ybSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIGFic29sdXRlVHJhbnNmb3JtOwotICAgICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxj
dWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbShvYmplY3Qs
IGFic29sdXRlVHJhbnNmb3JtKTsKLQotICAgICAgICBGbG9hdFJlY3QgYWJzb2x1dGVUaWxlQm91
bmRhcmllcyA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QodGlsZUJvdW5kYXJpZXMpOwotCi0g
ICAgICAgIC8vIEJ1aWxkIHRpbGUgaW1hZ2UuCi0gICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4g
dGlsZUltYWdlID0gY3JlYXRlVGlsZUltYWdlKG9iamVjdCwgbV9hdHRyaWJ1dGVzLCB0aWxlQm91
bmRhcmllcywgYWJzb2x1dGVUaWxlQm91bmRhcmllcywgdGlsZUltYWdlVHJhbnNmb3JtKTsKLSAg
ICAgICAgaWYgKCF0aWxlSW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgUmVmUHRyPEltYWdlPiBjb3BpZWRJbWFnZSA9IHRpbGVJbWFnZS0+Y29weUltYWdlKCk7Ci0g
ICAgICAgIGlmICghY29waWVkSW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgLy8gQnVpbGQgcGF0dGVybi4KLSAgICAgICAgcGF0dGVybkRhdGEtPnBhdHRlcm4gPSBQ
YXR0ZXJuOjpjcmVhdGUoY29waWVkSW1hZ2UsIHRydWUsIHRydWUpOwotICAgICAgICBpZiAoIXBh
dHRlcm5EYXRhLT5wYXR0ZXJuKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IC8vIENvbXB1dGUgcGF0dGVybiBzcGFjZSB0cmFuc2Zvcm1hdGlvbi4KLSAgICAgICAgcGF0dGVy
bkRhdGEtPnRyYW5zZm9ybS50cmFuc2xhdGUodGlsZUJvdW5kYXJpZXMueCgpLCB0aWxlQm91bmRh
cmllcy55KCkpOwotICAgICAgICBwYXR0ZXJuRGF0YS0+dHJhbnNmb3JtLnNjYWxlKHRpbGVCb3Vu
ZGFyaWVzLndpZHRoKCkgLyBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLndpZHRoKCksIHRpbGVCb3Vu
ZGFyaWVzLmhlaWdodCgpIC8gYWJzb2x1dGVUaWxlQm91bmRhcmllcy5oZWlnaHQoKSk7Ci0KLSAg
ICAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPSBtX2F0dHJpYnV0ZXMucGF0
dGVyblRyYW5zZm9ybSgpOwotICAgICAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJZGVudGl0
eSgpKQotICAgICAgICAgICAgcGF0dGVybkRhdGEtPnRyYW5zZm9ybS5tdWx0aXBseShwYXR0ZXJu
VHJhbnNmb3JtKTsKLQotICAgICAgICBwYXR0ZXJuRGF0YS0+cGF0dGVybi0+c2V0UGF0dGVyblNw
YWNlVHJhbnNmb3JtKHBhdHRlcm5EYXRhLT50cmFuc2Zvcm0pOwotICAgIH0KLQotICAgIC8vIERy
YXcgcGF0dGVybgotICAgIGNvbnRleHQtPnNhdmUoKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0
eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdTdHlsZSgpOwotICAgIEFTU0VSVChzdmdTdHlsZSk7
Ci0KLSAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7Ci0gICAgICAgIGNv
bnRleHQtPnNldEFscGhhKHN2Z1N0eWxlLT5maWxsT3BhY2l0eSgpKTsKLSAgICAgICAgY29udGV4
dC0+c2V0RmlsbFBhdHRlcm4ocGF0dGVybkRhdGEtPnBhdHRlcm4pOwotICAgICAgICBjb250ZXh0
LT5zZXRGaWxsUnVsZShzdmdTdHlsZS0+ZmlsbFJ1bGUoKSk7Ci0gICAgfSBlbHNlIGlmIChyZXNv
dXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkgewotICAgICAgICBpZiAoc3ZnU3R5bGUtPnZl
Y3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRSkKLSAgICAgICAgICAgIHBhdHRl
cm5EYXRhLT5wYXR0ZXJuLT5zZXRQYXR0ZXJuU3BhY2VUcmFuc2Zvcm0odHJhbnNmb3JtT25Ob25T
Y2FsaW5nU3Ryb2tlKG9iamVjdCwgcGF0dGVybkRhdGEtPnRyYW5zZm9ybSkpOwotICAgICAgICBj
b250ZXh0LT5zZXRBbHBoYShzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpKTsKLSAgICAgICAgY29u
dGV4dC0+c2V0U3Ryb2tlUGF0dGVybihwYXR0ZXJuRGF0YS0+cGF0dGVybik7Ci0gICAgICAgIFNW
R1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUs
IG9iamVjdCk7Ci0gICAgfQotCi0gICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9k
ZSkgewotICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoVGV4dE1vZGVGaWxsKTsKLQotI2lm
IFBMQVRGT1JNKENHKQotICAgICAgICAgICAgY29udGV4dC0+YXBwbHlGaWxsUGF0dGVybigpOwot
I2VuZGlmCi0gICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1v
ZGUpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShUZXh0TW9kZVN0
cm9rZSk7Ci0KLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgICAgIGNvbnRleHQtPmFwcGx5U3Ry
b2tlUGF0dGVybigpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCk7
Ci0gICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwotCi0gICAg
aWYgKHBhdGggJiYgIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7Ci0gICAgICAg
IGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAgICBjb250ZXh0
LT5maWxsUGF0aCgqcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5
VG9TdHJva2VNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7Ci0g
ICAgfQotCi0gICAgY29udGV4dC0+cmVzdG9yZSgpOwotfQotCi1zdGF0aWMgaW5saW5lIEZsb2F0
UmVjdCBjYWxjdWxhdGVQYXR0ZXJuQm91bmRhcmllcyhjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYg
YXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVkdQYXR0ZXJuRWxl
bWVudCogcGF0dGVybkVsZW1lbnQpCi17Ci0gICAgQVNTRVJUKHBhdHRlcm5FbGVtZW50KTsKLQot
ICAgIGlmIChhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKQotICAgICAgICByZXR1cm4gRmxv
YXRSZWN0KGF0dHJpYnV0ZXMueCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGlu
Z0JveC53aWR0aCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZXMueSgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGlu
Z0JveC5oZWlnaHQoKSArIG9iamVjdEJvdW5kaW5nQm94LnkoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBhdHRyaWJ1dGVzLndpZHRoKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJv
dW5kaW5nQm94LndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5o
ZWlnaHQoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkp
OwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdChhdHRyaWJ1dGVzLngoKS52YWx1ZShwYXR0ZXJuRWxl
bWVudCksCi0gICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnkoKS52YWx1ZShwYXR0ZXJu
RWxlbWVudCksCi0gICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLndpZHRoKCkudmFsdWUo
cGF0dGVybkVsZW1lbnQpLAotICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5oZWlnaHQo
KS52YWx1ZShwYXR0ZXJuRWxlbWVudCkpOwotfQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlUGF0
dGVybjo6YnVpbGRUaWxlSW1hZ2VUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBQYXR0ZXJuQXR0cmlidXRlcyYgYXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCog
cGF0dGVybkVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRmxvYXRSZWN0JiBwYXR0ZXJuQm91bmRhcmllcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0mIHRpbGVJbWFnZVRyYW5zZm9ybSkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyZXIpOwot
ICAgIEFTU0VSVChwYXR0ZXJuRWxlbWVudCk7Ci0KLSAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRp
bmdCb3ggPSByZW5kZXJlci0+b2JqZWN0Qm91bmRpbmdCb3goKTsKLSAgICBwYXR0ZXJuQm91bmRh
cmllcyA9IGNhbGN1bGF0ZVBhdHRlcm5Cb3VuZGFyaWVzKGF0dHJpYnV0ZXMsIG9iamVjdEJvdW5k
aW5nQm94LCBwYXR0ZXJuRWxlbWVudCk7IAotICAgIGlmIChwYXR0ZXJuQm91bmRhcmllcy53aWR0
aCgpIDw9IDAgfHwgcGF0dGVybkJvdW5kYXJpZXMuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdCb3hDVE0gPSBwYXR0ZXJuRWxl
bWVudC0+dmlld0JveFRvVmlld1RyYW5zZm9ybShwYXR0ZXJuRWxlbWVudC0+dmlld0JveCgpLCBw
YXR0ZXJuRWxlbWVudC0+cHJlc2VydmVBc3BlY3RSYXRpbygpLCBwYXR0ZXJuQm91bmRhcmllcy53
aWR0aCgpLCBwYXR0ZXJuQm91bmRhcmllcy5oZWlnaHQoKSk7Ci0KLSAgICAvLyBBcHBseSB2aWV3
Qm94L29iamVjdEJvdW5kaW5nQm94IHRyYW5zZm9ybWF0aW9ucy4KLSAgICBpZiAoIXZpZXdCb3hD
VE0uaXNJZGVudGl0eSgpKQotICAgICAgICB0aWxlSW1hZ2VUcmFuc2Zvcm0gPSB2aWV3Qm94Q1RN
OwotICAgIGVsc2UgaWYgKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlQ29udGVudCgpKSB7Ci0g
ICAgICAgIHRpbGVJbWFnZVRyYW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgp
LCBvYmplY3RCb3VuZGluZ0JveC55KCkpOwotICAgICAgICB0aWxlSW1hZ2VUcmFuc2Zvcm0uc2Nh
bGUob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkp
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1QYXNzT3duUHRyPEltYWdlQnVmZmVy
PiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmNyZWF0ZVRpbGVJbWFnZShSZW5kZXJPYmplY3Qq
IG9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiB0aWxlQm91bmRhcmllcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UmVjdCYgYWJzb2x1dGVUaWxlQm91bmRhcmllcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdAotewotICAgIEFTU0VSVChvYmpl
Y3QpOwotCi0gICAgLy8gQ2xhbXAgdGlsZSBpbWFnZSBzaXplIGFnYWluc3QgU1ZHIHZpZXdwb3J0
IHNpemUsIGFzIGxhc3QgcmVzb3J0LCB0byBhdm9pZCBhbGxvY2F0aW5nIGh1Z2UgaW1hZ2UgYnVm
ZmVycy4KLSAgICBGbG9hdFJlY3QgY29udGVudEJveFJlY3QgPSBTVkdSZW5kZXJTdXBwb3J0Ojpm
aW5kVHJlZVJvb3RPYmplY3Qob2JqZWN0KS0+Y29udGVudEJveFJlY3QoKTsKLQotICAgIEZsb2F0
UmVjdCBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcyA9IGFic29sdXRlVGlsZUJvdW5kYXJp
ZXM7Ci0gICAgaWYgKGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLndpZHRoKCkgPiBjb250
ZW50Qm94UmVjdC53aWR0aCgpKQotICAgICAgICBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmll
cy5zZXRXaWR0aChjb250ZW50Qm94UmVjdC53aWR0aCgpKTsKLQotICAgIGlmIChjbGFtcGVkQWJz
b2x1dGVUaWxlQm91bmRhcmllcy5oZWlnaHQoKSA+IGNvbnRlbnRCb3hSZWN0LmhlaWdodCgpKQot
ICAgICAgICBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcy5zZXRIZWlnaHQoY29udGVudEJv
eFJlY3QuaGVpZ2h0KCkpOwotCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiB0aWxlSW1hZ2U7Ci0K
LSAgICBpZiAoIVNWR0ltYWdlQnVmZmVyVG9vbHM6OmNyZWF0ZUltYWdlQnVmZmVyKGFic29sdXRl
VGlsZUJvdW5kYXJpZXMsIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCB0aWxlSW1hZ2Us
IENvbG9yU3BhY2VEZXZpY2VSR0IpKQotICAgICAgICByZXR1cm4gUGFzc093blB0cjxJbWFnZUJ1
ZmZlcj4oKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCogdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJ
bWFnZS0+Y29udGV4dCgpOwotICAgIEFTU0VSVCh0aWxlSW1hZ2VDb250ZXh0KTsKLQotICAgIC8v
IFRoZSBpbWFnZSBidWZmZXIgcmVwcmVzZW50cyB0aGUgZmluYWwgcmVuZGVyZWQgc2l6ZSwgc28g
dGhlIGNvbnRlbnQgaGFzIHRvIGJlIHNjYWxlZCAodG8gYXZvaWQgcGl4ZWxhdGlvbikuCi0gICAg
dGlsZUltYWdlQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKGFic29sdXRlVGlsZUJvdW5kYXJpZXMu
d2lkdGgoKSAvIHRpbGVCb3VuZGFyaWVzLndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFic29sdXRlVGlsZUJvdW5kYXJpZXMuaGVpZ2h0KCkgLyB0aWxlQm91
bmRhcmllcy5oZWlnaHQoKSkpOwotCi0gICAgLy8gQXBwbHkgdGlsZSBpbWFnZSB0cmFuc2Zvcm1h
dGlvbnMuCi0gICAgaWYgKCF0aWxlSW1hZ2VUcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQotICAgICAg
ICB0aWxlSW1hZ2VDb250ZXh0LT5jb25jYXRDVE0odGlsZUltYWdlVHJhbnNmb3JtKTsKLQotICAg
IEFmZmluZVRyYW5zZm9ybSBjb250ZW50VHJhbnNmb3JtYXRpb247Ci0KLSAgICAvLyBEcmF3IHRo
ZSBjb250ZW50IGludG8gdGhlIEltYWdlQnVmZmVyLgotICAgIGZvciAoTm9kZSogbm9kZSA9IGF0
dHJpYnV0ZXMucGF0dGVybkNvbnRlbnRFbGVtZW50KCktPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5pc1NWR0VsZW1l
bnQoKSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpLT5pc1N0eWxlZCgpIHx8ICFu
b2RlLT5yZW5kZXJlcigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFNWR0ltYWdl
QnVmZmVyVG9vbHM6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKHRpbGVJbWFnZS5nZXQoKSwg
bm9kZS0+cmVuZGVyZXIoKSwgY29udGVudFRyYW5zZm9ybWF0aW9uKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdGlsZUltYWdlLnJlbGVhc2UoKTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgJ
KHJldmlzaW9uIDc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpZm5kZWYgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuX2gKLSNkZWZp
bmUgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiUGF0dGVybkF0
dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgotI2lu
Y2x1ZGUgIlNWR1BhdHRlcm5FbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCi0K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgUGF0dGVybkRhdGEgewotICAgIFJlZlB0cjxQYXR0
ZXJuPiBwYXR0ZXJuOwotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci19OwotCi1jbGFz
cyBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4gOiBwdWJsaWMgUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIgewotcHVibGljOgotICAgIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybihTVkdQYXR0ZXJu
RWxlbWVudCopOwotICAgIHZpcnR1YWwgflJlbmRlclNWR1Jlc291cmNlUGF0dGVybigpOwotCi0g
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRl
clNWR1Jlc291cmNlUGF0dGVybiI7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxDbGll
bnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9y
SW52YWxpZGF0aW9uID0gdHJ1ZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBz
aG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VN
b2RlLCBjb25zdCBQYXRoKik7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGlu
Z0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotCi0gICAgdmlydHVh
bCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19y
ZXNvdXJjZVR5cGU7IH0KLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3Vy
Y2VUeXBlOwotCi1wcml2YXRlOgotICAgIGJvb2wgYnVpbGRUaWxlSW1hZ2VUcmFuc2Zvcm0oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmLCBjb25zdCBTVkdQYXR0ZXJuRWxl
bWVudCosIEZsb2F0UmVjdCYgcGF0dGVybkJvdW5kYXJpZXMsIEFmZmluZVRyYW5zZm9ybSYgdGls
ZUltYWdlVHJhbnNmb3JtKSBjb25zdDsKLQotICAgIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZVRpbGVJbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZUJvdW5kYXJpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUaWxlQm91bmRhcmll
cywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0aWxlSW1hZ2VUcmFuc2Zvcm0pIGNvbnN0OwotCi0g
ICAgYm9vbCBtX3Nob3VsZENvbGxlY3RQYXR0ZXJuQXR0cmlidXRlcyA6IDE7Ci0gICAgUGF0dGVy
bkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwotICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgUGF0
dGVybkRhdGEqPiBtX3BhdHRlcm47Ci19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlUmFkaWFsR3JhZGllbnQuY3BwCShyZXZpc2lvbiA3NTM0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
UmFkaWFsR3JhZGllbnQuaCIKLQotI2luY2x1ZGUgIlJhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5o
IgotI2luY2x1ZGUgIlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVJlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdy
YWRpZW50OjpzX3Jlc291cmNlVHlwZSA9IFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBlOwotCi1S
ZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50OjpSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdy
YWRpZW50KFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCogbm9kZSkKLSAgICA6IFJlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQobm9kZSkKLXsKLX0KLQotUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFk
aWVudDo6flJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQoKQotewotfQotCi12b2lkIFJl
bmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQ6OmNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMo
U1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQpCi17Ci0gICAgbV9hdHRyaWJ1dGVz
ID0gUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzKCk7Ci0gICAgc3RhdGljX2Nhc3Q8U1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KS0+Y29sbGVjdEdyYWRpZW50QXR0cmli
dXRlcyhtX2F0dHJpYnV0ZXMpOwotfQotCi12b2lkIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3Jh
ZGllbnQ6OmJ1aWxkR3JhZGllbnQoR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEsIFNWR0dyYWRp
ZW50RWxlbWVudCogZ3JhZGllbnRFbGVtZW50KSBjb25zdAotewotICAgIFNWR1JhZGlhbEdyYWRp
ZW50RWxlbWVudCogcmFkaWFsR3JhZGllbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KTsKLQotICAgIC8vIERldGVybWluZSBn
cmFkaWVudCBmb2NhbC9jZW50ZXIgcG9pbnRzIGFuZCByYWRpdXMKLSAgICBGbG9hdFBvaW50IGZv
Y2FsUG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludDsKLSAgICBmbG9hdCByYWRpdXM7
Ci0gICAgcmFkaWFsR3JhZGllbnRFbGVtZW50LT5jYWxjdWxhdGVGb2NhbENlbnRlclBvaW50c0Fu
ZFJhZGl1cyhtX2F0dHJpYnV0ZXMsIGZvY2FsUG9pbnQsIGNlbnRlclBvaW50LCByYWRpdXMpOwot
Ci0gICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoZm9jYWxQb2lu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvLyBT
VkcgZG9lcyBub3Qgc3VwcG9ydCBhICJmb2N1cyByYWRpdXMiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyUG9pbnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzKTsKLQotICAgIGdyYWRpZW50RGF0
YS0+Z3JhZGllbnQtPnNldFNwcmVhZE1ldGhvZChtX2F0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCkp
OwotCi0gICAgLy8gQWRkIHN0b3BzCi0gICAgYWRkU3RvcHMoZ3JhZGllbnREYXRhLCBtX2F0dHJp
YnV0ZXMuc3RvcHMoKSk7Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50
LmgJKHJldmlzaW9uIDc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlUmFkaWFs
R3JhZGllbnRfaAotI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50X2gKLQot
I2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzLmgiCi0j
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDsKLQotY2xhc3MgUmVuZGVyU1ZH
UmVzb3VyY2VSYWRpYWxHcmFkaWVudCA6IHB1YmxpYyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
IHsKLXB1YmxpYzoKLSAgICBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50KFNWR1JhZGlh
bEdyYWRpZW50RWxlbWVudCopOwotICAgIHZpcnR1YWwgflJlbmRlclNWR1Jlc291cmNlUmFkaWFs
R3JhZGllbnQoKTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0
IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50IjsgfQotCi0gICAgdmly
dHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4g
c19yZXNvdXJjZVR5cGU7IH0KLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVz
b3VyY2VUeXBlOwotCi0gICAgdmlydHVhbCBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBjYWxjdWxhdGVHcmFkaWVudFRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkg
eyB0cmFuc2Zvcm0gPSBtX2F0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKTsgfQotICAgIHZp
cnR1YWwgdm9pZCBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKFNWR0dyYWRpZW50RWxlbWVudCop
OwotICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KEdyYWRpZW50RGF0YSosIFNWR0dyYWRp
ZW50RWxlbWVudCopIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFJhZGlhbEdyYWRpZW50QXR0cmli
dXRlcyBtX2F0dHJpYnV0ZXM7Ci19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmNwcAkocmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFC
TEUoU1ZHKQotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgotCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNs
dWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0KLSNpZiBQTEFURk9STShTS0lBKQotI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dFNraWEuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVJlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnNfcmVz
b3VyY2VUeXBlID0gU29saWRDb2xvclJlc291cmNlVHlwZTsKLQotUmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yOjpSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IoKQotewotfQotCi1SZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3I6On5SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IoKQotewot
fQotCi1ib29sIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6YXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBHcmFwaGljc0NvbnRleHQqJiBj
b250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpCi17Ci0gICAgLy8gV2UgYXJlIE5P
VCBhbGxvd2VkIHRvIEFTU0VSVChvYmplY3QpIGhlcmUsIHVubGlrZSBhbGwgb3RoZXIgcmVzb3Vy
Y2VzLgotICAgIC8vIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciBpcyB0aGUgb25seSByZXNv
dXJjZSB3aGljaCBtYXkgYmUgdXNlZCBmcm9tIEhUTUwsIHdoZW4gcmVuZGVyaW5nCi0gICAgLy8g
U1ZHIEZvbnRzIGZvciBhIEhUTUwgZG9jdW1lbnQuIFRoaXMgd2lsbCBiZSBpbmRpY2F0ZWQgYnkg
YSBudWxsIFJlbmRlck9iamVjdCBwb2ludGVyLgotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBB
U1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7Ci0KLSAgICBjb25zdCBT
VkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSA/IHN0eWxlLT5zdmdTdHlsZSgpIDogMDsK
LSAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdHlsZSA/IHN0eWxlLT5jb2xvclNwYWNlKCkg
OiBDb2xvclNwYWNlRGV2aWNlUkdCOwotCi0gICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9G
aWxsTW9kZSkgewotICAgICAgICBjb250ZXh0LT5zZXRBbHBoYShzdmdTdHlsZSA/IHN2Z1N0eWxl
LT5maWxsT3BhY2l0eSgpIDogMS4wZik7Ci0gICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvciht
X2NvbG9yLCBjb2xvclNwYWNlKTsKLSAgICAgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUoc3ZnU3R5
bGUgPyBzdmdTdHlsZS0+ZmlsbFJ1bGUoKSA6IFJVTEVfTk9OWkVSTyk7Ci0KLSAgICAgICAgaWYg
KHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnNl
dFRleHREcmF3aW5nTW9kZShUZXh0TW9kZUZpbGwpOwotICAgIH0gZWxzZSBpZiAocmVzb3VyY2VN
b2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpIHsKLSAgICAgICAgY29udGV4dC0+c2V0QWxwaGEoc3Zn
U3R5bGUgPyBzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpIDogMS4wZik7Ci0gICAgICAgIGNvbnRl
eHQtPnNldFN0cm9rZUNvbG9yKG1fY29sb3IsIGNvbG9yU3BhY2UpOwotCi0gICAgICAgIGlmIChz
dHlsZSkKLSAgICAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0Nv
bnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7Ci0KLSAgICAgICAgaWYgKHJlc291cmNlTW9k
ZSAmIEFwcGx5VG9UZXh0TW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5n
TW9kZShUZXh0TW9kZVN0cm9rZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJj
ZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQpOwotICAgIEFT
U0VSVChyZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKLQotICAgIGlmIChwYXRo
ICYmICEocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewotICAgICAgICBpZiAocmVz
b3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBh
dGgoKnBhdGgpOwotICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tl
TW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOwotICAgIH0KLX0K
LQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgJKHJldmlzaW9uIDc1MzQ3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yX2gKLSNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciA6IHB1Ymxp
YyBSZW5kZXJTVkdSZXNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yKCk7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sID0gdHJ1ZSkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3Qq
LCBib29sID0gdHJ1ZSkgeyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9y
dCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2Rl
LCBjb25zdCBQYXRoKik7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0Jv
eChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotCi0gICAgdmlydHVhbCBS
ZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNv
dXJjZVR5cGU7IH0KLSAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VU
eXBlOwotCi0gICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsg
fQotICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fY29sb3IgPSBjb2xv
cjsgfQotCi1wcml2YXRlOgotICAgIENvbG9yIG1fY29sb3I7Ci19OwotCi19Ci0KLSNlbmRpZgot
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3Bw
CShyZXZpc2lvbiA3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
b290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUm9v
dC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJl
c3VsdC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgotI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNWR0xl
bmd0aC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKLSNpbmNsdWRlICJTVkdSZXNv
dXJjZXMuaCIKLSNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVk
RWxlbWVudC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCi0KLSNpZiBFTkFCTEUoRklM
VEVSUykKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgotI2VuZGlmCi0KLXVz
aW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVuZGVyU1ZHUm9v
dDo6UmVuZGVyU1ZHUm9vdChTVkdTdHlsZWRFbGVtZW50KiBub2RlKQotICAgIDogUmVuZGVyQm94
KG5vZGUpCi0gICAgLCBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQoZmFsc2UpCi0gICAgLCBtX25lZWRz
Qm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRlKHRydWUpCi17Ci0gICAgc2V0UmVwbGFjZWQodHJ1
ZSk7Ci19Ci0KLVJlbmRlclNWR1Jvb3Q6On5SZW5kZXJTVkdSb290KCkKLXsKLX0KLQotdm9pZCBS
ZW5kZXJTVkdSb290Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCi17Ci0gICAgQVNT
RVJUKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKLQotICAgIGludCBib3JkZXJBbmRQ
YWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7Ci0gICAgaW50IHdpZHRoID0gY29tcHV0
ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGZhbHNlKSArIGJvcmRlckFuZFBhZGRpbmc7Ci0KLSAgICBp
ZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52
YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkKLSAgICAgICAgd2lkdGggPSBtaW4od2lkdGgsIHN0
eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05U
RU5UX0JPWCA/IGJvcmRlckFuZFBhZGRpbmcgOiAwKSk7Ci0KLSAgICBpZiAoc3R5bGUoKS0+d2lk
dGgoKS5pc1BlcmNlbnQoKSB8fCAoc3R5bGUoKS0+d2lkdGgoKS5pc0F1dG8oKSAmJiBzdHlsZSgp
LT5oZWlnaHQoKS5pc1BlcmNlbnQoKSkpIHsKLSAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGggPSAwOwotICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHdpZHRoOwot
ICAgIH0gZWxzZQotICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJl
ZmVycmVkTG9naWNhbFdpZHRoID0gd2lkdGg7Ci0KLSAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzRGlydHkoZmFsc2UpOwotfQotCi1pbnQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2Vk
TG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoKSBjb25zdAotewotICAgIGludCByZXBs
YWNlZFdpZHRoID0gUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoaW5jbHVk
ZU1heFdpZHRoKTsKLSAgICBpZiAoIXN0eWxlKCktPmxvZ2ljYWxXaWR0aCgpLmlzUGVyY2VudCgp
KQotICAgICAgICByZXR1cm4gcmVwbGFjZWRXaWR0aDsKLQotICAgIC8vIEZJWE1FOiBJbnZlc3Rp
Z2F0ZSBpbiBzaXplIHJvdW5kaW5nIGlzc3VlcwotICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0
YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2RlKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KHJvdW5kZihyZXBsYWNlZFdpZHRoICogc3ZnLT5jdXJyZW50U2NhbGUoKSkpOwotfQot
Ci1pbnQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0
Ci17Ci0gICAgaW50IHJlcGxhY2VkSGVpZ2h0ID0gUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRM
b2dpY2FsSGVpZ2h0KCk7Ci0gICAgaWYgKCFzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkuaXNQZXJj
ZW50KCkpCi0gICAgICAgIHJldHVybiByZXBsYWNlZEhlaWdodDsKLQotICAgIC8vIEZJWE1FOiBJ
bnZlc3RpZ2F0ZSBpbiBzaXplIHJvdW5kaW5nIGlzc3VlcwotICAgIFNWR1NWR0VsZW1lbnQqIHN2
ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2RlKCkpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KHJvdW5kZihyZXBsYWNlZEhlaWdodCAqIHN2Zy0+Y3VycmVudFNjYWxlKCkp
KTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQotewotICAgIEFTU0VSVChuZWVk
c0xheW91dCgpKTsKLQotICAgIC8vIEFyYml0cmFyeSBhZmZpbmUgdHJhbnNmb3JtcyBhcmUgaW5j
b21wYXRpYmxlIHdpdGggTGF5b3V0U3RhdGUuCi0gICAgdmlldygpLT5kaXNhYmxlTGF5b3V0U3Rh
dGUoKTsKLQotICAgIGJvb2wgbmVlZHNMYXlvdXQgPSBzZWxmTmVlZHNMYXlvdXQoKTsKLSAgICBM
YXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlv
dXQoKSAmJiBuZWVkc0xheW91dCk7Ci0KLSAgICBJbnRTaXplIG9sZFNpemUod2lkdGgoKSwgaGVp
Z2h0KCkpOwotICAgIGNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKLSAgICBjb21wdXRlTG9naWNhbEhl
aWdodCgpOwotICAgIGNhbGNWaWV3cG9ydCgpOwotCi0gICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0g
c3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgbV9pc0xheW91dFNpemVD
aGFuZ2VkID0gc3ZnLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSAmJiBvbGRTaXplICE9IHNpemUoKTsK
LQotICAgIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKHRoaXMsIG5lZWRzTGF5b3V0
KTsKLSAgICBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgPSBmYWxzZTsKLQotICAgIC8vIEF0IHRoaXMg
cG9pbnQgTGF5b3V0UmVwYWludGVyIGFscmVhZHkgZ3JhYmJlZCB0aGUgb2xkIGJvdW5kcywKLSAg
ICAvLyByZWNhbGN1bGF0ZSB0aGVtIG5vdyBzbyByZXBhaW50QWZ0ZXJMYXlvdXQoKSB1c2VzIHRo
ZSBuZXcgYm91bmRzLgotICAgIGlmIChtX25lZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRl
KSB7Ci0gICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKLSAgICAgICAgbV9uZWVkc0Jv
dW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIHJlcGFpbnRl
ci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKLQotICAgIHZpZXcoKS0+ZW5hYmxlTGF5b3V0U3RhdGUo
KTsKLSAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHUm9vdDo6
c2VsZldpbGxQYWludCgpCi17Ci0jaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAgU1ZHUmVzb3VyY2Vz
KiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVy
T2JqZWN0KHRoaXMpOwotICAgIHJldHVybiByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLT5maWx0ZXIo
KTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQgUmVuZGVyU1ZH
Um9vdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50
WSkKLXsKLSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBpc1Zpc2libGUgPSBzdHlsZSgpLT52aXNpYmlsaXR5
KCkgPT0gVklTSUJMRTsKLSAgICBJbnRQb2ludCBwYXJlbnRPcmlnaW5JbkNvbnRhaW5lcihwYXJl
bnRYLCBwYXJlbnRZKTsKLSAgICBJbnRQb2ludCBib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lciA9
IHBhcmVudE9yaWdpbkluQ29udGFpbmVyICsgcGFyZW50T3JpZ2luVG9Cb3JkZXJCb3goKTsKLQot
ICAgIGlmIChoYXNCb3hEZWNvcmF0aW9ucygpICYmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxk
QmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1Zpc2libGUpCi0gICAgICAgIHBhaW50Qm94RGVjb3JhdGlv
bnMocGFpbnRJbmZvLCBib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lci54KCksIGJvcmRlckJveE9y
aWdpbkluQ29udGFpbmVyLnkoKSk7Ci0KLSAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2VCbG9ja0JhY2tncm91bmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEFuIGVtcHR5
IHZpZXdwb3J0IGRpc2FibGVzIHJlbmRlcmluZy4gIEZJWE1FOiBTaG91bGQgd2Ugc3RpbGwgcmVu
ZGVyIGZpbHRlcnM/Ci0gICAgaWYgKG1fdmlld3BvcnRTaXplLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gRG9uJ3QgcGFpbnQgaWYgd2UgZG9uJ3QgaGF2ZSBraWRzLCBleGNl
cHQgaWYgd2UgaGF2ZSBmaWx0ZXJzIHdlIHNob3VsZCBwYWludCB0aG9zZS4KLSAgICBpZiAoIWZp
cnN0Q2hpbGQoKSAmJiAhc2VsZldpbGxQYWludCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBNYWtlIGEgY29weSBvZiB0aGUgUGFpbnRJbmZvIGJlY2F1c2UgYXBwbHlUcmFuc2Zvcm0gd2ls
bCBtb2RpZnkgdGhlIGRhbWFnZSByZWN0LgotICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhw
YWludEluZm8pOwotICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLQotICAgIC8v
IEFwcGx5IGluaXRpYWwgdmlld3BvcnQgY2xpcCAtIG5vdCBhZmZlY3RlZCBieSBvdmVyZmxvdyBo
YW5kbGluZwotICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmNsaXAob3ZlcmZsb3dDbGlwUmVj
dChib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lci54KCksIGJvcmRlckJveE9yaWdpbkluQ29udGFp
bmVyLnkoKSkpOwotCi0gICAgLy8gQ29udmVydCBmcm9tIGNvbnRhaW5lciBvZmZzZXRzIChodG1s
IHJlbmRlcmVycykgdG8gYSByZWxhdGl2ZSB0cmFuc2Zvcm0gKHN2ZyByZW5kZXJlcnMpLgotICAg
IC8vIFRyYW5zZm9ybSBmcm9tIG91ciBwYWludCBjb250YWluZXIncyBjb29yZGluYXRlIHN5c3Rl
bSB0byBvdXIgbG9jYWwgY29vcmRzLgotICAgIGNoaWxkUGFpbnRJbmZvLmFwcGx5VHJhbnNmb3Jt
KGxvY2FsVG9SZXBhaW50Q29udGFpbmVyVHJhbnNmb3JtKHBhcmVudE9yaWdpbkluQ29udGFpbmVy
KSk7Ci0KLSAgICBib29sIGNvbnRpbnVlUmVuZGVyaW5nID0gdHJ1ZTsKLSAgICBpZiAoY2hpbGRQ
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCi0gICAgICAgIGNvbnRpbnVl
UmVuZGVyaW5nID0gU1ZHUmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0
aGlzLCBjaGlsZFBhaW50SW5mbyk7Ci0KLSAgICBpZiAoY29udGludWVSZW5kZXJpbmcpCi0gICAg
ICAgIFJlbmRlckJveDo6cGFpbnQoY2hpbGRQYWludEluZm8sIDAsIDApOwotCi0gICAgaWYgKGNo
aWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQotICAgICAgICBTVkdS
ZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZv
LCBwYWludEluZm8uY29udGV4dCk7Ci0KLSAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5yZXN0
b3JlKCk7Ci0KLSAgICBpZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8
fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgpLT5v
dXRsaW5lV2lkdGgoKSAmJiBpc1Zpc2libGUpCi0gICAgICAgIHBhaW50T3V0bGluZShwYWludElu
Zm8uY29udGV4dCwgYm9yZGVyQm94T3JpZ2luSW5Db250YWluZXIueCgpLCBib3JkZXJCb3hPcmln
aW5JbkNvbnRhaW5lci55KCksIHdpZHRoKCksIGhlaWdodCgpKTsKLX0KLQotdm9pZCBSZW5kZXJT
VkdSb290OjpkZXN0cm95KCkKLXsKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50RGVzdHJv
eWVkKHRoaXMpOwotICAgIFJlbmRlckJveDo6ZGVzdHJveSgpOwotfQotCi12b2lkIFJlbmRlclNW
R1Jvb3Q6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVy
U3R5bGUqIG5ld1N0eWxlKQotewotICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZUxheW91
dCkKLSAgICAgICAgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7Ci0gICAgUmVuZGVyQm94Ojpz
dHlsZVdpbGxDaGFuZ2UoZGlmZiwgbmV3U3R5bGUpOwotfQotCi12b2lkIFJlbmRlclNWR1Jvb3Q6
OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUpCi17Ci0gICAgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHls
ZSk7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCh0aGlzLCBkaWZm
LCBzdHlsZSgpKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVGcm9tRWxlbWVudCgp
Ci17Ci0gICAgUmVuZGVyQm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIFNWR1Jlc291cmNl
c0NhY2hlOjpjbGllbnRVcGRhdGVkRnJvbUVsZW1lbnQodGhpcywgc3R5bGUoKSk7Ci19Ci0KLXZv
aWQgUmVuZGVyU1ZHUm9vdDo6Y2FsY1ZpZXdwb3J0KCkKLXsKLSAgICBTVkdTVkdFbGVtZW50KiBz
dmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4obm9kZSgpKTsKLQotICAgIGlmICghc3Zn
LT5oYXNTZXRDb250YWluZXJTaXplKCkpIHsKLSAgICAgICAgLy8gSW4gdGhlIG5vcm1hbCBjYXNl
IG9mIDxzdmc+IGJlaW5nIHN0YW5kLWFsb25lIG9yIGluIGEgQ1NTQm94TW9kZWwgb2JqZWN0IHdl
IHVzZQotICAgICAgICAvLyBSZW5kZXJCb3g6OndpZHRoKCkvaGVpZ2h0KCkgKHdoaWNoIHB1bGxz
IGRhdGEgZnJvbSBSZW5kZXJTdHlsZSkKLSAgICAgICAgbV92aWV3cG9ydFNpemUgPSBGbG9hdFNp
emUod2lkdGgoKSwgaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
SW4gdGhlIFNWR0ltYWdlIGNhc2UgZ3JhYiB0aGUgU1ZHTGVuZ3RoIHZhbHVlcyBvZmYgb2YgU1ZH
U1ZHRWxlbWVudCBhbmQgdXNlCi0gICAgLy8gdGhlIHNwZWNpYWwgcmVsYXRpdmVXaWR0aFZhbHVl
IGFjY2Vzc29ycyB3aGljaCByZXNwZWN0IHRoZSBzcGVjaWZpZWQgY29udGFpbmVyU2l6ZQotICAg
IC8vIEZJWE1FOiBDaGVjayBob3cgU1ZHSW1hZ2UgKyB6b29taW5nIGlzIHN1cHBvc2VkIHRvIGJl
IGhhbmRsZWQ/Ci0gICAgU1ZHTGVuZ3RoIHdpZHRoID0gc3ZnLT53aWR0aCgpOwotICAgIFNWR0xl
bmd0aCBoZWlnaHQgPSBzdmctPmhlaWdodCgpOwotICAgIG1fdmlld3BvcnRTaXplID0gRmxvYXRT
aXplKHdpZHRoLnVuaXRUeXBlKCkgPT0gTGVuZ3RoVHlwZVBlcmNlbnRhZ2UgPyBzdmctPnJlbGF0
aXZlV2lkdGhWYWx1ZSgpIDogd2lkdGgudmFsdWUoc3ZnKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWlnaHQudW5pdFR5cGUoKSA9PSBMZW5ndGhUeXBlUGVyY2VudGFnZSA/IHN2
Zy0+cmVsYXRpdmVIZWlnaHRWYWx1ZSgpIDogaGVpZ2h0LnZhbHVlKHN2ZykpOwotfQotCi0vLyBS
ZW5kZXJCb3ggbWV0aG9kcyB3aWxsIGV4cGVjdCBjb29yZGluYXRlcyB3L28gYW55IHRyYW5zZm9y
bXMgaW4gY29vcmRpbmF0ZXMKLS8vIHJlbGF0aXZlIHRvIG91ciBib3JkZXJCb3ggb3JpZ2luLiAg
VGhpcyBtZXRob2QgZ2l2ZXMgdXMgZXhhY3RseSB0aGF0LgotQWZmaW5lVHJhbnNmb3JtIFJlbmRl
clNWR1Jvb3Q6OmxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIEludFNp
emUgYm9yZGVyQW5kUGFkZGluZyA9IGJvcmRlck9yaWdpblRvQ29udGVudEJveCgpOwotICAgIFNW
R1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2RlKCkpOwot
ICAgIGZsb2F0IHNjYWxlID0gc3ZnLT5jdXJyZW50U2NhbGUoKTsKLSAgICBGbG9hdFBvaW50IHRy
YW5zbGF0ZSA9IHN2Zy0+Y3VycmVudFRyYW5zbGF0ZSgpOwotICAgIEFmZmluZVRyYW5zZm9ybSBj
dG0oc2NhbGUsIDAsIDAsIHNjYWxlLCBib3JkZXJBbmRQYWRkaW5nLndpZHRoKCkgKyB0cmFuc2xh
dGUueCgpLCBib3JkZXJBbmRQYWRkaW5nLmhlaWdodCgpICsgdHJhbnNsYXRlLnkoKSk7Ci0gICAg
cmV0dXJuIHN2Zy0+dmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpIC8gc2NhbGUsIGhlaWdo
dCgpIC8gc2NhbGUpICogY3RtOwotfQotCi1JbnRTaXplIFJlbmRlclNWR1Jvb3Q6OnBhcmVudE9y
aWdpblRvQm9yZGVyQm94KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZSh4KCksIHkoKSk7
Ci19Ci0KLUludFNpemUgUmVuZGVyU1ZHUm9vdDo6Ym9yZGVyT3JpZ2luVG9Db250ZW50Qm94KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgp
LCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBSZW5k
ZXJTVkdSb290Ojpsb2NhbFRvUmVwYWludENvbnRhaW5lclRyYW5zZm9ybShjb25zdCBJbnRQb2lu
dCYgcGFyZW50T3JpZ2luSW5Db250YWluZXIpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
IHBhcmVudFRvQ29udGFpbmVyKGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSk7Ci0gICAgcmV0dXJu
IHBhcmVudFRvQ29udGFpbmVyLnRyYW5zbGF0ZVJpZ2h0KHBhcmVudE9yaWdpbkluQ29udGFpbmVy
LngoKSwgcGFyZW50T3JpZ2luSW5Db250YWluZXIueSgpKTsKLX0KLQotY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBSZW5kZXJTVkdSb290Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QKLXsK
LSAgICBJbnRTaXplIHBhcmVudFRvQm9yZGVyQm94T2Zmc2V0ID0gcGFyZW50T3JpZ2luVG9Cb3Jk
ZXJCb3goKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBib3JkZXJCb3hPcmlnaW5Ub1BhcmVudE9y
aWdpbihsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkpOwotICAgIGJvcmRlckJveE9yaWdpblRv
UGFyZW50T3JpZ2luLnRyYW5zbGF0ZVJpZ2h0KHBhcmVudFRvQm9yZGVyQm94T2Zmc2V0LndpZHRo
KCksIHBhcmVudFRvQm9yZGVyQm94T2Zmc2V0LmhlaWdodCgpKTsKLQotICAgIG1fbG9jYWxUb1Bh
cmVudFRyYW5zZm9ybSA9IGJvcmRlckJveE9yaWdpblRvUGFyZW50T3JpZ2luOwotICAgIHJldHVy
biBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07Ci19Ci0KLUludFJlY3QgUmVuZGVyU1ZHUm9vdDo6
Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIpCi17Ci0gICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNsaXBwZWRPdmVy
Zmxvd1JlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIpOwotfQotCi12b2lkIFJl
bmRlclNWR1Jvb3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCi17Ci0g
ICAgLy8gQXBwbHkgb3VyIGxvY2FsIHRyYW5zZm9ybXMgKGV4Y2VwdCBmb3IgeC95IHRyYW5zbGF0
aW9uKSwgdGhlbiBvdXIgc2hhZG93LCAKLSAgICAvLyBhbmQgdGhlbiBjYWxsIFJlbmRlckJveCdz
IG1ldGhvZCB0byBoYW5kbGUgYWxsIHRoZSBub3JtYWwgQ1NTIEJveCBtb2RlbCBiaXRzCi0gICAg
cmVwYWludFJlY3QgPSBsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkubWFwUmVjdChyZXBhaW50
UmVjdCk7Ci0KLSAgICAvLyBBcHBseSBpbml0aWFsIHZpZXdwb3J0IGNsaXAgLSBub3QgYWZmZWN0
ZWQgYnkgb3ZlcmZsb3cgc2V0dGluZ3MgICAgCi0gICAgcmVwYWludFJlY3QuaW50ZXJzZWN0KGVu
Y2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV92aWV3cG9ydFNpemUpKSk7
Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHls
ZSgpOwotICAgIGlmIChjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBzdmdTdHlsZS0+c2hhZG93
KCkpCi0gICAgICAgIHNoYWRvdy0+YWRqdXN0UmVjdEZvclNoYWRvdyhyZXBhaW50UmVjdCk7Ci0K
LSAgICBSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCBy
ZXBhaW50UmVjdCwgZml4ZWQpOwotfQotCi12b2lkIFJlbmRlclNWR1Jvb3Q6Om1hcExvY2FsVG9D
b250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4
ZWQgLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoIWZpeGVkKTsgLy8gV2Ugc2hvdWxkIGhhdmUgbm8gZml4ZWQg
Y29udGVudCBpbiB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlLgotICAgIEFTU0VSVCh1c2VUcmFuc2Zv
cm1zKTsgLy8gbWFwcGluZyBhIHBvaW50IHRocm91Z2ggU1ZHIHcvbyByZXNwZWN0aW5nIHRyYXNu
Zm9ybXMgaXMgdXNlbGVzcy4KLQotICAgIC8vIFRyYW5zZm9ybSB0byBvdXIgYm9yZGVyIGJveCBh
bmQgbGV0IFJlbmRlckJveCB0cmFuc2Zvcm0gdGhlIHJlc3Qgb2YgdGhlIHdheS4KLSAgICB0cmFu
c2Zvcm1TdGF0ZS5hcHBseVRyYW5zZm9ybShsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkpOwot
ICAgIFJlbmRlckJveDo6bWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBmaXhl
ZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOwotfQotCi12b2lkIFJlbmRlclNWR1Jv
b3Q6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQotewotICAgIG1fb2JqZWN0Qm91bmRpbmdCb3gg
PSBGbG9hdFJlY3QoKTsKLSAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0g
ICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLQotICAgIFNWR1JlbmRlclN1
cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKHRoaXMsIG1fb2JqZWN0Qm91bmRp
bmdCb3gsIG1fc3Ryb2tlQm91bmRpbmdCb3gsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKLSAgICBT
VkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywg
bV9yZXBhaW50Qm91bmRpbmdCb3gpOwotICAgIG1fcmVwYWludEJvdW5kaW5nQm94LmluZmxhdGUo
Ym9yZGVyQW5kUGFkZGluZ1dpZHRoKCkpOwotfQotCi1ib29sIFJlbmRlclNWR1Jvb3Q6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFj
dGlvbikKLXsKLSAgICBJbnRQb2ludCBwb2ludEluQ29udGFpbmVyKHgsIHkpOwotICAgIEludFNp
emUgY29udGFpbmVyVG9QYXJlbnRPZmZzZXQodHgsIHR5KTsKLQotICAgIEludFBvaW50IHBvaW50
SW5QYXJlbnQgPSBwb2ludEluQ29udGFpbmVyIC0gY29udGFpbmVyVG9QYXJlbnRPZmZzZXQ7Ci0g
ICAgSW50UG9pbnQgcG9pbnRJbkJvcmRlckJveCA9IHBvaW50SW5QYXJlbnQgLSBwYXJlbnRPcmln
aW5Ub0JvcmRlckJveCgpOwotCi0gICAgLy8gTm90ZTogRm9yIG5vdywgd2UncmUgaWdub3Jpbmcg
aGl0cyB0byBib3JkZXIgYW5kIHBhZGRpbmcgZm9yIDxzdmc+Ci0gICAgSW50UG9pbnQgcG9pbnRJ
bkNvbnRlbnRCb3ggPSBwb2ludEluQm9yZGVyQm94IC0gYm9yZGVyT3JpZ2luVG9Db250ZW50Qm94
KCk7Ci0gICAgaWYgKCFjb250ZW50Qm94UmVjdCgpLmNvbnRhaW5zKHBvaW50SW5Db250ZW50Qm94
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSW50UG9pbnQgbG9jYWxQb2ludCA9IGxv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7
Ci0KLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+bm9k
ZUF0RmxvYXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2FsUG9pbnQsIGhpdFRlc3RBY3Rpb24p
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQ1NTL0hUTUwgYXNzdW1lcyB0aGUgbG9jYWwgcG9p
bnQgaXMgcmVsYXRpdmUgdG8gdGhlIGJvcmRlciBib3gsIHJpZ2h0PwotICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Cb3JkZXJCb3gpOwotICAgICAgICAgICAg
Ly8gRklYTUU6IG5vZGVBdEZsb2F0UG9pbnQoKSBkb2Vzbid0IGhhbmRsZSByZWN0LWJhc2VkIGhp
dCB0ZXN0cyB5ZXQuCi0gICAgICAgICAgICByZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJl
c3VsdChjaGlsZC0+bm9kZSgpLCB4LCB5KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZGlkbid0IGVhcmx5IGV4aXQgYWJvdmUsIHdl
J3ZlIGp1c3QgaGl0IHRoZSBjb250YWluZXIgPHN2Zz4gZWxlbWVudC4gVW5saWtlIFNWRyAxLjEs
IDJuZCBFZGl0aW9uIGFsbG93cyBjb250YWluZXIgZWxlbWVudHMgdG8gYmUgaGl0LgotICAgIGlm
IChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQpIHsKLSAgICAgICAgLy8g
T25seSByZXR1cm4gdHJ1ZSBoZXJlLCBpZiB0aGUgbGFzdCBoaXQgdGVzdGluZyBwaGFzZSAnQmxv
Y2tCYWNrZ3JvdW5kJyBpcyBleGVjdXRlZC4gSWYgd2UnZCByZXR1cm4gdHJ1ZSBpbiB0aGUgJ0Zv
cmVncm91bmQnIHBoYXNlLAotICAgICAgICAvLyBoaXQgdGVzdGluZyB3b3VsZCBzdG9wIGltbWVk
aWF0ZWx5LiBGb3IgU1ZHIG9ubHkgdHJlZXMgdGhpcyBkb2Vzbid0IG1hdHRlci4gVGhvdWdoIHdo
ZW4gd2UgaGF2ZSBhIDxmb3JlaWduT2JqZWN0PiBzdWJ0cmVlIHdlIG5lZWQKLSAgICAgICAgLy8g
dG8gYmUgYWJsZSB0byBkZXRlY3QgaGl0cyBvbiB0aGUgYmFja2dyb3VuZCBvZiBhIDxkaXY+IGVs
ZW1lbnQuIElmIHdlJ2QgcmV0dXJuIHRydWUgaGVyZSBpbiB0aGUgJ0ZvcmVncm91bmQnIHBoYXNl
LCB3ZSBhcmUgbm90IGFibGUgCi0gICAgICAgIC8vIHRvIGRldGVjdCB0aGVzZSBoaXRzIGFueW1v
cmUuCi0gICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCByb3VuZGVkSW50UG9pbnQo
bG9jYWxQb2ludCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmgJKHJldmlzaW9uIDc1MzQ3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgUmVuZGVyU1ZHUm9vdF9o
Ci0jZGVmaW5lIFJlbmRlclNWR1Jvb3RfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLQotI2luY2x1ZGUgIlNWR1JlbmRl
clN1cHBvcnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTVkdTdHlsZWRFbGVt
ZW50OwotY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwotCi1jbGFzcyBSZW5kZXJTVkdSb290IDogcHVi
bGljIFJlbmRlckJveCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyU1ZHUm9vdChTVkdT
dHlsZWRFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHUm9vdCgpOwotCi0gICAgY29u
c3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuICZtX2No
aWxkcmVuOyB9Ci0gICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIHsgcmV0dXJu
ICZtX2NoaWxkcmVuOyB9Ci0KLSAgICBib29sIGlzTGF5b3V0U2l6ZUNoYW5nZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNCb3VuZGFyaWVzVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRl
ID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsg
bV9uZWVkc0JvdW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KLQotcHJpdmF0ZToK
LSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgeyBy
ZXR1cm4gY2hpbGRyZW4oKTsgfQotICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRM
aXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBjaGlsZHJlbigpOyB9Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZp
cnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdS
b290IjsgfQotCi0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KCk7Ci0gICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5j
bHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxh
Y2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZ
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0eWxl
V2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7
Ci0gICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1l
bnQoKTsKLQotICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50
VHJhbnNmb3JtKCkgY29uc3Q7Ci0KLSAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBv
aW50JikgY29uc3Q7Ci0gICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBz
dHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0K
LSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgs
IGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7Ci0KLSAgICB2aXJ0dWFsIElu
dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIpOwotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmIHJlcGFp
bnRSZWN0LCBib29sIGZpeGVkKTsKLQotICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFp
bmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIHVzZVRyYW5z
Zm9ybXMsIGJvb2wgZml4ZWQsIFRyYW5zZm9ybVN0YXRlJikgY29uc3Q7Ci0KLSAgICB2b2lkIGNh
bGNWaWV3cG9ydCgpOwotCi0gICAgYm9vbCBzZWxmV2lsbFBhaW50KCk7Ci0gICAgdm9pZCB1cGRh
dGVDYWNoZWRCb3VuZGFyaWVzKCk7Ci0KLSAgICBJbnRTaXplIHBhcmVudE9yaWdpblRvQm9yZGVy
Qm94KCkgY29uc3Q7Ci0gICAgSW50U2l6ZSBib3JkZXJPcmlnaW5Ub0NvbnRlbnRCb3goKSBjb25z
dDsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUb1JlcGFpbnRDb250YWluZXJUcmFuc2Zvcm0o
Y29uc3QgSW50UG9pbnQmIHBhcmVudE9yaWdpbkluQ29udGFpbmVyKSBjb25zdDsKLSAgICBBZmZp
bmVUcmFuc2Zvcm0gbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpIGNvbnN0OwotCi0gICAgUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47Ci0gICAgRmxvYXRTaXplIG1fdmlld3BvcnRT
aXplOwotICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBt
X3N0cm9rZUJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsK
LSAgICBtdXRhYmxlIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07Ci0g
ICAgYm9vbCBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgOiAxOwotICAgIGJvb2wgbV9uZWVkc0JvdW5k
YXJpZXNPclRyYW5zZm9ybVVwZGF0ZSA6IDE7Ci19OwotCi1pbmxpbmUgUmVuZGVyU1ZHUm9vdCog
dG9SZW5kZXJTVkdSb290KFJlbmRlck9iamVjdCogb2JqZWN0KQoteyAKLSAgICBBU1NFUlQoIW9i
amVjdCB8fCBvYmplY3QtPmlzU1ZHUm9vdCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVu
ZGVyU1ZHUm9vdCo+KG9iamVjdCk7Ci19Ci0KLWlubGluZSBjb25zdCBSZW5kZXJTVkdSb290KiB0
b1JlbmRlclNWR1Jvb3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17IAotICAgIEFTU0VS
VCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdSb290KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBSZW5kZXJTVkdSb290Kj4ob2JqZWN0KTsKLX0KLQotLy8gVGhpcyB3aWxsIGNhdGNo
IGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b1JlbmRlclNWR1Jvb3Qo
Y29uc3QgUmVuZGVyU1ZHUm9vdCopOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKQotI2VuZGlmIC8vIFJlbmRlclNWR1Jvb3RfaApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHU2hhZG93VHJl
ZVJvb3RDb250YWluZXIuY3BwCShyZXZpc2lvbiA3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RD
b250YWluZXIuaCIKLQotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJTVkdTaGFk
b3dUcmVlRWxlbWVudHMuaCIKLSNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXI6OlJlbmRlclNW
R1NoYWRvd1RyZWVSb290Q29udGFpbmVyKFNWR1VzZUVsZW1lbnQqIG5vZGUpCi0gICAgOiBSZW5k
ZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyKG5vZGUpCi0gICAgLCBtX3JlY3JlYXRlVHJlZShm
YWxzZSkKLXsKLX0KLQotUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXI6On5SZW5kZXJT
VkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpCi17Ci0gICAgaWYgKG1fc2hhZG93Um9vdCAmJiBt
X3NoYWRvd1Jvb3QtPmF0dGFjaGVkKCkpIHsKLSAgICAgICAgbV9zaGFkb3dSb290LT5kZXRhY2go
KTsKLSAgICAgICAgbV9zaGFkb3dSb290LT5jbGVhclNoYWRvd0hvc3QoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXI6OnVwZGF0ZVN0eWxlKE5vZGU6
OlN0eWxlQ2hhbmdlIGNoYW5nZSkKLXsKLSAgICBpZiAobV9zaGFkb3dSb290ICYmIG1fc2hhZG93
Um9vdC0+YXR0YWNoZWQoKSkKLSAgICAgICAgbV9zaGFkb3dSb290LT5yZWNhbGNTdHlsZShjaGFu
Z2UpOwotfQotCi12b2lkIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyOjp1cGRhdGVG
cm9tRWxlbWVudCgpCi17Ci0gICAgYm9vbCBoYWRFeGlzdGluZ1RyZWUgPSBtX3NoYWRvd1Jvb3Q7
Ci0KLSAgICBTVkdVc2VFbGVtZW50KiB1c2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHVXNlRWxl
bWVudCo+KG5vZGUoKSk7Ci0gICAgaWYgKCFtX3NoYWRvd1Jvb3QpIHsKLSAgICAgICAgQVNTRVJU
KCFtX3JlY3JlYXRlVHJlZSk7Ci0gICAgICAgIG1fc2hhZG93Um9vdCA9IFNWR1NoYWRvd1RyZWVS
b290RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCksIHVzZUVsZW1lbnQpOwotICAgICAgICB1c2VF
bGVtZW50LT5idWlsZFBlbmRpbmdSZXNvdXJjZSgpOwotICAgIH0KLQotICAgIEFTU0VSVChtX3No
YWRvd1Jvb3QtPnNoYWRvd0hvc3QoKSA9PSB1c2VFbGVtZW50KTsKLQotICAgIGJvb2wgc2hvdWxk
UmVjcmVhdGVUcmVlID0gbV9yZWNyZWF0ZVRyZWU7Ci0gICAgaWYgKG1fcmVjcmVhdGVUcmVlKSB7
Ci0gICAgICAgIEFTU0VSVChoYWRFeGlzdGluZ1RyZWUpOwotCi0gICAgICAgIGlmIChtX3NoYWRv
d1Jvb3QtPmF0dGFjaGVkKCkpCi0gICAgICAgICAgICBtX3NoYWRvd1Jvb3QtPmRldGFjaCgpOwot
Ci0gICAgICAgIG1fc2hhZG93Um9vdC0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKLSAgICAgICAgbV9y
ZWNyZWF0ZVRyZWUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBPbmx5IHJlYnVpbGQgdGhlIHNo
YWRvdyB0cmVlLCBpZiB3ZSBhKSBuZXZlciBoYWQgYSB0cmVlIG9yIGIpIHdlIHdlcmUgc3BlY2lm
aWNhbGx5IGFza2VkIHRvIGRvIHNvCi0gICAgLy8gSWYgdGhlIHVzZSBlbGVtZW50IGlzIGEgcGVu
ZGluZyByZXNvdXJjZSwgYW5kIGEpIG9yIGIpIGlzIHRydWUsIGRvIG5vdGhpbmcsIGFuZCB3YWl0
IGZvciB0aGUgdXNlCi0gICAgLy8gZWxlbWVudCB0byBiZSBhc2tlZCB0byBidWlsZFBlbmRpbmdS
ZXNvdXJjZSgpLCB0aGlzIHdpbGwgY2FsbCB1cyBhZ2Fpbiwgd2l0aCBtX3JlY3JlYXRlVHJ1ZT10
cnVlLgotICAgIGlmICgoc2hvdWxkUmVjcmVhdGVUcmVlIHx8ICFoYWRFeGlzdGluZ1RyZWUpICYm
ICF1c2VFbGVtZW50LT5pc1BlbmRpbmdSZXNvdXJjZSgpKSB7Ci0gICAgICAgIHVzZUVsZW1lbnQt
PmJ1aWxkU2hhZG93QW5kSW5zdGFuY2VUcmVlKG1fc2hhZG93Um9vdC5nZXQoKSk7Ci0KLSAgICAg
ICAgLy8gQXR0YWNoIHNoYWRvdyByb290IGVsZW1lbnQKLSAgICAgICAgbV9zaGFkb3dSb290LT5h
dHRhY2hFbGVtZW50KHN0eWxlKCksIHJlbmRlckFyZW5hKCkpOwotCi0gICAgICAgIC8vIEF0dGFj
aCBzdWJ0cmVlLCBhcyBpZiBpdCB3YXMgYSByZWd1bGFyIG5vbi1zaGFkb3cgdHJlZQotICAgICAg
ICBmb3IgKE5vZGUqIGNoaWxkID0gbV9zaGFkb3dSb290LT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgY2hpbGQtPmF0dGFjaCgp
OwotICAgIH0KLQotICAgIEFTU0VSVCghbV9yZWNyZWF0ZVRyZWUpOwotICAgIFJlbmRlclNWR1Ry
YW5zZm9ybWFibGVDb250YWluZXI6OnVwZGF0ZUZyb21FbGVtZW50KCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXI6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgUmVuZGVyU1ZH
VHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwot
Ci0gICAgaWYgKFJlbmRlck9iamVjdCogc2hhZG93Um9vdFJlbmRlcmVyID0gbV9zaGFkb3dSb290
ID8gbV9zaGFkb3dSb290LT5yZW5kZXJlcigpIDogMCkKLSAgICAgICAgc2hhZG93Um9vdFJlbmRl
cmVyLT5zZXRTdHlsZShzdHlsZSgpKTsKLX0KLQotTm9kZSogUmVuZGVyU1ZHU2hhZG93VHJlZVJv
b3RDb250YWluZXI6OnJvb3RFbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zaGFkb3dS
b290LmdldCgpOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgJ
KHJldmlzaW9uIDc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1No
YWRvd1RyZWVSb290Q29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5l
cl9oCi0jZGVmaW5lIFJlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyX2gKLQotI2lmIEVO
QUJMRShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1jbGFzcyBTVkdVc2VFbGVtZW50OwotY2xhc3Mg
U1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50OwotCi1jbGFzcyBSZW5kZXJTVkdTaGFkb3dUcmVlUm9v
dENvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyIHsKLXB1
YmxpYzoKLSAgICBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcihTVkdVc2VFbGVtZW50
Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoKTsKLQot
ICAgIHZpcnR1YWwgYm9vbCBpc1NWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCBtYXJrU2hhZG93VHJlZUZvclJlY3JlYXRpb24oKSB7
IG1fcmVjcmVhdGVUcmVlID0gdHJ1ZTsgfQotICAgIHZvaWQgdXBkYXRlU3R5bGUoTm9kZTo6U3R5
bGVDaGFuZ2UpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotCi0gICAg
Tm9kZSogcm9vdEVsZW1lbnQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQg
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpOwotCi0gICAgYm9vbCBtX3JlY3JlYXRlVHJlZTsKLSAgICBSZWZQdHI8U1ZHU2hhZG93VHJl
ZVJvb3RFbGVtZW50PiBtX3NoYWRvd1Jvb3Q7Ci19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRh
aW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCShyZXZpc2lvbiA3NTM0NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJM
RShTVkcpCi0jaW5jbHVkZSAiUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIgotCi0j
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJTVkdTaGFkb3dUcmVlRWxlbWVudHMuaCIK
LSNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0gICAgCi1SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjpSZW5kZXJT
VkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBu
b2RlKQotICAgIDogUmVuZGVyU1ZHQ29udGFpbmVyKG5vZGUpCi0gICAgLCBtX25lZWRzVHJhbnNm
b3JtVXBkYXRlKHRydWUpCi17Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRh
aW5lcjo6Y2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKQotewotICAgIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQqPihub2RlKCkpOwotCi0gICAgYm9vbCBuZWVkc1VwZGF0ZSA9IG1fbmVlZHNUcmFu
c2Zvcm1VcGRhdGU7Ci0gICAgaWYgKG5lZWRzVXBkYXRlKSB7Ci0gICAgICAgIG1fbG9jYWxUcmFu
c2Zvcm0gPSBlbGVtZW50LT5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7Ci0gICAgICAgIG1fbmVl
ZHNUcmFuc2Zvcm1VcGRhdGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWVsZW1lbnQtPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OmdUYWcpIHx8ICFzdGF0aWNfY2FzdDxTVkdHRWxlbWVudCo+KGVs
ZW1lbnQpLT5pc1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBu
ZWVkc1VwZGF0ZTsKLQotICAgIEZsb2F0U2l6ZSB0cmFuc2xhdGlvbiA9IHN0YXRpY19jYXN0PFNW
R1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCktPmNvbnRhaW5lclRyYW5zbGF0
aW9uKCk7Ci0gICAgaWYgKCF0cmFuc2xhdGlvbi53aWR0aCgpICYmICF0cmFuc2xhdGlvbi5oZWln
aHQoKSkKLSAgICAgICAgcmV0dXJuIG5lZWRzVXBkYXRlOwotCi0gICAgLy8gRklYTUU6IENvdWxk
IG9wdGltaXplIHRoaXMgY2FzZSBmb3IgdXNlIHRvIGF2b2lkIHJlZmV0Y2hpbmcgdGhlIGFuaW1h
dGVkTG9jYWxUcmFuc2Zvcm0oKSBoZXJlLCBpZiBvbmx5IHRoZSBjb250YWluZXJUcmFuc2xhdGlv
bigpIGNoYW5nZWQuCi0gICAgaWYgKCFuZWVkc1VwZGF0ZSkKLSAgICAgICAgbV9sb2NhbFRyYW5z
Zm9ybSA9IGVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKLQotICAgIG1fbG9jYWxU
cmFuc2Zvcm0udHJhbnNsYXRlKHRyYW5zbGF0aW9uLndpZHRoKCksIHRyYW5zbGF0aW9uLmhlaWdo
dCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29u
dGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1RyYW5zZm9ybWFibGVDb250YWluZXIuaAkocmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIElu
Yy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2lmbmRlZiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyX2gKLSNkZWZpbmUgUmVu
ZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcl9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1
ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1j
bGFzcyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDsKLWNsYXNzIFJlbmRlclNWR1RyYW5z
Zm9ybWFibGVDb250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZHQ29udGFpbmVyIHsKLXB1YmxpYzoK
LSAgICBleHBsaWNpdCBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyKFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zv
cm07IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVl
ZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29s
IGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0g
bG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0KLSAg
ICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwotICAgIEFmZmluZVRyYW5zZm9ybSBt
X2xvY2FsVHJhbnNmb3JtOwotfTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCi0jZW5kaWYg
Ly8gUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAJ
KHJldmlzaW9uIDc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lci5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHU1ZH
RWxlbWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyOjpSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50KiBub2Rl
KQotICAgIDogUmVuZGVyU1ZHQ29udGFpbmVyKG5vZGUpCi17Ci19Ci0KLXZvaWQgUmVuZGVyU1ZH
Vmlld3BvcnRDb250YWluZXI6OmFwcGx5Vmlld3BvcnRDbGlwKFBhaW50SW5mbyYgcGFpbnRJbmZv
KQotewotICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0Ojppc092ZXJmbG93SGlkZGVuKHRoaXMpKQot
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChtX3ZpZXdwb3J0KTsKLX0KLQotdm9pZCBS
ZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6Y2FsY1ZpZXdwb3J0KCkKLXsKLSAgICAgU1ZHRWxl
bWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwotICAgICBp
ZiAoZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkgewotICAgICAgICAgU1ZH
U1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KGVsZW1lbnQpOwot
Ci0gICAgICAgICBGbG9hdFJlY3Qgb2xkVmlld3BvcnQgPSBtX3ZpZXdwb3J0OwotICAgICAgICAg
bV92aWV3cG9ydCA9IEZsb2F0UmVjdChzdmctPngoKS52YWx1ZShzdmcpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgc3ZnLT55KCkudmFsdWUoc3ZnKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIHN2Zy0+d2lkdGgoKS52YWx1ZShzdmcpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgc3ZnLT5oZWlnaHQoKS52YWx1ZShzdmcpKTsKLQotICAgICAg
ICBpZiAob2xkVmlld3BvcnQgIT0gbV92aWV3cG9ydCkKLSAgICAgICAgICAgIHNldE5lZWRzQm91
bmRhcmllc1VwZGF0ZSgpOwotICAgIH0KLX0KLQotQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyOjp2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgaWYgKG5v
ZGUoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkgewotICAgICAgICBTVkdTVkdFbGVt
ZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4obm9kZSgpKTsKLSAgICAgICAg
cmV0dXJuIHN2Zy0+dmlld0JveFRvVmlld1RyYW5zZm9ybShtX3ZpZXdwb3J0LndpZHRoKCksIG1f
dmlld3BvcnQuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0o
KTsKLX0KLQotY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
cjo6bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
IHZpZXdwb3J0VHJhbnNsYXRpb24odmlld3BvcnRUcmFuc2Zvcm0oKSk7Ci0gICAgbV9sb2NhbFRv
UGFyZW50VHJhbnNmb3JtID0gdmlld3BvcnRUcmFuc2xhdGlvbi50cmFuc2xhdGVSaWdodChtX3Zp
ZXdwb3J0LngoKSwgbV92aWV3cG9ydC55KCkpOwotICAgIHJldHVybiBtX2xvY2FsVG9QYXJlbnRU
cmFuc2Zvcm07Ci0gICAgLy8gSWYgdGhpcyBjbGFzcyB3ZXJlIGV2ZXIgZ2l2ZW4gYSBsb2NhbFRy
YW5zZm9ybSgpLCB0aGVuIHRoZSBhYm92ZSB3b3VsZCByZWFkOgotICAgIC8vIHJldHVybiB2aWV3
cG9ydFRyYW5zZm9ybSgpICogbG9jYWxUcmFuc2Zvcm0oKSAqIHZpZXdwb3J0VHJhbnNsYXRpb247
Ci19Ci0KLWJvb2wgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OnBvaW50SXNJbnNpZGVWaWV3
cG9ydENsaXAoY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCkKLXsKLSAgICAvLyBSZXNw
ZWN0IHRoZSB2aWV3cG9ydCBjbGlwICh3aGljaCBpcyBpbiBwYXJlbnQgY29vcmRzKQotICAgIGlm
ICghU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlzKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIG1fdmlld3BvcnQuY29udGFpbnMocG9pbnRJblBh
cmVudCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaAko
cmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmll
d3BvcnRDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVm
IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyX2gKLSNkZWZpbmUgUmVuZGVyU1ZHVmlld3BvcnRD
b250YWluZXJfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJTVkdDb250YWlu
ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBUaGlzIGlzIHVzZWQgZm9yIG5vbi1y
b290IDxzdmc+IGVsZW1lbnRzIGFuZCA8bWFya2VyPiBlbGVtZW50cywgbmVpdGhlciBvZiB3aGlj
aCBhcmUgU1ZHVHJhbnNmb3JtYWJsZQotLy8gdGh1cyB3ZSBpbmhlcml0IGZyb20gUmVuZGVyU1ZH
Q29udGFpbmVyIGluc3RlYWQgb2YgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcgotY2xh
c3MgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZHQ29udGFpbmVy
IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcihTVkdT
dHlsZWRFbGVtZW50Kik7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGlzU1ZHQ29udGFp
bmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1NWR1ZpZXdw
b3J0Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdWaWV3cG9ydENvbnRh
aW5lciI7IH0KLQotICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0
OwotICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNm
b3JtKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ZpZXdwb3J0KCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlWaWV3cG9ydENsaXAoUGFpbnRJbmZvJik7Ci0gICAgdmlydHVhbCBi
b29sIHBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBh
cmVudCk7Ci0KLSAgICBGbG9hdFJlY3QgbV92aWV3cG9ydDsKLSAgICBtdXRhYmxlIEFmZmluZVRy
YW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07Ci19OwotICAKLWlubGluZSBSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lciogdG9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcihSZW5kZXJP
YmplY3QqIG9iamVjdCkKLXsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCAhc3RyY21wKG9iamVjdC0+
cmVuZGVyTmFtZSgpLCAiUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIiKSk7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKj4ob2JqZWN0KTsKLX0KLQot
Ly8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9p
ZCB0b1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKGNvbnN0IFJlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyKik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShT
VkcpCi0jZW5kaWYgLy8gUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXJfaApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAkocmV2aXNp
b24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29s
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHSW1h
Z2VCdWZmZXJUb29scy5oIgotCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyU1ZHQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0mIGN1cnJlbnRDb250ZW50VHJh
bnNmb3JtYXRpb24oKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQWZmaW5lVHJhbnNmb3Jt
LCBzX2N1cnJlbnRDb250ZW50VHJhbnNmb3JtYXRpb24sICgpKTsKLSAgICByZXR1cm4gc19jdXJy
ZW50Q29udGVudFRyYW5zZm9ybWF0aW9uOwotfQotCi12b2lkIFNWR0ltYWdlQnVmZmVyVG9vbHM6
OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKGNv
bnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFu
c2Zvcm0pCi17Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gcmVuZGVyZXI7Ci0g
ICAgQVNTRVJUKGN1cnJlbnQpOwotCi0gICAgYWJzb2x1dGVUcmFuc2Zvcm0gPSBjdXJyZW50Q29u
dGVudFRyYW5zZm9ybWF0aW9uKCk7Ci0gICAgd2hpbGUgKGN1cnJlbnQpIHsKLSAgICAgICAgYWJz
b2x1dGVUcmFuc2Zvcm0ubXVsdGlwbHkoY3VycmVudC0+bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgp
KTsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlzU1ZHUm9vdCgpKQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnQoKTsKLSAgICB9Ci19Ci0KLWJvb2wg
U1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiBh
YnNvbHV0ZVRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZEFic29sdXRlVGFyZ2V0
UmVjdCwgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSkKLXsKLSAgICBJbnRTaXplIGltYWdlU2l6ZShyb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGNs
YW1wZWRBYnNvbHV0ZVRhcmdldFJlY3Quc2l6ZSgpKSk7Ci0gICAgSW50U2l6ZSB1bmNsYW1wZWRJ
bWFnZVNpemUoU1ZHSW1hZ2VCdWZmZXJUb29sczo6cm91bmRlZEltYWdlQnVmZmVyU2l6ZShhYnNv
bHV0ZVRhcmdldFJlY3Quc2l6ZSgpKSk7Ci0KLSAgICAvLyBEb24ndCBjcmVhdGUgZW1wdHkgSW1h
Z2VCdWZmZXJzLgotICAgIGlmIChpbWFnZVNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShpbWFnZVNpemUsIGNvbG9yU3BhY2UpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCogaW1hZ2VDb250ZXh0ID0gaW1hZ2Ut
PmNvbnRleHQoKTsKLSAgICBBU1NFUlQoaW1hZ2VDb250ZXh0KTsKLQotICAgIC8vIENvbXBlbnNh
dGUgcm91bmRpbmcgZWZmZWN0cywgYXMgdGhlIGFic29sdXRlIHRhcmdldCByZWN0IGlzIHVzaW5n
IGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYW5kIHRoZSBpbWFnZSBidWZmZXIgc2l6ZSBpcyBpbnRl
Z2VyLgotICAgIGltYWdlQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHVuY2xhbXBlZEltYWdlU2l6
ZS53aWR0aCgpIC8gYWJzb2x1dGVUYXJnZXRSZWN0LndpZHRoKCksIHVuY2xhbXBlZEltYWdlU2l6
ZS5oZWlnaHQoKSAvIGFic29sdXRlVGFyZ2V0UmVjdC5oZWlnaHQoKSkpOwotCi0gICAgaW1hZ2VC
dWZmZXIgPSBpbWFnZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZH
SW1hZ2VCdWZmZXJUb29sczo6cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIq
IGltYWdlLCBSZW5kZXJPYmplY3QqIGl0ZW0sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3VidHJl
ZUNvbnRlbnRUcmFuc2Zvcm1hdGlvbikKLXsKLSAgICBBU1NFUlQoaXRlbSk7Ci0gICAgQVNTRVJU
KGltYWdlKTsKLSAgICBBU1NFUlQoaW1hZ2UtPmNvbnRleHQoKSk7Ci0KLSAgICBQYWludEluZm8g
aW5mbyhpbWFnZS0+Y29udGV4dCgpLCBQYWludEluZm86OmluZmluaXRlUmVjdCgpLCBQYWludFBo
YXNlRm9yZWdyb3VuZCwgMCwgMCwgMCk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0mIGNvbnRlbnRU
cmFuc2Zvcm1hdGlvbiA9IGN1cnJlbnRDb250ZW50VHJhbnNmb3JtYXRpb24oKTsKLSAgICBBZmZp
bmVUcmFuc2Zvcm0gc2F2ZWRDb250ZW50VHJhbnNmb3JtYXRpb24gPSBjb250ZW50VHJhbnNmb3Jt
YXRpb247Ci0gICAgY29udGVudFRyYW5zZm9ybWF0aW9uLm11bHRpcGx5KHN1YnRyZWVDb250ZW50
VHJhbnNmb3JtYXRpb24pOwotCi0gICAgaXRlbS0+bGF5b3V0SWZOZWVkZWQoKTsKLSAgICBpdGVt
LT5wYWludChpbmZvLCAwLCAwKTsKLQotICAgIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiA9IHNhdmVk
Q29udGVudFRyYW5zZm9ybWF0aW9uOwotfQotCi12b2lkIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNs
aXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1
dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikKLXsKLSAgICBB
U1NFUlQoY29udGV4dCk7Ci0gICAgQVNTRVJUKGltYWdlQnVmZmVyKTsKLQotICAgIC8vIFRoZSBt
YXNrIGltYWdlIGhhcyBiZWVuIGNyZWF0ZWQgaW4gdGhlIGFic29sdXRlIGNvb3JkaW5hdGUgc3Bh
Y2UsIGFzIHRoZSBpbWFnZSBzaG91bGQgbm90IGJlIHNjYWxlZC4KLSAgICAvLyBTbyB0aGUgYWN0
dWFsIG1hc2tpbmcgcHJvY2VzcyBoYXMgdG8gYmUgZG9uZSBpbiB0aGUgYWJzb2x1dGUgY29vcmRp
bmF0ZSBzcGFjZSBhcyB3ZWxsLgotICAgIGNvbnRleHQtPmNvbmNhdENUTShhYnNvbHV0ZVRyYW5z
Zm9ybS5pbnZlcnNlKCkpOwotICAgIGNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVm
ZmVyLmdldCgpLCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0KTsKLSAgICBjb250ZXh0LT5jb25j
YXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0pOwotCi0gICAgLy8gV2hlbiBuZXN0aW5nIHJlc291cmNl
cywgd2l0aCBvYmplY3RCb3VuZGluZ0JveCBhcyBjb250ZW50IHVuaXQgdHlwZXMsIHRoZXJlJ3Mg
bm8gdXNlIGluIGNhY2hpbmcgdGhlCi0gICAgLy8gcmVzdWx0aW5nIGltYWdlIGJ1ZmZlciBhcyB0
aGUgcGFyZW50IHJlc291cmNlIGFscmVhZHkgY2FjaGVzIHRoZSByZXN1bHQuCi0gICAgaWYgKCFj
dXJyZW50Q29udGVudFRyYW5zZm9ybWF0aW9uKCkuaXNJZGVudGl0eSgpKQotICAgICAgICBpbWFn
ZUJ1ZmZlci5jbGVhcigpOwotfQotCi1JbnRTaXplIFNWR0ltYWdlQnVmZmVyVG9vbHM6OnJvdW5k
ZWRJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIHJldHVybiBJ
bnRTaXplKHN0YXRpY19jYXN0PGludD4obHJvdW5kZihzaXplLndpZHRoKCkpKSwgc3RhdGljX2Nh
c3Q8aW50Pihscm91bmRmKHNpemUuaGVpZ2h0KCkpKSk7Ci19Ci0KLUZsb2F0UmVjdCBTVkdJbWFn
ZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIoY29uc3Qg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRhcmdldFJl
Y3QpCi17Ci0gICAgQVNTRVJUKHJlbmRlcmVyKTsKLQotICAgIGNvbnN0IFJlbmRlclNWR1Jvb3Qq
IHN2Z1Jvb3QgPSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVHJlZVJvb3RPYmplY3QocmVuZGVyZXIp
OwotICAgIEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0ID0gYWJzb2x1dGVUYXJn
ZXRSZWN0OwotICAgIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QuaW50ZXJzZWN0KHN2Z1Jvb3Qt
PmNvbnRlbnRCb3hSZWN0KCkpOwotICAgIHJldHVybiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0
OwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5oCShyZXZpc2lvbiA3NTM0NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdJbWFn
ZUJ1ZmZlclRvb2xzX2gKLSNkZWZpbmUgU1ZHSW1hZ2VCdWZmZXJUb29sc19oCi0KLSNpZiBFTkFC
TEUoU1ZHKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwot
Y2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgRmxvYXRTaXplOwotY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwotY2xhc3MgUmVuZGVyT2JqZWN0OwotCi1jbGFzcyBTVkdJbWFnZUJ1ZmZlclRvb2xzIDogcHVi
bGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBjcmVhdGVJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1hZ2VCdWZmZXI+JiwgQ29sb3JT
cGFjZSk7Ci0gICAgc3RhdGljIHZvaWQgcmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXIqLCBSZW5kZXJPYmplY3QqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICBzdGF0
aWMgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNv
bHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mKTsKLQotICAgIHN0YXRpYyB2b2lk
IGNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKGNv
bnN0IFJlbmRlck9iamVjdCosIEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0pOwot
ICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVy
KGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0
KTsKLSAgICBzdGF0aWMgSW50U2l6ZSByb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0
U2l6ZSYpOwotCi1wcml2YXRlOgotICAgIFNWR0ltYWdlQnVmZmVyVG9vbHMoKSB7IH0KLSAgICB+
U1ZHSW1hZ2VCdWZmZXJUb29scygpIHsgfQotfTsKLQotfQotCi0jZW5kaWYKLSNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR01hcmtlckRhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHTWFya2VyRGF0YS5oCShyZXZpc2lvbiA3NTM0
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJEYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHTWFy
a2VyRGF0YV9oCi0jZGVmaW5lIFNWR01hcmtlckRhdGFfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNp
bmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlcjsKLQotY2xhc3MgU1ZHTWFya2VyRGF0YSB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSBUeXBlIHsKLSAgICAgICAgVW5rbm93biA9IDAsCi0gICAgICAgIFN0YXJ0LAotICAgICAg
ICBNaWQsCi0gICAgICAgIEVuZAotICAgIH07Ci0KLSAgICBTVkdNYXJrZXJEYXRhKGNvbnN0IFR5
cGUmIHR5cGUgPSBVbmtub3duLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyID0gMCkK
LSAgICAgICAgOiBtX3R5cGUodHlwZSkKLSAgICAgICAgLCBtX21hcmtlcihtYXJrZXIpCi0gICAg
ewotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmln
aW47IH0KLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyKCkgY29uc3QgeyByZXR1
cm4gbV9tYXJrZXI7IH0KLQotICAgIGZsb2F0IGN1cnJlbnRBbmdsZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBGbG9hdFNpemUgaW5zbG9wZUNoYW5nZSA9IG1faW5zbG9wZVBvaW50c1sxXSAtIG1f
aW5zbG9wZVBvaW50c1swXTsKLSAgICAgICAgRmxvYXRTaXplIG91dHNsb3BlQ2hhbmdlID0gbV9v
dXRzbG9wZVBvaW50c1sxXSAtIG1fb3V0c2xvcGVQb2ludHNbMF07Ci0KLSAgICAgICAgZG91Ymxl
IGluc2xvcGUgPSByYWQyZGVnKGF0YW4yKGluc2xvcGVDaGFuZ2UuaGVpZ2h0KCksIGluc2xvcGVD
aGFuZ2Uud2lkdGgoKSkpOwotICAgICAgICBkb3VibGUgb3V0c2xvcGUgPSByYWQyZGVnKGF0YW4y
KG91dHNsb3BlQ2hhbmdlLmhlaWdodCgpLCBvdXRzbG9wZUNoYW5nZS53aWR0aCgpKSk7Ci0KLSAg
ICAgICAgZG91YmxlIGFuZ2xlID0gMDsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAg
ICAgY2FzZSBTdGFydDoKLSAgICAgICAgICAgIGFuZ2xlID0gb3V0c2xvcGU7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBNaWQ6Ci0gICAgICAgICAgICBhbmdsZSA9IChpbnNsb3Bl
ICsgb3V0c2xvcGUpIC8gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVuZDoK
LSAgICAgICAgICAgIGFuZ2xlID0gaW5zbG9wZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KGFuZ2xlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHVwZGF0ZVR5cGVBbmRNYXJrZXIoY29uc3Qg
VHlwZSYgdHlwZSwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlcikKLSAgICB7Ci0gICAg
ICAgIG1fdHlwZSA9IHR5cGU7Ci0gICAgICAgIG1fbWFya2VyID0gbWFya2VyOwotICAgIH0KLQot
ICAgIHZvaWQgdXBkYXRlT3V0c2xvcGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi0gICAgewot
ICAgICAgICBtX291dHNsb3BlUG9pbnRzWzBdID0gbV9vcmlnaW47Ci0gICAgICAgIG1fb3V0c2xv
cGVQb2ludHNbMV0gPSBwb2ludDsKLSAgICB9Ci0KLSAgICB2b2lkIHVwZGF0ZU1hcmtlckRhdGFG
b3JQYXRoRWxlbWVudChjb25zdCBQYXRoRWxlbWVudCogZWxlbWVudCkKLSAgICB7Ci0gICAgICAg
IEZsb2F0UG9pbnQqIHBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKLQotICAgICAgICBzd2l0Y2gg
KGVsZW1lbnQtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRv
UG9pbnQ6Ci0gICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMzMTE1IChQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQgbm90IGhh
bmRsZWQgZm9yIDxtYXJrZXI+KQotICAgICAgICAgICAgbV9vcmlnaW4gPSBwb2ludHNbMV07Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQYXRoRWxlbWVudEFkZEN1cnZlVG9Qb2lu
dDoKLSAgICAgICAgICAgIG1faW5zbG9wZVBvaW50c1swXSA9IHBvaW50c1sxXTsKLSAgICAgICAg
ICAgIG1faW5zbG9wZVBvaW50c1sxXSA9IHBvaW50c1syXTsKLSAgICAgICAgICAgIG1fb3JpZ2lu
ID0gcG9pbnRzWzJdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUGF0aEVsZW1l
bnRNb3ZlVG9Qb2ludDoKLSAgICAgICAgICAgIG1fc3VicGF0aFN0YXJ0ID0gcG9pbnRzWzBdOwot
ICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ6Ci0gICAgICAgICAgICB1cGRh
dGVJbnNsb3BlKHBvaW50c1swXSk7Ci0gICAgICAgICAgICBtX29yaWdpbiA9IHBvaW50c1swXTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBhdGhFbGVtZW50Q2xvc2VTdWJwYXRo
OgotICAgICAgICAgICAgdXBkYXRlSW5zbG9wZShwb2ludHNbMF0pOwotICAgICAgICAgICAgbV9v
cmlnaW4gPSBtX3N1YnBhdGhTdGFydDsKLSAgICAgICAgICAgIG1fc3VicGF0aFN0YXJ0ID0gRmxv
YXRQb2ludCgpOwotICAgICAgICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZvaWQgdXBkYXRl
SW5zbG9wZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLSAgICB7Ci0gICAgICAgIG1faW5zbG9w
ZVBvaW50c1swXSA9IG1fb3JpZ2luOwotICAgICAgICBtX2luc2xvcGVQb2ludHNbMV0gPSBwb2lu
dDsKLSAgICB9Ci0KLSAgICBUeXBlIG1fdHlwZTsKLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
ciogbV9tYXJrZXI7Ci0gICAgRmxvYXRQb2ludCBtX29yaWdpbjsKLSAgICBGbG9hdFBvaW50IG1f
c3VicGF0aFN0YXJ0OwotICAgIEZsb2F0UG9pbnQgbV9pbnNsb3BlUG9pbnRzWzJdOwotICAgIEZs
b2F0UG9pbnQgbV9vdXRzbG9wZVBvaW50c1syXTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJM
RShTVkcpCi0jZW5kaWYgLy8gU1ZHTWFya2VyRGF0YV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uY3BwCShyZXZpc2lvbiA3NTM0NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwOCBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHTWFya2VyTGF5b3V0
SW5mby5oIgotCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1TVkdNYXJrZXJMYXlvdXRJbmZvOjpTVkdNYXJrZXJMYXlvdXRJbmZv
KCkKLSAgICA6IG1fbWlkTWFya2VyKDApCi0gICAgLCBtX2VsZW1lbnRJbmRleCgwKQotICAgICwg
bV9zdHJva2VXaWR0aCgwKQotewotfQotCi1TVkdNYXJrZXJMYXlvdXRJbmZvOjp+U1ZHTWFya2Vy
TGF5b3V0SW5mbygpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzU3RhcnRBbmRN
aWRNYXJrZXJzKHZvaWQqIGluZm9QdHIsIGNvbnN0IFBhdGhFbGVtZW50KiBlbGVtZW50KQotewot
ICAgIFNWR01hcmtlckxheW91dEluZm8mIGluZm8gPSAqcmVpbnRlcnByZXRfY2FzdDxTVkdNYXJr
ZXJMYXlvdXRJbmZvKj4oaW5mb1B0cik7Ci0gICAgU1ZHTWFya2VyRGF0YSYgbWFya2VyRGF0YSA9
IGluZm8ubWFya2VyRGF0YSgpOwotICAgIGludCYgZWxlbWVudEluZGV4ID0gaW5mby5lbGVtZW50
SW5kZXgoKTsKLQotICAgIC8vIEZpcnN0IHVwZGF0ZSB0aGUgb3V0c2xvcGUgZm9yIHRoZSBwcmV2
aW91cyBlbGVtZW50Ci0gICAgbWFya2VyRGF0YS51cGRhdGVPdXRzbG9wZShlbGVtZW50LT5wb2lu
dHNbMF0pOwotCi0gICAgLy8gRHJhdyB0aGUgbWFya2VyIGZvciB0aGUgcHJldmlvdXMgZWxlbWVu
dAotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXIgPSBtYXJrZXJEYXRhLm1hcmtl
cigpOwotICAgIGlmIChlbGVtZW50SW5kZXggPiAwICYmIG1hcmtlcikKLSAgICAgICAgaW5mby5h
ZGRMYXlvdXRlZE1hcmtlcihtYXJrZXIsIG1hcmtlckRhdGEub3JpZ2luKCksIG1hcmtlckRhdGEu
Y3VycmVudEFuZ2xlKCkpOwotCi0gICAgLy8gVXBkYXRlIG91ciBtYXJrZXIgZGF0YSBmb3IgdGhp
cyBlbGVtZW50Ci0gICAgbWFya2VyRGF0YS51cGRhdGVNYXJrZXJEYXRhRm9yUGF0aEVsZW1lbnQo
ZWxlbWVudCk7Ci0KLSAgICAvLyBBZnRlciBkcmF3aW5nIHRoZSBzdGFydCBtYXJrZXIsIHN3aXRj
aCB0byBkcmF3aW5nIG1pZCBtYXJrZXJzCi0gICAgaWYgKGVsZW1lbnRJbmRleCA9PSAxKQotICAg
ICAgICBtYXJrZXJEYXRhLnVwZGF0ZVR5cGVBbmRNYXJrZXIoU1ZHTWFya2VyRGF0YTo6TWlkLCBp
bmZvLm1pZE1hcmtlcigpKTsKLQotICAgICsrZWxlbWVudEluZGV4OwotfQotCi1GbG9hdFJlY3Qg
U1ZHTWFya2VyTGF5b3V0SW5mbzo6Y2FsY3VsYXRlQm91bmRhcmllcyhSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlciogc3RhcnRNYXJrZXIsIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtaWRNYXJrZXIs
IFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBlbmRNYXJrZXIsIGZsb2F0IHN0cm9rZVdpZHRoLCBj
b25zdCBQYXRoJiBwYXRoKQotewotICAgIG1fbGF5b3V0LmNsZWFyKCk7Ci0gICAgbV9taWRNYXJr
ZXIgPSBtaWRNYXJrZXI7Ci0gICAgbV9zdHJva2VXaWR0aCA9IHN0cm9rZVdpZHRoOwotICAgIG1f
ZWxlbWVudEluZGV4ID0gMDsKLSAgICBtX21hcmtlckRhdGEgPSBTVkdNYXJrZXJEYXRhKFNWR01h
cmtlckRhdGE6OlN0YXJ0LCBzdGFydE1hcmtlcik7Ci0gICAgcGF0aC5hcHBseSh0aGlzLCBwcm9j
ZXNzU3RhcnRBbmRNaWRNYXJrZXJzKTsKLQotICAgIGlmIChlbmRNYXJrZXIpIHsKLSAgICAgICAg
bV9tYXJrZXJEYXRhLnVwZGF0ZVR5cGVBbmRNYXJrZXIoU1ZHTWFya2VyRGF0YTo6RW5kLCBlbmRN
YXJrZXIpOwotICAgICAgICBhZGRMYXlvdXRlZE1hcmtlcihlbmRNYXJrZXIsIG1fbWFya2VyRGF0
YS5vcmlnaW4oKSwgbV9tYXJrZXJEYXRhLmN1cnJlbnRBbmdsZSgpKTsKLSAgICB9Ci0KLSAgICBp
ZiAobV9sYXlvdXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAg
ICBWZWN0b3I8TWFya2VyTGF5b3V0Pjo6aXRlcmF0b3IgaXQgPSBtX2xheW91dC5iZWdpbigpOwot
ICAgIFZlY3RvcjxNYXJrZXJMYXlvdXQ+OjppdGVyYXRvciBlbmQgPSBtX2xheW91dC5lbmQoKTsK
LQotICAgIEZsb2F0UmVjdCBib3VuZHM7Ci0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBNYXJrZXJMYXlvdXQmIGxheW91dCA9ICppdDsKLQotICAgICAgICBSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlciogbWFya2VyQ29udGVudCA9IGxheW91dC5tYXJrZXI7Ci0gICAgICAgIEFT
U0VSVChtYXJrZXJDb250ZW50KTsKLQotICAgICAgICBib3VuZHMudW5pdGUobWFya2VyQ29udGVu
dC0+bWFya2VyQm91bmRhcmllcyhsYXlvdXQubWF0cml4KSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGJvdW5kczsKLX0KLQotdm9pZCBTVkdNYXJrZXJMYXlvdXRJbmZvOjpkcmF3TWFya2VycyhQYWlu
dEluZm8mIHBhaW50SW5mbykKLXsKLSAgICBpZiAobV9sYXlvdXQuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBWZWN0b3I8TWFya2VyTGF5b3V0Pjo6aXRlcmF0b3IgaXQgPSBtX2xh
eW91dC5iZWdpbigpOwotICAgIFZlY3RvcjxNYXJrZXJMYXlvdXQ+OjppdGVyYXRvciBlbmQgPSBt
X2xheW91dC5lbmQoKTsKLQotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
TWFya2VyTGF5b3V0JiBsYXlvdXQgPSAqaXQ7Ci0gICAgICAgIGxheW91dC5tYXJrZXItPmRyYXco
cGFpbnRJbmZvLCBsYXlvdXQubWF0cml4KTsKLSAgICB9Ci19Ci0KLXZvaWQgU1ZHTWFya2VyTGF5
b3V0SW5mbzo6YWRkTGF5b3V0ZWRNYXJrZXIoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtl
ciwgY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBhbmdsZSkKLXsKLSAgICBBU1NFUlQo
bWFya2VyKTsKLSAgICBtX2xheW91dC5hcHBlbmQoTWFya2VyTGF5b3V0KG1hcmtlciwgbWFya2Vy
LT5tYXJrZXJUcmFuc2Zvcm1hdGlvbihvcmlnaW4sIGFuZ2xlLCBtX3N0cm9rZVdpZHRoKSkpOwot
fQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NWR01hcmtlckxheW91dEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oCShyZXZpc2lvbiA3NTM0NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdNYXJrZXJM
YXlvdXRJbmZvX2gKLSNkZWZpbmUgU1ZHTWFya2VyTGF5b3V0SW5mb19oCi0KLSNpZiBFTkFCTEUo
U1ZHKQotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlNWR01hcmtlckRhdGEu
aCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBQYXRoOwotY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI7Ci0KLXN0cnVjdCBN
YXJrZXJMYXlvdXQgewotICAgIE1hcmtlckxheW91dChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciog
bWFya2VyT2JqID0gMCwgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeE9iaiA9IEFmZmluZVRyYW5zZm9y
bSgpKQotICAgICAgICA6IG1hcmtlcihtYXJrZXJPYmopCi0gICAgICAgICwgbWF0cml4KG1hdHJp
eE9iaikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtYXJrZXIpOwotICAgIH0KLQotICAgIFJlbmRl
clNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXI7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsK
LX07Ci0KLWNsYXNzIFNWR01hcmtlckxheW91dEluZm8gOiBwdWJsaWMgTm9uY29weWFibGUgewot
cHVibGljOgotICAgIFNWR01hcmtlckxheW91dEluZm8oKTsKLSAgICB+U1ZHTWFya2VyTGF5b3V0
SW5mbygpOwotCi0gICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIqIHN0YXJ0TWFya2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWlkTWFy
a2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogZW5kTWFya2VyLCBmbG9hdCBzdHJva2VXaWR0
aCwgY29uc3QgUGF0aCYpOwotICAgIHZvaWQgZHJhd01hcmtlcnMoUGFpbnRJbmZvJik7Ci0KLSAg
ICAvLyBVc2VkIGJ5IHN0YXRpYyBpbmxpbmUgaGVscGVyIGZ1bmN0aW9ucyBpbiBTVkdNYXJrZXJM
YXlvdXRJbmZvLmNwcAotICAgIFNWR01hcmtlckRhdGEmIG1hcmtlckRhdGEoKSB7IHJldHVybiBt
X21hcmtlckRhdGE7IH0KLSAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWlkTWFya2VyKCkg
Y29uc3QgeyByZXR1cm4gbV9taWRNYXJrZXI7IH0KLSAgICBpbnQmIGVsZW1lbnRJbmRleCgpIHsg
cmV0dXJuIG1fZWxlbWVudEluZGV4OyB9Ci0gICAgdm9pZCBhZGRMYXlvdXRlZE1hcmtlcihSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlciosIGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgYW5n
bGUpOwotCi1wcml2YXRlOgotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtX21pZE1hcmtl
cjsKLQotICAgIC8vIFVzZWQgd2hpbGUgbGF5b3V0aW5nIG1hcmtlcnMKLSAgICBpbnQgbV9lbGVt
ZW50SW5kZXg7Ci0gICAgU1ZHTWFya2VyRGF0YSBtX21hcmtlckRhdGE7Ci0gICAgZmxvYXQgbV9z
dHJva2VXaWR0aDsKLQotICAgIC8vIEhvbGRzIHRoZSBmaW5hbCBjb21wdXRlZCByZXN1bHQKLSAg
ICBWZWN0b3I8TWFya2VyTGF5b3V0PiBtX2xheW91dDsKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5j
cHAJKHJldmlzaW9uIDc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRl
clN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRl
ICJTVkdSZW5kZXJTdXBwb3J0LmgiCi0KLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgotI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2VyLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgot
I2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5o
IgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUludFJlY3QgU1ZHUmVuZGVyU3VwcG9ydDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyKQotewotICAgIC8vIFJldHVybiBlYXJseSBmb3IgYW55IGNhc2VzIHdoZXJlIHdlIGRvbid0
IGFjdHVhbGx5IHBhaW50Ci0gICAgaWYgKG9iamVjdC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9
IFZJU0lCTEUgJiYgIW9iamVjdC0+ZW5jbG9zaW5nTGF5ZXIoKS0+aGFzVmlzaWJsZUNvbnRlbnQo
KSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIC8vIFBhc3Mgb3VyIGxvY2FsIHBh
aW50IHJlY3QgdG8gY29tcHV0ZVJlY3RGb3JSZXBhaW50KCkgd2hpY2ggd2lsbAotICAgIC8vIG1h
cCB0byBwYXJlbnQgY29vcmRzIGFuZCByZWN1cnNlIHVwIHRoZSBwYXJlbnQgY2hhaW4uCi0gICAg
SW50UmVjdCByZXBhaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qob2JqZWN0LT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBvYmplY3QtPmNvbXB1dGVSZWN0Rm9yUmVwYWlu
dChyZXBhaW50Q29udGFpbmVyLCByZXBhaW50UmVjdCk7Ci0gICAgcmV0dXJuIHJlcGFpbnRSZWN0
OwotfQotCi12b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5k
ZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IEludFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKQotewotICAgIGNvbnN0IFNWR1JlbmRl
clN0eWxlKiBzdmdTdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBpZiAo
Y29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gc3ZnU3R5bGUtPnNoYWRvdygpKQotICAgICAgICBz
aGFkb3ctPmFkanVzdFJlY3RGb3JTaGFkb3cocmVwYWludFJlY3QpOwotCi0gICAgLy8gVHJhbnNs
YXRlIHRvIGNvb3JkcyBpbiBvdXIgcGFyZW50IHJlbmRlcmVyLCBhbmQgdGhlbiBjYWxsIGNvbXB1
dGVSZWN0Rm9yUmVwYWludCBvbiBvdXIgcGFyZW50Ci0gICAgcmVwYWludFJlY3QgPSBvYmplY3Qt
PmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlcGFpbnRSZWN0KTsKLSAgICBvYmpl
Y3QtPnBhcmVudCgpLT5jb21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgcmVw
YWludFJlY3QsIGZpeGVkKTsKLX0KLQotdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjptYXBMb2NhbFRv
Q29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCAsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJh
bnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKQotewotICAgIEFTU0VSVCghZml4ZWQpOyAvLyBX
ZSBzaG91bGQgaGF2ZSBubyBmaXhlZCBjb250ZW50IGluIHRoZSBTVkcgcmVuZGVyaW5nIHRyZWUu
Ci0gICAgQVNTRVJUKHVzZVRyYW5zZm9ybXMpOyAvLyBNYXBwaW5nIGEgcG9pbnQgdGhyb3VnaCBT
Vkcgdy9vIHJlc3BlY3RpbmcgdHJhbnNmb3JtcyBpcyB1c2VsZXNzLgotICAgIHRyYW5zZm9ybVN0
YXRlLmFwcGx5VHJhbnNmb3JtKG9iamVjdC0+bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpKTsKLSAg
ICBvYmplY3QtPnBhcmVudCgpLT5tYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIs
IGZpeGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0ZSk7Ci19Ci0KLWJvb2wgU1ZHUmVu
ZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqIG9iamVj
dCwgUGFpbnRJbmZvJiBwYWludEluZm8pCi17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0KLSAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsK
LQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdTdHlsZSgp
OwotICAgIEFTU0VSVChzdmdTdHlsZSk7Ci0KLSAgICAvLyBTZXR1cCB0cmFuc3BhcmVuY3kgbGF5
ZXJzIGJlZm9yZSBzZXR0aW5nIHVwIFNWRyByZXNvdXJjZXMhCi0gICAgZmxvYXQgb3BhY2l0eSA9
IHN0eWxlLT5vcGFjaXR5KCk7Ci0gICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gc3ZnU3R5
bGUtPnNoYWRvdygpOwotICAgIGlmIChvcGFjaXR5IDwgMSB8fCBzaGFkb3cpIHsKLSAgICAgICAg
RmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gb2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpOwotCi0gICAgICAgIGlmIChvcGFjaXR5IDwgMSkgewotICAgICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmNsaXAocmVwYWludFJlY3QpOwotICAgICAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoc2hhZG93KSB7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChy
ZXBhaW50UmVjdCk7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U2hhZG93KElu
dFNpemUoc2hhZG93LT54KCksIHNoYWRvdy0+eSgpKSwgc2hhZG93LT5ibHVyKCksIHNoYWRvdy0+
Y29sb3IoKSwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291
cmNlc0ZvclJlbmRlck9iamVjdChvYmplY3QpOwotICAgIGlmICghcmVzb3VyY2VzKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciogbWFza2Vy
ID0gcmVzb3VyY2VzLT5tYXNrZXIoKSkgewotICAgICAgICBpZiAoIW1hc2tlci0+YXBwbHlSZXNv
dXJjZShvYmplY3QsIHN0eWxlLCBwYWludEluZm8uY29udGV4dCwgQXBwbHlUb0RlZmF1bHRNb2Rl
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gcmVzb3VyY2VzLT5jbGlwcGVyKCkpIHsKLSAgICAg
ICAgaWYgKCFjbGlwcGVyLT5hcHBseVJlc291cmNlKG9iamVjdCwgc3R5bGUsIHBhaW50SW5mby5j
b250ZXh0LCBBcHBseVRvRGVmYXVsdE1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotI2lmIEVOQUJMRShGSUxURVJTKQotICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlciogZmlsdGVyID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkgewotICAgICAgICBpZiAoIWZpbHRl
ci0+YXBwbHlSZXNvdXJjZShvYmplY3QsIHN0eWxlLCBwYWludEluZm8uY29udGV4dCwgQXBwbHlU
b0RlZmF1bHRNb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJl
bmRlclNWR0NvbnRlbnQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBHcmFwaGljc0NvbnRleHQqIHNhdmVkQ29udGV4dCkKLXsKLSNpZiAhRU5BQkxFKEZJTFRFUlMp
Ci0gICAgVU5VU0VEX1BBUkFNKHNhdmVkQ29udGV4dCk7Ci0jZW5kaWYKLQotICAgIEFTU0VSVChv
YmplY3QpOwotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgp
OwotICAgIEFTU0VSVChzdHlsZSk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5
bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICBBU1NFUlQoc3ZnU3R5bGUpOwotCi0jaWYgRU5B
QkxFKEZJTFRFUlMpCi0gICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXND
YWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KG9iamVjdCk7Ci0gICAgaWYgKHJl
c291cmNlcykgewotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9
IHJlc291cmNlcy0+ZmlsdGVyKCkpIHsKLSAgICAgICAgICAgIGZpbHRlci0+cG9zdEFwcGx5UmVz
b3VyY2Uob2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgQXBwbHlUb0RlZmF1bHRNb2RlLCAvKiBw
YXRoICovMCk7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dCA9IHNhdmVkQ29udGV4dDsK
LSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKHN0eWxlLT5vcGFjaXR5KCkgPCAx
KQotICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLQot
ICAgIGlmIChzdmdTdHlsZS0+c2hhZG93KCkpCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5l
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotfQotCi12b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1
dGVDb250YWluZXJCb3VuZGluZ0JveGVzKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyLCBG
bG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94LCBGbG9hdFJlY3QmIHN0cm9rZUJvdW5kaW5nQm94
LCBGbG9hdFJlY3QmIHJlcGFpbnRCb3VuZGluZ0JveCkKLXsKLSAgICBmb3IgKFJlbmRlck9iamVj
dCogY3VycmVudCA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0g
Y3VycmVudC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoY3VycmVudC0+aXNTVkdIaWRk
ZW5Db250YWluZXIoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtID0gY3VycmVudC0+bG9jYWxUb1BhcmVudFRyYW5zZm9y
bSgpOwotICAgICAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkgewotICAgICAgICAgICAg
b2JqZWN0Qm91bmRpbmdCb3gudW5pdGUoY3VycmVudC0+b2JqZWN0Qm91bmRpbmdCb3goKSk7Ci0g
ICAgICAgICAgICBzdHJva2VCb3VuZGluZ0JveC51bml0ZShjdXJyZW50LT5zdHJva2VCb3VuZGlu
Z0JveCgpKTsKLSAgICAgICAgICAgIHJlcGFpbnRCb3VuZGluZ0JveC51bml0ZShjdXJyZW50LT5y
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIG9iamVjdEJvdW5kaW5nQm94LnVuaXRlKHRyYW5zZm9ybS5tYXBSZWN0KGN1cnJlbnQt
Pm9iamVjdEJvdW5kaW5nQm94KCkpKTsKLSAgICAgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVu
aXRlKHRyYW5zZm9ybS5tYXBSZWN0KGN1cnJlbnQtPnN0cm9rZUJvdW5kaW5nQm94KCkpKTsKLSAg
ICAgICAgICAgIHJlcGFpbnRCb3VuZGluZ0JveC51bml0ZSh0cmFuc2Zvcm0ubWFwUmVjdChjdXJy
ZW50LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLWJvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgbG9jYWxSZXBhaW50UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBsb2NhbFRyYW5zZm9ybSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCi17Ci0gICAg
aWYgKGxvY2FsVHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgcmV0dXJuIGxvY2FsUmVw
YWludFJlY3QuaW50ZXJzZWN0cyhwYWludEluZm8ucmVjdCk7Ci0KLSAgICByZXR1cm4gbG9jYWxU
cmFuc2Zvcm0ubWFwUmVjdChsb2NhbFJlcGFpbnRSZWN0KS5pbnRlcnNlY3RzKHBhaW50SW5mby5y
ZWN0KTsKLX0KLQotY29uc3QgUmVuZGVyU1ZHUm9vdCogU1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRy
ZWVSb290T2JqZWN0KGNvbnN0IFJlbmRlck9iamVjdCogc3RhcnQpCi17Ci0gICAgd2hpbGUgKHN0
YXJ0ICYmICFzdGFydC0+aXNTVkdSb290KCkpCi0gICAgICAgIHN0YXJ0ID0gc3RhcnQtPnBhcmVu
dCgpOwotCi0gICAgQVNTRVJUKHN0YXJ0KTsKLSAgICBBU1NFUlQoc3RhcnQtPmlzU1ZHUm9vdCgp
KTsKLSAgICByZXR1cm4gdG9SZW5kZXJTVkdSb290KHN0YXJ0KTsKLX0KLQotc3RhdGljIGlubGlu
ZSB2b2lkIGludmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKFJlbmRlck9iamVjdCogc3RhcnQp
Ci17Ci0gICAgQVNTRVJUKCFzdGFydC0+bmVlZHNMYXlvdXQoKSk7Ci0gICAgaWYgKFNWR1Jlc291
cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJl
bmRlck9iamVjdChzdGFydCkpCi0gICAgICAgIHJlc291cmNlcy0+cmVtb3ZlQ2xpZW50RnJvbUNh
Y2hlKHN0YXJ0LCBmYWxzZSk7Ci0KLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBzdGFy
dC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAg
ICAgICAgaW52YWxpZGF0ZVJlc291cmNlc09mQ2hpbGRyZW4oY2hpbGQpOwotfQotCi12b2lkIFNW
R1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKFJlbmRlck9iamVjdCogc3RhcnQsIGJvb2wg
c2VsZk5lZWRzTGF5b3V0KQotewotICAgIGJvb2wgbGF5b3V0U2l6ZUNoYW5nZWQgPSBmaW5kVHJl
ZVJvb3RPYmplY3Qoc3RhcnQpLT5pc0xheW91dFNpemVDaGFuZ2VkKCk7Ci0gICAgSGFzaFNldDxS
ZW5kZXJPYmplY3QqPiBub3RsYXlvdXRlZE9iamVjdHM7Ci0KLSAgICBmb3IgKFJlbmRlck9iamVj
dCogY2hpbGQgPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgewotICAgICAgICBib29sIG5lZWRzTGF5b3V0ID0gc2VsZk5lZWRzTGF5b3V0
OwotCi0gICAgICAgIGlmIChsYXlvdXRTaXplQ2hhbmdlZCkgewotICAgICAgICAgICAgLy8gV2hl
biBzZWxmTmVlZHNMYXlvdXQgaXMgZmFsc2UgYW5kIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkLCB3
ZSBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgdGhpcyBjaGlsZCB1c2VzIHJlbGF0aXZlIGxlbmd0aHMK
LSAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBlbGVtZW50ID0gY2hpbGQtPm5vZGUoKS0+aXNT
VkdFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGQtPm5vZGUoKSkgOiAw
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzU3R5bGVkKCkgJiYgc3RhdGljX2Nh
c3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkIGFuZCB3
aGVuIHVzaW5nIHJlbGF0aXZlIHZhbHVlcyB0ZWxsIHRoZSBSZW5kZXJTVkdQYXRoIHRvIHVwZGF0
ZSBpdHMgUGF0aCBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1NWR1Bh
dGgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyU1ZHUGF0aChjaGlsZCktPnNl
dE5lZWRzUGF0aFVwZGF0ZSgpOwotCi0gICAgICAgICAgICAgICAgICAgIG5lZWRzTGF5b3V0ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobmVlZHNMYXlvdXQpIHsKLSAgICAgICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91
dCh0cnVlLCBmYWxzZSk7Ci0gICAgICAgICAgICBjaGlsZC0+bGF5b3V0KCk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPm5lZWRzTGF5b3V0KCkpCi0gICAgICAgICAg
ICAgICAgY2hpbGQtPmxheW91dCgpOwotICAgICAgICAgICAgZWxzZSBpZiAobGF5b3V0U2l6ZUNo
YW5nZWQpCi0gICAgICAgICAgICAgICAgbm90bGF5b3V0ZWRPYmplY3RzLmFkZChjaGlsZCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoIWNoaWxkLT5uZWVkc0xheW91dCgpKTsKLSAgICB9
Ci0KLSAgICBpZiAoIWxheW91dFNpemVDaGFuZ2VkKSB7Ci0gICAgICAgIEFTU0VSVChub3RsYXlv
dXRlZE9iamVjdHMuaXNFbXB0eSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IElmIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkLCBpbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2Yg
YWxsIGNoaWxkcmVuIHRoYXQgZGlkbid0IGdvIHRocm91Z2ggdGhlIGxheW91dCgpIGNvZGUgcGF0
aC4KLSAgICBIYXNoU2V0PFJlbmRlck9iamVjdCo+OjppdGVyYXRvciBlbmQgPSBub3RsYXlvdXRl
ZE9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFJlbmRlck9iamVjdCo+OjppdGVyYXRv
ciBpdCA9IG5vdGxheW91dGVkT2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGludmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKCppdCk7Ci19Ci0KLWJvb2wgU1ZHUmVu
ZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkK
LXsKLSAgICAvLyBTVkcgZG9lc24ndCBzdXBwb3J0IGluZGVwZW5kZW50IHgveSBvdmVyZmxvdwot
ICAgIEFTU0VSVChvYmplY3QtPnN0eWxlKCktPm92ZXJmbG93WCgpID09IG9iamVjdC0+c3R5bGUo
KS0+b3ZlcmZsb3dZKCkpOwotCi0gICAgLy8gT1NDUk9MTCBpcyBuZXZlciBzZXQgZm9yIFNWRyAt
IHNlZSBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZQotICAgIEFTU0VSVChvYmpl
Y3QtPnN0eWxlKCktPm92ZXJmbG93WCgpICE9IE9TQ1JPTEwpOwotCi0gICAgLy8gUmVuZGVyU1ZH
Um9vdCBzaG91bGQgbmV2ZXIgcXVlcnkgZm9yIG92ZXJmbG93IHN0YXRlIC0gaXQgc2hvdWxkIGFs
d2F5cyBjbGlwIGl0c2VsZiB0byB0aGUgaW5pdGlhbCB2aWV3cG9ydCBzaXplLgotICAgIEFTU0VS
VCghb2JqZWN0LT5pc1Jvb3QoKSk7Ci0KLSAgICByZXR1cm4gb2JqZWN0LT5zdHlsZSgpLT5vdmVy
Zmxvd1goKSA9PSBPSElEREVOOwotfQotCi12b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2Vj
dFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyhjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgRmxv
YXRSZWN0JiByZXBhaW50UmVjdCkKLXsKLSAgICBBU1NFUlQob2JqZWN0KTsKLQotICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKLSAgICBBU1NFUlQoc3R5bGUpOwotCi0g
ICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7Ci0g
ICAgQVNTRVJUKHN2Z1N0eWxlKTsKLQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb25z
dF9jYXN0PFJlbmRlck9iamVjdCo+KG9iamVjdCk7Ci0gICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJj
ZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHJl
bmRlcmVyKTsKLSAgICBpZiAoIXJlc291cmNlcykgewotICAgICAgICBpZiAoY29uc3QgU2hhZG93
RGF0YSogc2hhZG93ID0gc3ZnU3R5bGUtPnNoYWRvdygpKQotICAgICAgICAgICAgc2hhZG93LT5h
ZGp1c3RSZWN0Rm9yU2hhZG93KHJlcGFpbnRSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotI2lmIEVOQUJMRShGSUxURVJTKQotICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciog
ZmlsdGVyID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkKLSAgICAgICAgcmVwYWludFJlY3QgPSBmaWx0
ZXItPnJlc291cmNlQm91bmRpbmdCb3gocmVuZGVyZXIpOwotI2VuZGlmCi0KLSAgICBpZiAoUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gcmVzb3VyY2VzLT5jbGlwcGVyKCkpCi0g
ICAgICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChjbGlwcGVyLT5yZXNvdXJjZUJvdW5kaW5nQm94
KHJlbmRlcmVyKSk7Ci0KLSAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9
IHJlc291cmNlcy0+bWFza2VyKCkpCi0gICAgICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChtYXNr
ZXItPnJlc291cmNlQm91bmRpbmdCb3gocmVuZGVyZXIpKTsKLQotICAgIGlmIChjb25zdCBTaGFk
b3dEYXRhKiBzaGFkb3cgPSBzdmdTdHlsZS0+c2hhZG93KCkpCi0gICAgICAgIHNoYWRvdy0+YWRq
dXN0UmVjdEZvclNoYWRvdyhyZXBhaW50UmVjdCk7Ci19Ci0KLWJvb2wgU1ZHUmVuZGVyU3VwcG9y
dDo6cG9pbnRJbkNsaXBwaW5nQXJlYShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCi17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0KLSAgICAvLyBXZSBqdXN0IHRh
a2UgY2xpcHBlcnMgaW50byBhY2NvdW50IHRvIGRldGVybWluZSBpZiBhIHBvaW50IGlzIG9uIHRo
ZSBub2RlLiBUaGUgU3BlY2lmaWNhdGlvbiBtYXkKLSAgICAvLyBjaGFuZ2UgbGF0ZXIgYW5kIHdl
IGFsc28gbmVlZCB0byBjaGVjayBtYXNrZXJzLgotICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2Vz
ID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChvYmpl
Y3QpOwotICAgIGlmICghcmVzb3VyY2VzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlm
IChSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSByZXNvdXJjZXMtPmNsaXBwZXIo
KSkKLSAgICAgICAgcmV0dXJuIGNsaXBwZXItPmhpdFRlc3RDbGlwQ29udGVudChvYmplY3QtPm9i
amVjdEJvdW5kaW5nQm94KCksIHBvaW50KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0KQotewotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBBU1NFUlQoc3R5bGUpOwot
ICAgIEFTU0VSVChvYmplY3QpOwotICAgIEFTU0VSVChvYmplY3QtPm5vZGUoKSk7Ci0gICAgQVNT
RVJUKG9iamVjdC0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7Ci0KLSAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICBBU1NFUlQoc3ZnU3R5
bGUpOwotCi0gICAgU1ZHRWxlbWVudCogbGVuZ3RoQ29udGV4dCA9IHN0YXRpY19jYXN0PFNWR0Vs
ZW1lbnQqPihvYmplY3QtPm5vZGUoKSk7Ci0gICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNz
KHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKGxlbmd0aENvbnRleHQpKTsKLSAgICBjb250
ZXh0LT5zZXRMaW5lQ2FwKHN2Z1N0eWxlLT5jYXBTdHlsZSgpKTsKLSAgICBjb250ZXh0LT5zZXRM
aW5lSm9pbihzdmdTdHlsZS0+am9pblN0eWxlKCkpOwotICAgIGlmIChzdmdTdHlsZS0+am9pblN0
eWxlKCkgPT0gTWl0ZXJKb2luKQotICAgICAgICBjb250ZXh0LT5zZXRNaXRlckxpbWl0KHN2Z1N0
eWxlLT5zdHJva2VNaXRlckxpbWl0KCkpOwotCi0gICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD4m
IGRhc2hlcyA9IHN2Z1N0eWxlLT5zdHJva2VEYXNoQXJyYXkoKTsKLSAgICBpZiAoZGFzaGVzLmlz
RW1wdHkoKSkKLSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwot
ICAgIGVsc2UgewotICAgICAgICBEYXNoQXJyYXkgZGFzaEFycmF5OwotICAgICAgICBjb25zdCBW
ZWN0b3I8U1ZHTGVuZ3RoPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGFzaGVzLmVuZCgpOwotICAg
ICAgICBmb3IgKFZlY3RvcjxTVkdMZW5ndGg+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhc2hlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBkYXNoQXJyYXkuYXBwZW5kKCgq
aXQpLnZhbHVlKGxlbmd0aENvbnRleHQpKTsKLQotICAgICAgICBjb250ZXh0LT5zZXRMaW5lRGFz
aChkYXNoQXJyYXksIHN2Z1N0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCkudmFsdWUobGVuZ3RoQ29u
dGV4dCkpOwotICAgIH0KLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaAkocmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDgzICswLDAgQEAKLS8qKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHUmVuZGVyU3VwcG9ydF9oCi0jZGVm
aW5lIFNWR1JlbmRlclN1cHBvcnRfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJQYWlu
dEluZm8uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFBvaW50OwotY2xh
c3MgRmxvYXRSZWN0OwotY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFzcyBSZW5kZXJCb3hNb2RlbE9i
amVjdDsKLWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclN0eWxlOwotY2xhc3MgUmVu
ZGVyU1ZHUm9vdDsKLWNsYXNzIFRyYW5zZm9ybVN0YXRlOwotCi0vLyBTVkdSZW5kZXJlclN1cHBv
cnQgaXMgYSBoZWxwZXIgY2xhc3Mgc2hhcmluZyBjb2RlIGJldHdlZW4gYWxsIFNWRyByZW5kZXJl
cnMuCi1jbGFzcyBTVkdSZW5kZXJTdXBwb3J0IHsKLXB1YmxpYzoKLSAgICAvLyBVc2VkIGJ5IGFs
bCBTVkcgcmVuZGVyZXJzIHdobyBhcHBseSBjbGlwL2ZpbHRlci9ldGMuIHJlc291cmNlcyB0byB0
aGUgcmVuZGVyZXIgY29udGVudAotICAgIHN0YXRpYyBib29sIHByZXBhcmVUb1JlbmRlclNWR0Nv
bnRlbnQoUmVuZGVyT2JqZWN0KiwgUGFpbnRJbmZvJik7Ci0gICAgc3RhdGljIHZvaWQgZmluaXNo
UmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqLCBQYWludEluZm8mLCBHcmFwaGljc0NvbnRl
eHQqIHNhdmVkQ29udGV4dCk7Ci0KLSAgICAvLyBTaGFyZXMgY2hpbGQgbGF5b3V0aW5nIGNvZGUg
YmV0d2VlbiBSZW5kZXJTVkdSb290L1JlbmRlclNWRyhIaWRkZW4pQ29udGFpbmVyCi0gICAgc3Rh
dGljIHZvaWQgbGF5b3V0Q2hpbGRyZW4oUmVuZGVyT2JqZWN0KiwgYm9vbCBzZWxmTmVlZHNMYXlv
dXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGRldGVybWluaW5nIHdoZXRlciBvdmVyZmxv
dyBpcyBoaWRkZW4KLSAgICBzdGF0aWMgYm9vbCBpc092ZXJmbG93SGlkZGVuKGNvbnN0IFJlbmRl
ck9iamVjdCopOwotCi0gICAgLy8gQ2FsY3VsYXRlcyB0aGUgcmVwYWludFJlY3QgaW4gY29tYmlu
YXRpb24gd2l0aCBmaWx0ZXIsIGNsaXBwZXIgYW5kIG1hc2tlciBpbiBsb2NhbCBjb29yZGluYXRl
cy4KLSAgICBzdGF0aWMgdm9pZCBpbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXMoY29u
c3QgUmVuZGVyT2JqZWN0KiwgRmxvYXRSZWN0Jik7Ci0KLSAgICAvLyBEZXRlcm1pbmVzIHdoZXRo
ZXIgdGhlIHBhc3NlZCBwb2ludCBsaWVzIGluIGEgY2xpcHBpbmcgYXJlYQotICAgIHN0YXRpYyBi
b29sIHBvaW50SW5DbGlwcGluZ0FyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgRmxvYXRQb2ludCYp
OwotCi0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMoY29uc3Qg
UmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIEZs
b2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5nQm94
KTsKLSAgICBzdGF0aWMgYm9vbCBwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiBsb2NhbFJlcGFpbnRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2Fs
VHJhbnNmb3JtLCBjb25zdCBQYWludEluZm8mKTsKLQotICAgIC8vIEltcG9ydGFudCBmdW5jdGlv
bnMgdXNlZCBieSBuZWFybHkgYWxsIFNWRyByZW5kZXJlcnMgY2VudHJhbGl6aW5nIGNvb3JkaW5h
dGUgdHJhbnNmb3JtYXRpb25zIC8gcmVwYWludCByZWN0IGNhbGN1bGF0aW9ucwotICAgIHN0YXRp
YyBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlck9iamVjdCosIFJl
bmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKLSAgICBzdGF0aWMgdm9pZCBj
b21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmLCBib29sIGZpeGVkKTsKLSAgICBzdGF0aWMgdm9p
ZCBtYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCosIFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIHVzZVRyYW5zZm9ybXMsIGJvb2wgZml4ZWQs
IFRyYW5zZm9ybVN0YXRlJik7Ci0KLSAgICAvLyBTaGFyZWQgYmV0d2VlbiBTVkcgcmVuZGVyZXJz
IGFuZCByZXNvdXJjZXMuCi0gICAgc3RhdGljIHZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlck9iamVj
dCopOwotCi0gICAgLy8gRklYTUU6IFRoZXNlIG1ldGhvZHMgZG8gbm90IGJlbG9uZyBoZXJlLgot
ICAgIHN0YXRpYyBjb25zdCBSZW5kZXJTVkdSb290KiBmaW5kVHJlZVJvb3RPYmplY3QoY29uc3Qg
UmVuZGVyT2JqZWN0Kik7Ci0KLXByaXZhdGU6Ci0gICAgLy8gVGhpcyBjbGFzcyBpcyBub3QgY29u
c3RydWN0YWJsZS4KLSAgICBTVkdSZW5kZXJTdXBwb3J0KCk7Ci0gICAgflNWR1JlbmRlclN1cHBv
cnQoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShT
VkcpCi0jZW5kaWYgLy8gU1ZHUmVuZGVyU3VwcG9ydF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA3NTM0NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw3NDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAg
ICAgICAgKEMpIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqICAgICAgICAgICAoQykg
MjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgotICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAi
U1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKLSNpbmNsdWRl
ICJMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUu
aCIKLSNpbmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSAiUGF0dGVybkF0dHJpYnV0ZXMuaCIKLSNp
bmNsdWRlICJSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJJbWFn
ZS5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgotI2luY2x1ZGUgIlJlbmRlclNW
R0dyYWRpZW50U3RvcC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0ltYWdlLmgiCi0jaW5jbHVkZSAi
UmVuZGVyU1ZHSW5saW5lVGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKLSNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCIKLSNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tl
ci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIgotI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCi0jaW5jbHVkZSAi
UmVuZGVyU1ZHVGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRl
ICJTVkdDaXJjbGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRWxsaXBzZUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIK
LSNpbmNsdWRlICJTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdOYW1l
cy5oIgotI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHUGF0aFBhcnNl
ckZhY3RvcnkuaCIKLSNpbmNsdWRlICJTVkdQYXR0ZXJuRWxlbWVudC5oIgotI2luY2x1ZGUgIlNW
R1BvaW50TGlzdC5oIgotI2luY2x1ZGUgIlNWR1BvbHlFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
UmFkaWFsR3JhZGllbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHUmVjdEVsZW1lbnQuaCIKLSNp
bmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCi0jaW5jbHVkZSAiU1ZHU3RvcEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotLyoqIGNsYXNzICsgaW9tYW5pcCB0byBoZWxwIHN0cmVhbWlu
ZyBsaXN0IHNlcGFyYXRvcnMsIGkuZS4gIiwgIiBpbiBzdHJpbmcgImEsIGIsIGMsIGQiCi0gKiBD
YW4gYmUgdXNlZCBpbiBjYXNlcyB3aGVyZSB5b3UgZG9uJ3Qga25vdyB3aGljaCBpdGVtIGluIHRo
ZSBsaXN0IGlzIHRoZSBmaXJzdAotICogb25lIHRvIGJlIHByaW50ZWQsIGJ1dCBzdGlsbCB3YW50
IHRvIGF2b2lkIHN0cmluZ3MgbGlrZSAiLCBiLCBjIi4KLSAqLwotY2xhc3MgVGV4dFN0cmVhbVNl
cGFyYXRvciB7Ci1wdWJsaWM6Ci0gICAgVGV4dFN0cmVhbVNlcGFyYXRvcihjb25zdCBTdHJpbmcm
IHMpCi0gICAgICAgIDogbV9zZXBhcmF0b3IocykKLSAgICAgICAgLCBtX25lZWRUb1NlcGFyYXRl
KGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIFRleHRTdHJlYW1TZXBhcmF0b3ImKTsKLQotICAgIFN0
cmluZyBtX3NlcGFyYXRvcjsKLSAgICBib29sIG1fbmVlZFRvU2VwYXJhdGU7Ci19OwotCi1UZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUZXh0U3RyZWFtU2VwYXJhdG9yJiBz
ZXApCi17Ci0gICAgaWYgKHNlcC5tX25lZWRUb1NlcGFyYXRlKQotICAgICAgICB0cyA8PCBzZXAu
bV9zZXBhcmF0b3I7Ci0gICAgZWxzZQotICAgICAgICBzZXAubV9uZWVkVG9TZXBhcmF0ZSA9IHRy
dWU7Ci0gICAgcmV0dXJuIHRzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+Ci1z
dGF0aWMgdm9pZCB3cml0ZU5hbWVWYWx1ZVBhaXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IGNoYXIq
IG5hbWUsIFZhbHVlVHlwZSB2YWx1ZSkKLXsKLSAgICB0cyA8PCAiIFsiIDw8IG5hbWUgPDwgIj0i
IDw8IHZhbHVlIDw8ICJdIjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPgotc3Rh
dGljIHZvaWQgd3JpdGVOYW1lQW5kUXVvdGVkVmFsdWUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IGNo
YXIqIG5hbWUsIFZhbHVlVHlwZSB2YWx1ZSkKLXsKLSAgICB0cyA8PCAiIFsiIDw8IG5hbWUgPDwg
Ij1cIiIgPDwgdmFsdWUgPDwgIlwiXSI7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlSWZOb3RFbXB0
eShUZXh0U3RyZWFtJiB0cywgY29uc3QgY2hhciogbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWly
KHRzLCBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZT4KLXN0
YXRpYyB2b2lkIHdyaXRlSWZOb3REZWZhdWx0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBjaGFyKiBu
YW1lLCBWYWx1ZVR5cGUgdmFsdWUsIFZhbHVlVHlwZSBkZWZhdWx0VmFsdWUpCi17Ci0gICAgaWYg
KHZhbHVlICE9IGRlZmF1bHRWYWx1ZSkKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCBu
YW1lLCB2YWx1ZSk7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEZsb2F0UmVjdCAmcikKLXsKLSAgICB0cyA8PCAiYXQgKCI7IAotICAgIGlmIChoYXNG
cmFjdGlvbnMoci54KCkpKSAKLSAgICAgICAgdHMgPDwgci54KCk7Ci0gICAgZWxzZSAKLSAgICAg
ICAgdHMgPDwgaW50KHIueCgpKTsKLSAgICB0cyA8PCAiLCI7Ci0gICAgaWYgKGhhc0ZyYWN0aW9u
cyhyLnkoKSkpIAotICAgICAgICB0cyA8PCByLnkoKTsKLSAgICBlbHNlIAotICAgICAgICB0cyA8
PCBpbnQoci55KCkpOwotICAgIHRzIDw8ICIpIHNpemUgIjsKLSAgICBpZiAoaGFzRnJhY3Rpb25z
KHIud2lkdGgoKSkpIAotICAgICAgICB0cyA8PCByLndpZHRoKCk7IAotICAgIGVsc2UgCi0gICAg
ICAgIHRzIDw8IGludChyLndpZHRoKCkpOyAKLSAgICB0cyA8PCAieCI7Ci0gICAgaWYgKGhhc0Zy
YWN0aW9ucyhyLmhlaWdodCgpKSkgCi0gICAgICAgIHRzIDw8IHIuaGVpZ2h0KCk7Ci0gICAgZWxz
ZSAKLSAgICAgICAgdHMgPDwgaW50KHIuaGVpZ2h0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQot
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCi0gICAg
ICAgIHRzIDw8ICJpZGVudGl0eSI7Ci0gICAgZWxzZQotICAgICAgICB0cyA8PCAie209KCgiCi0g
ICAgICAgICAgIDw8IHRyYW5zZm9ybS5hKCkgPDwgIiwiIDw8IHRyYW5zZm9ybS5iKCkKLSAgICAg
ICAgICAgPDwgIikoIgotICAgICAgICAgICA8PCB0cmFuc2Zvcm0uYygpIDw8ICIsIiA8PCB0cmFu
c2Zvcm0uZCgpCi0gICAgICAgICAgIDw8ICIpKSB0PSgiCi0gICAgICAgICAgIDw8IHRyYW5zZm9y
bS5lKCkgPDwgIiwiIDw8IHRyYW5zZm9ybS5mKCkKLSAgICAgICAgICAgPDwgIil9IjsKLQotICAg
IHJldHVybiB0czsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFdpbmRSdWxlIHJ1bGUpCi17Ci0gICAgc3dpdGNoIChydWxlKSB7Ci0gICAg
Y2FzZSBSVUxFX05PTlpFUk86Ci0gICAgICAgIHRzIDw8ICJOT04tWkVSTyI7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUlVMRV9FVkVOT0REOgotICAgICAgICB0cyA8PCAiRVZFTi1PREQiOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTVkdVbml0VHlwZXM6OlNW
R1VuaXRUeXBlJiB1bml0VHlwZSkKLXsKLSAgICBzd2l0Y2ggKHVuaXRUeXBlKSB7Ci0gICAgY2Fz
ZSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfVU5LTk9XTjoKLSAgICAgICAgdHMgPDwgInVu
a25vd24iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRf
VFlQRV9VU0VSU1BBQ0VPTlVTRToKLSAgICAgICAgdHMgPDwgInVzZXJTcGFjZU9uVXNlIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNU
Qk9VTkRJTkdCT1g6Ci0gICAgICAgIHRzIDw8ICJvYmplY3RCb3VuZGluZ0JveCI7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0czsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNWR01hcmtlckVsZW1lbnQ6OlNWR01h
cmtlclVuaXRzVHlwZSYgbWFya2VyVW5pdCkKLXsKLSAgICBzd2l0Y2ggKG1hcmtlclVuaXQpIHsK
LSAgICBjYXNlIFNWR01hcmtlckVsZW1lbnQ6OlNWR19NQVJLRVJVTklUU19VTktOT1dOOgotICAg
ICAgICB0cyA8PCAidW5rbm93biI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHTWFya2Vy
RWxlbWVudDo6U1ZHX01BUktFUlVOSVRTX1VTRVJTUEFDRU9OVVNFOgotICAgICAgICB0cyA8PCAi
dXNlclNwYWNlT25Vc2UiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR01hcmtlckVsZW1l
bnQ6OlNWR19NQVJLRVJVTklUU19TVFJPS0VXSURUSDoKLSAgICAgICAgdHMgPDwgInN0cm9rZVdp
ZHRoIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRzOwotfQotCi1UZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgYykKLXsKLSAg
ICByZXR1cm4gdHMgPDwgYy5uYW1lKCk7Ci19Ci0KLS8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3Vs
ZCBiZSBpbiBLQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRGFzaEFycmF5JiBhKQotewotICAgIHRzIDw8
ICJ7IjsKLSAgICBEYXNoQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGEuZW5kKCk7Ci0gICAg
Zm9yIChEYXNoQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKGl0ICE9IGEuYmVnaW4oKSkKLSAgICAgICAgICAgIHRzIDw8
ICIsICI7Ci0gICAgICAgIHRzIDw8ICppdDsKLSAgICB9Ci0gICAgdHMgPDwgIn0iOwotICAgIHJl
dHVybiB0czsKLX0KLQotLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIEdyYXBoaWNz
VHlwZXMuY3BwCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
TGluZUNhcCBzdHlsZSkKLXsKLSAgICBzd2l0Y2ggKHN0eWxlKSB7Ci0gICAgY2FzZSBCdXR0Q2Fw
OgotICAgICAgICB0cyA8PCAiQlVUVCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUm91bmRD
YXA6Ci0gICAgICAgIHRzIDw8ICJST1VORCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU3F1
YXJlQ2FwOgotICAgICAgICB0cyA8PCAiU1FVQVJFIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIHJldHVybiB0czsKLX0KLQotLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIEdy
YXBoaWNzVHlwZXMuY3BwCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgTGluZUpvaW4gc3R5bGUpCi17Ci0gICAgc3dpdGNoIChzdHlsZSkgewotICAgIGNhc2Ug
TWl0ZXJKb2luOgotICAgICAgICB0cyA8PCAiTUlURVIiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFJvdW5kSm9pbjoKLSAgICAgICAgdHMgPDwgIlJPVU5EIjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBCZXZlbEpvaW46Ci0gICAgICAgIHRzIDw8ICJCRVZFTCI7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLS8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3Vs
ZCBiZSBpbiBHcmFkaWVudC5jcHAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBtb2RlKQotewotICAgIHN3aXRjaCAobW9k
ZSkgewotICAgIGNhc2UgU3ByZWFkTWV0aG9kUGFkOgotICAgICAgICB0cyA8PCAiUEFEIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTcHJlYWRNZXRob2RSZXBlYXQ6Ci0gICAgICAgIHRzIDw8
ICJSRVBFQVQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNwcmVhZE1ldGhvZFJlZmxlY3Q6
Ci0gICAgICAgIHRzIDw8ICJSRUZMRUNUIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRzOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UoVGV4
dFN0cmVhbSYgdHMsIFJlbmRlclNWR1Jlc291cmNlKiByZXNvdXJjZSkKLXsKLSAgICBpZiAocmVz
b3VyY2UtPnJlc291cmNlVHlwZSgpID09IFNvbGlkQ29sb3JSZXNvdXJjZVR5cGUpIHsKLSAgICAg
ICAgdHMgPDwgIlt0eXBlPVNPTElEXSBbY29sb3I9IiA8PCBzdGF0aWNfY2FzdDxSZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IqPihyZXNvdXJjZSktPmNvbG9yKCkgPDwgIl0iOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWxsIG90aGVyIHJlc291cmNlcyBkZXJpdmUgZnJvbSBS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcgotICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
KiBjb250YWluZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+KHJl
c291cmNlKTsKLSAgICBOb2RlKiBub2RlID0gY29udGFpbmVyLT5ub2RlKCk7Ci0gICAgQVNTRVJU
KG5vZGUpOwotICAgIEFTU0VSVChub2RlLT5pc1NWR0VsZW1lbnQoKSk7Ci0KLSAgICBpZiAocmVz
b3VyY2UtPnJlc291cmNlVHlwZSgpID09IFBhdHRlcm5SZXNvdXJjZVR5cGUpCi0gICAgICAgIHRz
IDw8ICJbdHlwZT1QQVRURVJOXSI7Ci0gICAgZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlw
ZSgpID09IExpbmVhckdyYWRpZW50UmVzb3VyY2VUeXBlKQotICAgICAgICB0cyA8PCAiW3R5cGU9
TElORUFSLUdSQURJRU5UXSI7Ci0gICAgZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgp
ID09IFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBlKQotICAgICAgICB0cyA8PCAiW3R5cGU9UkFE
SUFMLUdSQURJRU5UXSI7Ci0KLSAgICB0cyA8PCAiIFtpZD1cIiIgPDwgc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KG5vZGUpLT5nZXRJZEF0dHJpYnV0ZSgpIDw8ICJcIl0iOwotfQotCi1zdGF0aWMg
dm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVj
dCkKLXsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3Quc3R5bGUoKTsKLSAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKLQot
ICAgIGlmICghb2JqZWN0LmxvY2FsVHJhbnNmb3JtKCkuaXNJZGVudGl0eSgpKQotICAgICAgICB3
cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ0cmFuc2Zvcm0iLCBvYmplY3QubG9jYWxUcmFuc2Zvcm0o
KSk7Ci0gICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJpbWFnZSByZW5kZXJpbmciLCBzdmdTdHls
ZS0+aW1hZ2VSZW5kZXJpbmcoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlbmRlcmlu
ZygpKTsKLSAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBzdHlsZS0+b3BhY2l0
eSgpLCBSZW5kZXJTdHlsZTo6aW5pdGlhbE9wYWNpdHkoKSk7Ci0gICAgaWYgKG9iamVjdC5pc1NW
R1BhdGgoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJTVkdQYXRoJiBwYXRoID0gc3RhdGljX2Nh
c3Q8Y29uc3QgUmVuZGVyU1ZHUGF0aCY+KG9iamVjdCk7Ci0gICAgICAgIEFTU0VSVChwYXRoLm5v
ZGUoKSk7Ci0gICAgICAgIEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwotCi0g
ICAgICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJj
ZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWlu
dGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHls
ZSgpLCBmYWxsYmFja0NvbG9yKSkgewotICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBz
KCIgIik7Ci0gICAgICAgICAgICB0cyA8PCAiIFtzdHJva2U9eyIgPDwgczsKLSAgICAgICAgICAg
IHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSk7Ci0K
LSAgICAgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4ocGF0aC5ub2RlKCkpOwotICAgICAgICAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBzdmdTdHls
ZS0+c3Ryb2tlRGFzaE9mZnNldCgpLnZhbHVlKGVsZW1lbnQpOwotICAgICAgICAgICAgZG91Ymxl
IHN0cm9rZVdpZHRoID0gc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUoZWxlbWVudCk7Ci0g
ICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHTGVuZ3RoPiYgZGFzaGVzID0gc3ZnU3R5bGUtPnN0
cm9rZURhc2hBcnJheSgpOwotCi0gICAgICAgICAgICBEYXNoQXJyYXkgZGFzaEFycmF5OwotICAg
ICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRh
c2hlcy5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoVmVjdG9yPFNWR0xlbmd0aD46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gZGFzaGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAg
ICAgICBkYXNoQXJyYXkuYXBwZW5kKCgqaXQpLnZhbHVlKGVsZW1lbnQpKTsKLQotICAgICAgICAg
ICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3ZnU3R5bGUtPnN0cm9rZU9wYWNp
dHkoKSwgMS4wZik7Ci0gICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgInN0cm9rZSB3
aWR0aCIsIHN0cm9rZVdpZHRoLCAxLjApOwotICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQo
dHMsICJtaXRlciBsaW1pdCIsIHN2Z1N0eWxlLT5zdHJva2VNaXRlckxpbWl0KCksIDQuMGYpOwot
ICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJsaW5lIGNhcCIsIHN2Z1N0eWxlLT5j
YXBTdHlsZSgpLCBCdXR0Q2FwKTsKLSAgICAgICAgICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAi
bGluZSBqb2luIiwgc3ZnU3R5bGUtPmpvaW5TdHlsZSgpLCBNaXRlckpvaW4pOwotICAgICAgICAg
ICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJkYXNoIG9mZnNldCIsIGRhc2hPZmZzZXQsIDAuMCk7
Ci0gICAgICAgICAgICBpZiAoIWRhc2hBcnJheS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
d3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiZGFzaCBhcnJheSIsIGRhc2hBcnJheSk7Ci0KLSAgICAg
ICAgICAgIHRzIDw8ICJ9XSI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVz
b3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWlu
dGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHUGF0aCo+KCZwYXRoKSwgcGF0aC5zdHls
ZSgpLCBmYWxsYmFja0NvbG9yKSkgewotICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBz
KCIgIik7Ci0gICAgICAgICAgICB0cyA8PCAiIFtmaWxsPXsiIDw8IHM7Ci0gICAgICAgICAgICB3
cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UodHMsIGZpbGxQYWludGluZ1Jlc291cmNlKTsKLQotICAg
ICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3ZnU3R5bGUtPmZpbGxP
cGFjaXR5KCksIDEuMGYpOwotICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJmaWxs
IHJ1bGUiLCBzdmdTdHlsZS0+ZmlsbFJ1bGUoKSwgUlVMRV9OT05aRVJPKTsKLSAgICAgICAgICAg
IHRzIDw8ICJ9XSI7Ci0gICAgICAgIH0KLSAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJj
bGlwIHJ1bGUiLCBzdmdTdHlsZS0+Y2xpcFJ1bGUoKSwgUlVMRV9OT05aRVJPKTsKLSAgICB9Ci0K
LSAgICB3cml0ZUlmTm90RW1wdHkodHMsICJzdGFydCBtYXJrZXIiLCBzdmdTdHlsZS0+bWFya2Vy
U3RhcnRSZXNvdXJjZSgpKTsKLSAgICB3cml0ZUlmTm90RW1wdHkodHMsICJtaWRkbGUgbWFya2Vy
Iiwgc3ZnU3R5bGUtPm1hcmtlck1pZFJlc291cmNlKCkpOwotICAgIHdyaXRlSWZOb3RFbXB0eSh0
cywgImVuZCBtYXJrZXIiLCBzdmdTdHlsZS0+bWFya2VyRW5kUmVzb3VyY2UoKSk7Ci19Ci0KLXN0
YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9uQW5kU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQotewotICAgIHRzIDw8ICIgIiA8PCBjb25zdF9jYXN0
PFJlbmRlck9iamVjdCY+KG9iamVjdCkuYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7Ci0g
ICAgd3JpdGVTdHlsZSh0cywgb2JqZWN0KTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdQYXRo
JiBwYXRoKQotewotICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywgcGF0aCk7Ci0KLSAgICBB
U1NFUlQocGF0aC5ub2RlKCktPmlzU1ZHRWxlbWVudCgpKTsKLSAgICBTVkdFbGVtZW50KiBzdmdF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhdGgubm9kZSgpKTsKLQotICAgIGlm
IChzdmdFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpyZWN0VGFnKSkgewotICAgICAgICBT
VkdSZWN0RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50Kj4oc3Zn
RWxlbWVudCk7Ci0gICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgIngiLCBlbGVtZW50LT54
KCkudmFsdWUoZWxlbWVudCkpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ5Iiwg
ZWxlbWVudC0+eSgpLnZhbHVlKGVsZW1lbnQpKTsKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWly
KHRzLCAid2lkdGgiLCBlbGVtZW50LT53aWR0aCgpLnZhbHVlKGVsZW1lbnQpKTsKLSAgICAgICAg
d3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiaGVpZ2h0IiwgZWxlbWVudC0+aGVpZ2h0KCkudmFsdWUo
ZWxlbWVudCkpOwotICAgIH0gZWxzZSBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1l
czo6bGluZVRhZykpIHsKLSAgICAgICAgU1ZHTGluZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdMaW5lRWxlbWVudCo+KHN2Z0VsZW1lbnQpOwotICAgICAgICB3cml0ZU5hbWVWYWx1
ZVBhaXIodHMsICJ4MSIsIGVsZW1lbnQtPngxKCkudmFsdWUoZWxlbWVudCkpOwotICAgICAgICB3
cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ5MSIsIGVsZW1lbnQtPnkxKCkudmFsdWUoZWxlbWVudCkp
OwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ4MiIsIGVsZW1lbnQtPngyKCkudmFs
dWUoZWxlbWVudCkpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ5MiIsIGVsZW1l
bnQtPnkyKCkudmFsdWUoZWxlbWVudCkpOwotICAgIH0gZWxzZSBpZiAoc3ZnRWxlbWVudC0+aGFz
VGFnTmFtZShTVkdOYW1lczo6ZWxsaXBzZVRhZykpIHsKLSAgICAgICAgU1ZHRWxsaXBzZUVsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGxpcHNlRWxlbWVudCo+KHN2Z0VsZW1lbnQp
OwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJjeCIsIGVsZW1lbnQtPmN4KCkudmFs
dWUoZWxlbWVudCkpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJjeSIsIGVsZW1l
bnQtPmN5KCkudmFsdWUoZWxlbWVudCkpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMs
ICJyeCIsIGVsZW1lbnQtPnJ4KCkudmFsdWUoZWxlbWVudCkpOwotICAgICAgICB3cml0ZU5hbWVW
YWx1ZVBhaXIodHMsICJyeSIsIGVsZW1lbnQtPnJ5KCkudmFsdWUoZWxlbWVudCkpOwotICAgIH0g
ZWxzZSBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6Y2lyY2xlVGFnKSkgewot
ICAgICAgICBTVkdDaXJjbGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHQ2lyY2xl
RWxlbWVudCo+KHN2Z0VsZW1lbnQpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJj
eCIsIGVsZW1lbnQtPmN4KCkudmFsdWUoZWxlbWVudCkpOwotICAgICAgICB3cml0ZU5hbWVWYWx1
ZVBhaXIodHMsICJjeSIsIGVsZW1lbnQtPmN5KCkudmFsdWUoZWxlbWVudCkpOwotICAgICAgICB3
cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJyIiwgZWxlbWVudC0+cigpLnZhbHVlKGVsZW1lbnQpKTsK
LSAgICB9IGVsc2UgaWYgKHN2Z0VsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnBvbHlnb25U
YWcpIHx8IHN2Z0VsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnBvbHlsaW5lVGFnKSkgewot
ICAgICAgICBTVkdQb2x5RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1BvbHlFbGVt
ZW50Kj4oc3ZnRWxlbWVudCk7Ci0gICAgICAgIHdyaXRlTmFtZUFuZFF1b3RlZFZhbHVlKHRzLCAi
cG9pbnRzIiwgZWxlbWVudC0+cG9pbnRMaXN0KCkudmFsdWVBc1N0cmluZygpKTsKLSAgICB9IGVs
c2UgaWYgKHN2Z0VsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnBhdGhUYWcpKSB7Ci0gICAg
ICAgIFNWR1BhdGhFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aEVsZW1lbnQq
PihzdmdFbGVtZW50KTsKLSAgICAgICAgU3RyaW5nIHBhdGhTdHJpbmc7Ci0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgc3dpdGNoIHRvIFVuYWx0ZXJlZFBhcnNpbmcgaGVyZSAtIHRoaXMgd2ls
bCBhZmZlY3QgdGhlIHBhdGggZHVtcGluZyBvdXRwdXQgb2YgZG96ZW5zIG9mIHRlc3RzLgotICAg
ICAgICBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpLT5idWlsZFN0cmluZ0Zyb21CeXRlU3Ry
ZWFtKGVsZW1lbnQtPnBhdGhCeXRlU3RyZWFtKCksIHBhdGhTdHJpbmcsIE5vcm1hbGl6ZWRQYXJz
aW5nKTsKLSAgICAgICAgd3JpdGVOYW1lQW5kUXVvdGVkVmFsdWUodHMsICJkYXRhIiwgcGF0aFN0
cmluZyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiB0czsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFJlbmRlclNWR1Jvb3QmIHJvb3QpCi17Ci0gICAgcmV0dXJuIHdyaXRlUG9zaXRp
b25BbmRTdHlsZSh0cywgcm9vdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlUmVuZGVyU1ZHVGV4
dEJveChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyQmxvY2smIHRleHQpCi17Ci0gICAgU1ZH
Um9vdElubGluZUJveCogYm94ID0gc3RhdGljX2Nhc3Q8U1ZHUm9vdElubGluZUJveCo+KHRleHQu
Zmlyc3RSb290Qm94KCkpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICB0
cyA8PCAiIGF0ICgiIDw8IHRleHQueCgpIDw8ICIsIiA8PCB0ZXh0LnkoKSA8PCAiKSBzaXplICIg
PDwgYm94LT5sb2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgYm94LT5sb2dpY2FsSGVpZ2h0KCk7Ci0g
ICAgCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGhhY2ssIG9uY2UgdGhlIG5ldyB0ZXh0IGxh
eW91dCBlbmdpbmUgaXMgY29tcGxldGx5IGxhbmRlZC4gV2Ugd2FudCB0byBwcmVzZXJ2ZSB0aGUg
b2xkIGxheW91dCB0ZXN0IHJlc3VsdHMgZm9yIG5vdy4KLSAgICB0cyA8PCAiIGNvbnRhaW5zIDEg
Y2h1bmsocykiOwotCi0gICAgaWYgKHRleHQucGFyZW50KCkgJiYgKHRleHQucGFyZW50KCktPnN0
eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSB0ZXh0LnN0
eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkpCi0gICAgICAg
IHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImNvbG9yIiwgdGV4dC5zdHlsZSgpLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikubmFtZSgpKTsKLX0KLQotc3RhdGljIGlubGlu
ZSB2b2lkIHdyaXRlU1ZHSW5saW5lVGV4dEJveChUZXh0U3RyZWFtJiB0cywgU1ZHSW5saW5lVGV4
dEJveCogdGV4dEJveCwgaW50IGluZGVudCkKLXsKLSAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50
PiYgZnJhZ21lbnRzID0gdGV4dEJveC0+dGV4dEZyYWdtZW50cygpOwotICAgIGlmIChmcmFnbWVu
dHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJTVkdJbmxpbmVUZXh0
KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQodGV4dEJveC0+dGV4dFJlbmRl
cmVyKCkpOwotICAgIEFTU0VSVCh0ZXh0UmVuZGVyZXIpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHN2Z1N0eWxlID0gdGV4dFJlbmRlcmVyLT5zdHlsZSgpLT5zdmdTdHlsZSgpOwotICAg
IFN0cmluZyB0ZXh0ID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPnRleHQoKTsKLQotICAgIHVu
c2lnbmVkIGZyYWdtZW50c1NpemUgPSBmcmFnbWVudHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBmcmFnbWVudHNTaXplOyArK2kpIHsKLSAgICAgICAgU1ZHVGV4dEZyYWdt
ZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKLSAgICAgICAgd3JpdGVJbmRlbnQodHMs
IGluZGVudCArIDEpOwotCi0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gZnJhZ21lbnQu
cG9zaXRpb25MaXN0T2Zmc2V0OwotICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBmcmFnbWVu
dC5wb3NpdGlvbkxpc3RPZmZzZXQgKyBmcmFnbWVudC5sZW5ndGg7Ci0KLSAgICAgICAgLy8gRklY
TUU6IFJlbW92ZSB0aGlzIGhhY2ssIG9uY2UgdGhlIG5ldyB0ZXh0IGxheW91dCBlbmdpbmUgaXMg
Y29tcGxldGx5IGxhbmRlZC4gV2Ugd2FudCB0byBwcmVzZXJ2ZSB0aGUgb2xkIGxheW91dCB0ZXN0
IHJlc3VsdHMgZm9yIG5vdy4KLSAgICAgICAgdHMgPDwgImNodW5rIDEgIjsKLSAgICAgICAgRVRl
eHRBbmNob3IgYW5jaG9yID0gc3ZnU3R5bGUtPnRleHRBbmNob3IoKTsKLSAgICAgICAgYm9vbCBp
c1ZlcnRpY2FsVGV4dCA9IHN2Z1N0eWxlLT5pc1ZlcnRpY2FsV3JpdGluZ01vZGUoKTsKLSAgICAg
ICAgaWYgKGFuY2hvciA9PSBUQV9NSURETEUpIHsKLSAgICAgICAgICAgIHRzIDw8ICIobWlkZGxl
IGFuY2hvciI7Ci0gICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICAg
ICAgdHMgPDwgIiwgdmVydGljYWwiOwotICAgICAgICAgICAgdHMgPDwgIikgIjsKLSAgICAgICAg
fSBlbHNlIGlmIChhbmNob3IgPT0gVEFfRU5EKSB7Ci0gICAgICAgICAgICB0cyA8PCAiKGVuZCBh
bmNob3IiOwotICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgICAg
IHRzIDw8ICIsIHZlcnRpY2FsIjsKLSAgICAgICAgICAgIHRzIDw8ICIpICI7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICB0cyA8PCAiKHZlcnRpY2FsKSAi
OwotICAgICAgICBzdGFydE9mZnNldCAtPSB0ZXh0Qm94LT5zdGFydCgpOwotICAgICAgICBlbmRP
ZmZzZXQgLT0gdGV4dEJveC0+c3RhcnQoKTsKLSAgICAgICAgLy8gPC9oYWNrPgotCi0gICAgICAg
IHRzIDw8ICJ0ZXh0IHJ1biAiIDw8IGkgKyAxIDw8ICIgYXQgKCIgPDwgZnJhZ21lbnQueCA8PCAi
LCIgPDwgZnJhZ21lbnQueSA8PCAiKSI7Ci0gICAgICAgIHRzIDw8ICIgc3RhcnRPZmZzZXQgIiA8
PCBzdGFydE9mZnNldCA8PCAiIGVuZE9mZnNldCAiIDw8IGVuZE9mZnNldDsKLSAgICAgICAgaWYg
KGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgdHMgPDwgIiBoZWlnaHQgIiA8PCBmcmFnbWVu
dC5oZWlnaHQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRzIDw8ICIgd2lkdGggIiA8PCBm
cmFnbWVudC53aWR0aDsKLQotICAgICAgICBpZiAoIXRleHRCb3gtPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSB8fCB0ZXh0Qm94LT5tX2Rpck92ZXJyaWRlKSB7Ci0gICAgICAgICAgICB0cyA8PCAo
dGV4dEJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gIiBMVFIiIDogIiBSVEwiKTsKLSAg
ICAgICAgICAgIGlmICh0ZXh0Qm94LT5tX2Rpck92ZXJyaWRlKQotICAgICAgICAgICAgICAgIHRz
IDw8ICIgb3ZlcnJpZGUiOwotICAgICAgICB9Ci0KLSAgICAgICAgdHMgPDwgIjogIiA8PCBxdW90
ZUFuZEVzY2FwZU5vblByaW50YWJsZXModGV4dC5zdWJzdHJpbmcoZnJhZ21lbnQucG9zaXRpb25M
aXN0T2Zmc2V0LCBmcmFnbWVudC5sZW5ndGgpKSA8PCAiXG4iOwotICAgIH0KLX0KLQotc3RhdGlj
IGlubGluZSB2b2lkIHdyaXRlU1ZHSW5saW5lVGV4dEJveGVzKFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSZW5kZXJUZXh0JiB0ZXh0LCBpbnQgaW5kZW50KQotewotICAgIGZvciAoSW5saW5lVGV4dEJv
eCogYm94ID0gdGV4dC5maXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94
KCkpCi0gICAgICAgIHdyaXRlU1ZHSW5saW5lVGV4dEJveCh0cywgc3RhdGljX2Nhc3Q8U1ZHSW5s
aW5lVGV4dEJveCo+KGJveCksIGluZGVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlU3RhbmRh
cmRQcmVmaXgoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBpbnQg
aW5kZW50KQotewotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8IG9iamVj
dC5yZW5kZXJOYW1lKCk7Ci0KLSAgICBpZiAob2JqZWN0Lm5vZGUoKSkKLSAgICAgICAgdHMgPDwg
IiB7IiA8PCBvYmplY3Qubm9kZSgpLT5ub2RlTmFtZSgpIDw8ICJ9IjsKLX0KLQotc3RhdGljIHZv
aWQgd3JpdGVDaGlsZHJlbihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmpl
Y3QsIGludCBpbmRlbnQpCi17Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gb2JqZWN0
LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAg
ICAgIHdyaXRlKHRzLCAqY2hpbGQsIGluZGVudCArIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIFN0
cmluZyBib3VuZGluZ0JveE1vZGVTdHJpbmcoYm9vbCBib3VuZGluZ0JveE1vZGUpCi17Ci0gICAg
cmV0dXJuIGJvdW5kaW5nQm94TW9kZSA/ICJvYmplY3RCb3VuZGluZ0JveCIgOiAidXNlclNwYWNl
T25Vc2UiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVDb21tb25HcmFkaWVudFByb3Bl
cnRpZXMoVGV4dFN0cmVhbSYgdHMsIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFRyYW5zZm9ybSwgYm9vbCBib3VuZGluZ0Jv
eE1vZGUpCi17Ci0gICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiZ3JhZGllbnRVbml0cyIsIGJv
dW5kaW5nQm94TW9kZVN0cmluZyhib3VuZGluZ0JveE1vZGUpKTsKLQotICAgIGlmIChzcHJlYWRN
ZXRob2QgIT0gU3ByZWFkTWV0aG9kUGFkKQotICAgICAgICB0cyA8PCAiIFtzcHJlYWRNZXRob2Q9
IiA8PCBzcHJlYWRNZXRob2QgPDwgIl0iOwotCi0gICAgaWYgKCFncmFkaWVudFRyYW5zZm9ybS5p
c0lkZW50aXR5KCkpCi0gICAgICAgIHRzIDw8ICIgW2dyYWRpZW50VHJhbnNmb3JtPSIgPDwgZ3Jh
ZGllbnRUcmFuc2Zvcm0gPDwgIl0iOwotfQotCi12b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWlu
ZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBpbnQgaW5kZW50
KQotewotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIG9iamVjdCwgaW5kZW50KTsKLQotICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ob2JqZWN0Lm5vZGUoKSk7
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZCA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7
Ci0gICAgd3JpdGVOYW1lQW5kUXVvdGVkVmFsdWUodHMsICJpZCIsIGlkKTsgICAgCi0KLSAgICBS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVzb3VyY2UgPSBjb25zdF9jYXN0PFJlbmRlck9i
amVjdCY+KG9iamVjdCkudG9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcigpOwotICAgIEFTU0VS
VChyZXNvdXJjZSk7Ci0KLSAgICBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IE1hc2tl
clJlc291cmNlVHlwZSkgewotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciogbWFza2Vy
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqPihyZXNvdXJjZSk7Ci0gICAg
ICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgIm1hc2tVbml0cyIsIG1hc2tlci0+bWFza1VuaXRz
KCkpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJtYXNrQ29udGVudFVuaXRzIiwg
bWFza2VyLT5tYXNrQ29udGVudFVuaXRzKCkpOwotICAgICAgICB0cyA8PCAiXG4iOwotI2lmIEVO
QUJMRShGSUxURVJTKQotICAgIH0gZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09
IEZpbHRlclJlc291cmNlVHlwZSkgewotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciog
ZmlsdGVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqPihyZXNvdXJjZSk7
Ci0gICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImZpbHRlclVuaXRzIiwgZmlsdGVyLT5m
aWx0ZXJVbml0cygpKTsKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAicHJpbWl0aXZl
VW5pdHMiLCBmaWx0ZXItPnByaW1pdGl2ZVVuaXRzKCkpOwotICAgICAgICB0cyA8PCAiXG4iOwot
ICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNlaG9sZGVyIGZpbHRlciB3aGljaCBpcyBwYXNzZWQg
dG8gdGhlIGJ1aWxkZXIuCi0gICAgICAgIEZsb2F0UmVjdCBkdW1teVJlY3Q7Ci0gICAgICAgIFJl
ZlB0cjxTVkdGaWx0ZXI+IGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoQWZmaW5lVHJh
bnNmb3JtKCksIGR1bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIHRydWUpOwotICAgICAg
ICBpZiAoUmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+IGJ1aWxkZXIgPSBmaWx0ZXItPmJ1aWxkUHJp
bWl0aXZlcyhkdW1teUZpbHRlci5nZXQoKSkpIHsKLSAgICAgICAgICAgIGlmIChGaWx0ZXJFZmZl
Y3QqIGxhc3RFZmZlY3QgPSBidWlsZGVyLT5sYXN0RWZmZWN0KCkpCi0gICAgICAgICAgICAgICAg
bGFzdEVmZmVjdC0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgaW5kZW50ICsgMSk7Ci0gICAg
ICAgIH0KLSNlbmRpZgotICAgIH0gZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09
IENsaXBwZXJSZXNvdXJjZVR5cGUpIHsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
KiBjbGlwcGVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKj4ocmVzb3Vy
Y2UpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJjbGlwUGF0aFVuaXRzIiwgY2xp
cHBlci0+Y2xpcFBhdGhVbml0cygpKTsKLSAgICAgICAgdHMgPDwgIlxuIjsKLSAgICB9IGVsc2Ug
aWYgKHJlc291cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBNYXJrZXJSZXNvdXJjZVR5cGUpIHsKLSAg
ICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlciA9IHN0YXRpY19jYXN0PFJlbmRl
clNWR1Jlc291cmNlTWFya2VyKj4ocmVzb3VyY2UpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBh
aXIodHMsICJtYXJrZXJVbml0cyIsIG1hcmtlci0+bWFya2VyVW5pdHMoKSk7Ci0gICAgICAgIHRz
IDw8ICIgW3JlZiBhdCAiIDw8IG1hcmtlci0+cmVmZXJlbmNlUG9pbnQoKSA8PCAiXSI7Ci0gICAg
ICAgIHRzIDw8ICIgW2FuZ2xlPSI7Ci0gICAgICAgIGlmIChtYXJrZXItPmFuZ2xlKCkgPT0gLTEp
Ci0gICAgICAgICAgICB0cyA8PCAiYXV0byIgPDwgIl1cbiI7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHRzIDw8IG1hcmtlci0+YW5nbGUoKSA8PCAiXVxuIjsKLSAgICB9IGVsc2UgaWYgKHJl
c291cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBQYXR0ZXJuUmVzb3VyY2VUeXBlKSB7Ci0gICAgICAg
IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybiogcGF0dGVybiA9IHN0YXRpY19jYXN0PFJlbmRlclNW
R1Jlc291cmNlUGF0dGVybio+KHJlc291cmNlKTsKLQotICAgICAgICAvLyBEdW1wIGZpbmFsIHJl
c3VsdHMgdGhhdCBhcmUgdXNlZCBmb3IgcmVuZGVyaW5nLiBObyB1c2UgaW4gYXNraW5nIFNWR1Bh
dHRlcm5FbGVtZW50IGZvciBpdHMgcGF0dGVyblVuaXRzKCksIGFzIGl0IG1heQotICAgICAgICAv
LyBsaW5rIHRvIG90aGVyIHBhdHRlcm5zIHVzaW5nIHhsaW5rOmhyZWYsIHdlIG5lZWQgdG8gYnVp
bGQgdGhlIGZ1bGwgaW5oZXJpdGFuY2UgY2hhaW4sIGFrYS4gY29sbGVjdFBhdHRlcm5Qcm9wZXJ0
aWVzKCkKLSAgICAgICAgUGF0dGVybkF0dHJpYnV0ZXMgYXR0cmlidXRlczsKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQqPihwYXR0ZXJuLT5ub2RlKCkpLT5jb2xsZWN0UGF0
dGVybkF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7Ci0KLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWly
KHRzLCAicGF0dGVyblVuaXRzIiwgYm91bmRpbmdCb3hNb2RlU3RyaW5nKGF0dHJpYnV0ZXMuYm91
bmRpbmdCb3hNb2RlKCkpKTsKLSAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAicGF0dGVy
bkNvbnRlbnRVbml0cyIsIGJvdW5kaW5nQm94TW9kZVN0cmluZyhhdHRyaWJ1dGVzLmJvdW5kaW5n
Qm94TW9kZUNvbnRlbnQoKSkpOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSBhdHRyaWJ1dGVzLnBhdHRlcm5UcmFuc2Zvcm0oKTsKLSAgICAgICAgaWYgKCF0cmFuc2Zvcm0u
aXNJZGVudGl0eSgpKQotICAgICAgICAgICAgdHMgPDwgIiBbcGF0dGVyblRyYW5zZm9ybT0iIDw8
IHRyYW5zZm9ybSA8PCAiXSI7Ci0gICAgICAgIHRzIDw8ICJcbiI7Ci0gICAgfSBlbHNlIGlmIChy
ZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGUpIHsK
LSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudCogZ3JhZGllbnQgPSBzdGF0
aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50Kj4ocmVzb3VyY2UpOwotCi0g
ICAgICAgIC8vIER1bXAgZmluYWwgcmVzdWx0cyB0aGF0IGFyZSB1c2VkIGZvciByZW5kZXJpbmcu
IE5vIHVzZSBpbiBhc2tpbmcgU1ZHR3JhZGllbnRFbGVtZW50IGZvciBpdHMgZ3JhZGllbnRVbml0
cygpLCBhcyBpdCBtYXkKLSAgICAgICAgLy8gbGluayB0byBvdGhlciBncmFkaWVudHMgdXNpbmcg
eGxpbms6aHJlZiwgd2UgbmVlZCB0byBidWlsZCB0aGUgZnVsbCBpbmhlcml0YW5jZSBjaGFpbiwg
YWthLiBjb2xsZWN0R3JhZGllbnRQcm9wZXJ0aWVzKCkKLSAgICAgICAgU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50KiBsaW5lYXJHcmFkaWVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdMaW5lYXJH
cmFkaWVudEVsZW1lbnQqPihncmFkaWVudC0+bm9kZSgpKTsKLQotICAgICAgICBMaW5lYXJHcmFk
aWVudEF0dHJpYnV0ZXMgYXR0cmlidXRlczsKLSAgICAgICAgbGluZWFyR3JhZGllbnRFbGVtZW50
LT5jb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgICAgICB3cml0ZUNv
bW1vbkdyYWRpZW50UHJvcGVydGllcyh0cywgYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSwgYXR0
cmlidXRlcy5ncmFkaWVudFRyYW5zZm9ybSgpLCBhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgp
KTsKLQotICAgICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQ7Ci0gICAgICAgIEZsb2F0UG9pbnQg
ZW5kUG9pbnQ7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50RWxlbWVudC0+Y2FsY3VsYXRlU3RhcnRF
bmRQb2ludHMoYXR0cmlidXRlcywgc3RhcnRQb2ludCwgZW5kUG9pbnQpOwotCi0gICAgICAgIHRz
IDw8ICIgW3N0YXJ0PSIgPDwgc3RhcnRQb2ludCA8PCAiXSBbZW5kPSIgPDwgZW5kUG9pbnQgPDwg
Il1cbiI7Ci0gICAgfSAgZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IFJhZGlh
bEdyYWRpZW50UmVzb3VyY2VUeXBlKSB7Ci0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlUmFkaWFs
R3JhZGllbnQqIGdyYWRpZW50ID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxH
cmFkaWVudCo+KHJlc291cmNlKTsKLQotICAgICAgICAvLyBEdW1wIGZpbmFsIHJlc3VsdHMgdGhh
dCBhcmUgdXNlZCBmb3IgcmVuZGVyaW5nLiBObyB1c2UgaW4gYXNraW5nIFNWR0dyYWRpZW50RWxl
bWVudCBmb3IgaXRzIGdyYWRpZW50VW5pdHMoKSwgYXMgaXQgbWF5Ci0gICAgICAgIC8vIGxpbmsg
dG8gb3RoZXIgZ3JhZGllbnRzIHVzaW5nIHhsaW5rOmhyZWYsIHdlIG5lZWQgdG8gYnVpbGQgdGhl
IGZ1bGwgaW5oZXJpdGFuY2UgY2hhaW4sIGFrYS4gY29sbGVjdEdyYWRpZW50UHJvcGVydGllcygp
Ci0gICAgICAgIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCogcmFkaWFsR3JhZGllbnRFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnQtPm5vZGUo
KSk7Ci0KLSAgICAgICAgUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7Ci0gICAg
ICAgIHJhZGlhbEdyYWRpZW50RWxlbWVudC0+Y29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhhdHRy
aWJ1dGVzKTsKLSAgICAgICAgd3JpdGVDb21tb25HcmFkaWVudFByb3BlcnRpZXModHMsIGF0dHJp
YnV0ZXMuc3ByZWFkTWV0aG9kKCksIGF0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKSwgYXR0
cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSk7Ci0KLSAgICAgICAgRmxvYXRQb2ludCBmb2NhbFBv
aW50OwotICAgICAgICBGbG9hdFBvaW50IGNlbnRlclBvaW50OwotICAgICAgICBmbG9hdCByYWRp
dXM7Ci0gICAgICAgIHJhZGlhbEdyYWRpZW50RWxlbWVudC0+Y2FsY3VsYXRlRm9jYWxDZW50ZXJQ
b2ludHNBbmRSYWRpdXMoYXR0cmlidXRlcywgZm9jYWxQb2ludCwgY2VudGVyUG9pbnQsIHJhZGl1
cyk7Ci0KLSAgICAgICAgdHMgPDwgIiBbY2VudGVyPSIgPDwgY2VudGVyUG9pbnQgPDwgIl0gW2Zv
Y2FsPSIgPDwgZm9jYWxQb2ludCA8PCAiXSBbcmFkaXVzPSIgPDwgcmFkaXVzIDw8ICJdXG4iOwot
ICAgIH0gZWxzZQotICAgICAgICB0cyA8PCAiXG4iOwotICAgIHdyaXRlQ2hpbGRyZW4odHMsIG9i
amVjdCwgaW5kZW50KTsKLX0KLQotdm9pZCB3cml0ZVNWR0NvbnRhaW5lcihUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyT2JqZWN0JiBjb250YWluZXIsIGludCBpbmRlbnQpCi17Ci0gICAgLy8g
Q3VycmVudGx5IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlIGhhcyBubyBtZWFuaW5n
ZnVsIG91dHB1dC4KLSAgICBpZiAoY29udGFpbmVyLmlzU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRp
dmUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIGNvbnRh
aW5lciwgaW5kZW50KTsKLSAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMsIGNvbnRhaW5lcik7
Ci0gICAgdHMgPDwgIlxuIjsKLSAgICB3cml0ZVJlc291cmNlcyh0cywgY29udGFpbmVyLCBpbmRl
bnQpOwotICAgIHdyaXRlQ2hpbGRyZW4odHMsIGNvbnRhaW5lciwgaW5kZW50KTsKLX0KLQotdm9p
ZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUm9vdCYgcm9vdCwgaW50IGlu
ZGVudCkKLXsKLSAgICB3cml0ZVN0YW5kYXJkUHJlZml4KHRzLCByb290LCBpbmRlbnQpOwotICAg
IHRzIDw8IHJvb3QgPDwgIlxuIjsKLSAgICB3cml0ZUNoaWxkcmVuKHRzLCByb290LCBpbmRlbnQp
OwotfQotCi12b2lkIHdyaXRlU1ZHVGV4dChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyQmxv
Y2smIHRleHQsIGludCBpbmRlbnQpCi17Ci0gICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgdGV4
dCwgaW5kZW50KTsKLSAgICB3cml0ZVJlbmRlclNWR1RleHRCb3godHMsIHRleHQpOwotICAgIHRz
IDw8ICJcbiI7Ci0gICAgd3JpdGVSZXNvdXJjZXModHMsIHRleHQsIGluZGVudCk7Ci0gICAgd3Jp
dGVDaGlsZHJlbih0cywgdGV4dCwgaW5kZW50KTsKLX0KLQotdm9pZCB3cml0ZVNWR0lubGluZVRl
eHQoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIHRleHQsIGludCBpbmRlbnQpCi17
Ci0gICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgdGV4dCwgaW5kZW50KTsKLQotICAgIC8vIFdo
eSBub3QganVzdCBsaW5lc0JvdW5kaW5nQm94KCk/Ci0gICAgdHMgPDwgIiAiIDw8IEZsb2F0UmVj
dCh0ZXh0LmZpcnN0UnVuT3JpZ2luKCksIHRleHQubGluZXNCb3VuZGluZ0JveCgpLnNpemUoKSkg
PDwgIlxuIjsKLSAgICB3cml0ZVJlc291cmNlcyh0cywgdGV4dCwgaW5kZW50KTsKLSAgICB3cml0
ZVNWR0lubGluZVRleHRCb3hlcyh0cywgdGV4dCwgaW5kZW50KTsKLX0KLQotdm9pZCB3cml0ZVNW
R0ltYWdlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2UsIGludCBp
bmRlbnQpCi17Ci0gICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgaW1hZ2UsIGluZGVudCk7Ci0g
ICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCBpbWFnZSk7Ci0gICAgdHMgPDwgIlxuIjsKLSAg
ICB3cml0ZVJlc291cmNlcyh0cywgaW1hZ2UsIGluZGVudCk7Ci19Ci0KLXZvaWQgd3JpdGUoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1BhdGgmIHBhdGgsIGludCBpbmRlbnQpCi17Ci0g
ICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgcGF0aCwgaW5kZW50KTsKLSAgICB0cyA8PCBwYXRo
IDw8ICJcbiI7Ci0gICAgd3JpdGVSZXNvdXJjZXModHMsIHBhdGgsIGluZGVudCk7Ci19Ci0KLXZv
aWQgd3JpdGVTVkdHcmFkaWVudFN0b3AoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0dy
YWRpZW50U3RvcCYgc3RvcCwgaW50IGluZGVudCkKLXsKLSAgICB3cml0ZVN0YW5kYXJkUHJlZml4
KHRzLCBzdG9wLCBpbmRlbnQpOwotCi0gICAgU1ZHU3RvcEVsZW1lbnQqIHN0b3BFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHU3RvcEVsZW1lbnQqPihzdG9wLm5vZGUoKSk7Ci0gICAgQVNTRVJUKHN0
b3BFbGVtZW50KTsKLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0b3Auc3R5bGUoKTsKLSAg
ICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0cyA8PCAiIFtvZmZzZXQ9IiA8
PCBzdG9wRWxlbWVudC0+b2Zmc2V0KCkgPDwgIl0gW2NvbG9yPSIgPDwgc3RvcEVsZW1lbnQtPnN0
b3BDb2xvckluY2x1ZGluZ09wYWNpdHkoKSA8PCAiXVxuIjsKLX0KLQotdm9pZCB3cml0ZVJlc291
cmNlcyhUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGludCBpbmRl
bnQpCi17Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LnN0eWxlKCk7Ci0g
ICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7Ci0K
LSAgICAvLyBGSVhNRTogV2Ugd2FudCB0byB1c2UgU1ZHUmVzb3VyY2VzQ2FjaGUgdG8gZGV0ZXJt
aW5lIHdoaWNoIHJlc291cmNlcyBhcmUgcHJlc2VudCwgaW5zdGVhZCBvZiBxdWVyaW5nIHRoZSBy
ZXNvdXJjZSA8LT4gaWQgY2FjaGUuCi0gICAgLy8gRm9yIG5vdyBsZWF2ZSB0aGUgRFJUIG91dHB1
dCBhcyBpcywgYnV0IGxhdGVyIG9uIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBzbyBjeWNsZXMgYXJl
IHByb3Blcmx5IGlnbm9yZWQgaW4gdGhlIERSVCBvdXRwdXQuCi0gICAgUmVuZGVyT2JqZWN0JiBy
ZW5kZXJlciA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4ob2JqZWN0KTsKLSAgICBpZiAoIXN2
Z1N0eWxlLT5tYXNrZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9IGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlcj4ob2JqZWN0LmRvY3VtZW50KCksIHN2Z1N0eWxlLT5tYXNrZXJS
ZXNvdXJjZSgpKSkgewotICAgICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAg
ICAgICAgICB0cyA8PCAiICI7Ci0gICAgICAgICAgICB3cml0ZU5hbWVBbmRRdW90ZWRWYWx1ZSh0
cywgIm1hc2tlciIsIHN2Z1N0eWxlLT5tYXNrZXJSZXNvdXJjZSgpKTsKLSAgICAgICAgICAgIHRz
IDw8ICIgIjsKLSAgICAgICAgICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsICptYXNrZXIsIDAp
OwotICAgICAgICAgICAgdHMgPDwgIiAiIDw8IG1hc2tlci0+cmVzb3VyY2VCb3VuZGluZ0JveCgm
cmVuZGVyZXIpIDw8ICJcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFzdmdTdHlsZS0+
Y2xpcHBlclJlc291cmNlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIqIGNsaXBwZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyPihvYmplY3QuZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmNsaXBwZXJSZXNv
dXJjZSgpKSkgewotICAgICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgICAg
ICAgICB0cyA8PCAiICI7Ci0gICAgICAgICAgICB3cml0ZU5hbWVBbmRRdW90ZWRWYWx1ZSh0cywg
ImNsaXBQYXRoIiwgc3ZnU3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgpKTsKLSAgICAgICAgICAgIHRz
IDw8ICIgIjsKLSAgICAgICAgICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsICpjbGlwcGVyLCAw
KTsKLSAgICAgICAgICAgIHRzIDw8ICIgIiA8PCBjbGlwcGVyLT5yZXNvdXJjZUJvdW5kaW5nQm94
KCZyZW5kZXJlcikgPDwgIlxuIjsKLSAgICAgICAgfQotICAgIH0KLSNpZiBFTkFCTEUoRklMVEVS
UykKLSAgICBpZiAoIXN2Z1N0eWxlLT5maWx0ZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkgewotICAg
ICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IGdldFJlbmRlclNWR1Jl
c291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcj4ob2JqZWN0LmRvY3VtZW50KCksIHN2
Z1N0eWxlLT5maWx0ZXJSZXNvdXJjZSgpKSkgewotICAgICAgICAgICAgd3JpdGVJbmRlbnQodHMs
IGluZGVudCk7Ci0gICAgICAgICAgICB0cyA8PCAiICI7Ci0gICAgICAgICAgICB3cml0ZU5hbWVB
bmRRdW90ZWRWYWx1ZSh0cywgImZpbHRlciIsIHN2Z1N0eWxlLT5maWx0ZXJSZXNvdXJjZSgpKTsK
LSAgICAgICAgICAgIHRzIDw8ICIgIjsKLSAgICAgICAgICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgo
dHMsICpmaWx0ZXIsIDApOwotICAgICAgICAgICAgdHMgPDwgIiAiIDw8IGZpbHRlci0+cmVzb3Vy
Y2VCb3VuZGluZ0JveCgmcmVuZGVyZXIpIDw8ICJcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k
aWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQu
aAkocmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgU1ZHUmVuZGVyVHJlZUFzVGV4dF9oCi0jZGVmaW5lIFNWR1JlbmRl
clRyZWVBc1RleHRfaAotCi0jaWYgRU5BQkxFKFNWRykKLQotI2luY2x1ZGUgIlRleHRTdHJlYW0u
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDb2xvcjsKLWNsYXNzIEZsb2F0UmVj
dDsKLWNsYXNzIEZsb2F0U2l6ZTsKLWNsYXNzIE5vZGU7Ci1jbGFzcyBSZW5kZXJCbG9jazsKLWNs
YXNzIFJlbmRlckltYWdlOwotY2xhc3MgUmVuZGVyT2JqZWN0OwotY2xhc3MgUmVuZGVyU1ZHR3Jh
ZGllbnRTdG9wOwotY2xhc3MgUmVuZGVyU1ZHSW1hZ2U7Ci1jbGFzcyBSZW5kZXJTVkdQYXRoOwot
Y2xhc3MgUmVuZGVyU1ZHUm9vdDsKLWNsYXNzIFJlbmRlclRleHQ7Ci1jbGFzcyBBZmZpbmVUcmFu
c2Zvcm07Ci1jbGFzcyBTVkdVbml0VHlwZXM7Ci0KLS8vIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBt
YWluIFJlbmRlclRyZWVBc1RleHQgY29kZQotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3Qg
UmVuZGVyU1ZHUGF0aCYsIGludCBpbmRlbnQpOwotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29u
c3QgUmVuZGVyU1ZHUm9vdCYsIGludCBpbmRlbnQpOwotdm9pZCB3cml0ZVNWR0dyYWRpZW50U3Rv
cChUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHR3JhZGllbnRTdG9wJiwgaW50IGluZGVudCk7
Ci12b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRl
ck9iamVjdCYsIGludCBpbmRlbnQpOwotdm9pZCB3cml0ZVNWR0NvbnRhaW5lcihUZXh0U3RyZWFt
JiwgY29uc3QgUmVuZGVyT2JqZWN0JiwgaW50IGluZGVudCk7Ci12b2lkIHdyaXRlU1ZHSW1hZ2Uo
VGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0ltYWdlJiwgaW50IGluZGVudCk7Ci12b2lkIHdy
aXRlU1ZHSW5saW5lVGV4dChUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyVGV4dCYsIGludCBpbmRl
bnQpOwotdm9pZCB3cml0ZVNWR1RleHQoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlckJsb2NrJiwg
aW50IGluZGVudCk7Ci12b2lkIHdyaXRlUmVzb3VyY2VzKFRleHRTdHJlYW0mLCBjb25zdCBSZW5k
ZXJPYmplY3QmLCBpbnQgaW5kZW50KTsKLQotLy8gaGVscGVyIG9wZXJhdG9ycyBkZWZpbmVkIHVz
ZWQgaW4gdmFyaW91cyBjbGFzc2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0cmVlLgotVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci1UZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBDb2xvciYpOwotVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0KLS8vIGhlbHBl
ciBvcGVyYXRvcnMgc3BlY2lmaWMgdG8gZHVtcGluZyB0aGUgcmVuZGVyIHRyZWUuIHRoZXNlIGFy
ZSB1c2VkIGluIHZhcmlvdXMgY2xhc3NlcyB0byBkdW1wIHRoZSByZW5kZXIgdHJlZQotLy8gdGhl
c2UgY291bGQgYmUgZGVmaW5lZCBpbiBzZXBhcmF0ZSBuYW1lc3BhY2UgdG8gYXZvaWQgbWF0Y2hp
bmcgdGhlc2UgZ2VuZXJpYyBzaWduYXR1cmVzIHVuaW50ZW50aW9uYWxseS4KLQotdGVtcGxhdGU8
dHlwZW5hbWUgSXRlbT4KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFZlY3RvcjxJdGVtKj4mIHYpCi17Ci0gICAgdHMgPDwgIlsiOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgdHMgPDwgKnZbaV07Ci0g
ICAgICAgIGlmIChpIDwgdi5zaXplKCkgLSAxKQotICAgICAgICAgICAgdHMgPDwgIiwgIjsKLSAg
ICB9Ci0KLSAgICB0cyA8PCAiXSI7Ci0gICAgcmV0dXJuIHRzOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBQb2ludGVyPgotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgUG9p
bnRlciogdCkKLXsKLSAgICB0cyA8PCByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0KTsKLSAg
ICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShTVkcpCi0KLSNlbmRpZiAvLyBTVkdSZW5kZXJUcmVlQXNUZXh0X2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuY3BwCShyZXZpc2lvbiA3NTM0NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDY4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKLSNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQu
aCIKLSNpbmNsdWRlICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5o
IgotI2luY2x1ZGUgIlNWR1BhaW50LmgiCi0jaW5jbHVkZSAiU1ZHUGF0dGVybkVsZW1lbnQuaCIK
LSNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNWR1Jlc291cmNlczo6U1ZHUmVzb3VyY2VzKCkK
LSAgICA6IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEoMCkKLSAgICAsIG1fbWFya2VyRGF0YSgw
KQotICAgICwgbV9maWxsU3Ryb2tlRGF0YSgwKQotICAgICwgbV9saW5rZWRSZXNvdXJjZSgwKQot
ewotfQotCi1zdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsaXBwZXJGaWx0ZXJN
YXNrZXJUYWdzKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8QXRvbWljU3Ry
aW5nSW1wbCo+LCBzX3RhZ0xpc3QsICgpKTsKLSAgICBpZiAoc190YWdMaXN0LmlzRW1wdHkoKSkg
ewotICAgICAgICAvLyAiY29udGFpbmVyIGVsZW1lbnRzIjogaHR0cDovL3d3dy53My5vcmcvVFIv
U1ZHMTEvaW50cm8uaHRtbCNUZXJtQ29udGFpbmVyRWxlbWVudAotICAgICAgICAvLyAiZ3JhcGhp
Y3MgZWxlbWVudHMiIDogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8uaHRtbCNUZXJt
R3JhcGhpY3NFbGVtZW50Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmFUYWcubG9j
YWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6Y2lyY2xl
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6
OmVsbGlwc2VUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChT
VkdOYW1lczo6Z2x5cGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0
LmFkZChTVkdOYW1lczo6Z1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBzX3RhZ0xp
c3QuYWRkKFNWR05hbWVzOjppbWFnZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBz
X3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAg
ICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6Om1hcmtlclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkp
OwotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjptYXNrVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6Om1pc3NpbmdfZ2x5cGhUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6cGF0
aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVz
Ojpwb2x5Z29uVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQo
U1ZHTmFtZXM6OnBvbHlsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFn
TGlzdC5hZGQoU1ZHTmFtZXM6OnJlY3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAg
c190YWdMaXN0LmFkZChTVkdOYW1lczo6c3ZnVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAg
ICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnRleHRUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsK
LSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6dXNlVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSk7Ci0KLSAgICAgICAgLy8gTm90IGxpc3RlZCBpbiB0aGUgZGVmaW5pdGlvbnMgaXMgdGhlIGNs
aXBQYXRoIGVsZW1lbnQsIHRoZSBTVkcgc3BlYyBzYXlzIHRob3VnaDoKLSAgICAgICAgLy8gVGhl
ICJjbGlwUGF0aCIgZWxlbWVudCBvciBhbnkgb2YgaXRzIGNoaWxkcmVuIGNhbiBzcGVjaWZ5IHBy
b3BlcnR5ICJjbGlwLXBhdGgiLgotICAgICAgICAvLyBTbyB3ZSBoYXZlIHRvIGFkZCBjbGlwUGF0
aFRhZyBoZXJlLCBvdGhlcndoaXNlIGNsaXAtcGF0aCBvbiBjbGlwUGF0aCB3aWxsIGZhaWwuCi0g
ICAgICAgIC8vIChBbHJlYWR5IG1haWxlZCBTVkcgV0csIHdhaXRpbmcgZm9yIGEgc29sdXRpb24p
Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmNsaXBQYXRoVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7Ci0KLSAgICAgICAgLy8gTm90IGxpc3RlZCBpbiB0aGUgZGVmaW5pdGlvbnMgYXJl
IHRoZSB0ZXh0IGNvbnRlbnQgZWxlbWVudHMsIHRob3VnaCBmaWx0ZXIvY2xpcHBlci9tYXNrZXIg
b24gdHNwYW4vdGV4dC8uLiBpcyBhbGxvd2VkLgotICAgICAgICAvLyAoQWxyZWFkeSBtYWlsZWQg
U1ZHIFdHLCB3YWl0aW5nIGZvciBhIHNvbHV0aW9uKQotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNW
R05hbWVzOjphbHRHbHlwaFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBzX3RhZ0xp
c3QuYWRkKFNWR05hbWVzOjp0ZXh0UGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAg
ICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjp0cmVmVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0g
ICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnRzcGFuVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSk7Ci0KLSAgICAgICAgLy8gRWxlbWVudHMgdGhhdCB3ZSBpZ25vcmUsIGFzIGl0IGRvZXNuJ3Qg
bWFrZSBhbnkgc2Vuc2UuCi0gICAgICAgIC8vIGRlZnMsIHBhdHRlcm4sIHN3aXRjaCAoRklYTUU6
IE1haWwgU1ZHIFdHIGFib3V0IHRoZXNlKQotICAgICAgICAvLyBzeW1ib2wgKGlzIGNvbnZlcnRl
ZCB0byBhIHN2ZyBlbGVtZW50LCB3aGVuIHJlZmVyZW5jZWQgYnkgdXNlLCB3ZSBjYW4gc2FmZWx5
IGlnbm9yZSBpdC4pCi0gICAgfQotCi0gICAgcmV0dXJuIHNfdGFnTGlzdDsKLX0KLQotc3RhdGlj
IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBtYXJrZXJUYWdzKCkKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+LCBzX3RhZ0xpc3QsICgpKTsK
LSAgICBpZiAoc190YWdMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNW
R05hbWVzOjpsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5h
ZGQoU1ZHTmFtZXM6OnBhdGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdM
aXN0LmFkZChTVkdOYW1lczo6cG9seWdvblRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAg
ICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpwb2x5bGluZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkp
OwotICAgIH0KLQotICAgIHJldHVybiBzX3RhZ0xpc3Q7Ci19Ci0KLXN0YXRpYyBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiYgZmlsbEFuZFN0cm9rZVRhZ3MoKQotewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4sIHNfdGFnTGlzdCwgKCkpOwotICAg
IGlmIChzX3RhZ0xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFt
ZXM6OmFsdEdseXBoVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5h
ZGQoU1ZHTmFtZXM6OmNpcmNsZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBzX3Rh
Z0xpc3QuYWRkKFNWR05hbWVzOjplbGxpcHNlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAg
ICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmxpbmVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsK
LSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6cGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBs
KCkpOwotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpwb2x5Z29uVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnBvbHlsaW5lVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnJl
Y3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1l
czo6dGV4dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBzX3RhZ0xpc3QuYWRkKFNW
R05hbWVzOjp0ZXh0UGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBzX3RhZ0xp
c3QuYWRkKFNWR05hbWVzOjp0cmVmVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNf
dGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnRzcGFuVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHNfdGFnTGlzdDsKLX0KLQotc3RhdGljIEhhc2hTZXQ8QXRvbWljU3Ry
aW5nSW1wbCo+JiBjaGFpbmFibGVSZXNvdXJjZVRhZ3MoKQotewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4sIHNfdGFnTGlzdCwgKCkpOwotICAgIGlm
IChzX3RhZ0xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6
OmxpbmVhckdyYWRpZW50VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHNfdGFnTGlz
dC5hZGQoU1ZHTmFtZXM6OmZpbHRlclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBz
X3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpwYXR0ZXJuVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0g
ICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnJhZGlhbEdyYWRpZW50VGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNfdGFnTGlzdDsKLX0KLQotc3RhdGlj
IGlubGluZSBTdHJpbmcgdGFyZ2V0UmVmZXJlbmNlRnJvbVJlc291cmNlKFNWR0VsZW1lbnQqIGVs
ZW1lbnQpCi17Ci0gICAgU3RyaW5nIHRhcmdldDsKLSAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6cGF0dGVyblRhZykpCi0gICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PFNW
R1BhdHRlcm5FbGVtZW50Kj4oZWxlbWVudCktPmhyZWYoKTsKLSAgICBlbHNlIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpsaW5lYXJHcmFkaWVudFRhZykgfHwgZWxlbWVudC0+aGFz
VGFnTmFtZShTVkdOYW1lczo6cmFkaWFsR3JhZGllbnRUYWcpKQotICAgICAgICB0YXJnZXQgPSBz
dGF0aWNfY2FzdDxTVkdHcmFkaWVudEVsZW1lbnQqPihlbGVtZW50KS0+aHJlZigpOwotI2lmIEVO
QUJMRShGSUxURVJTKQotICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6
OmZpbHRlclRhZykpCi0gICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1l
bnQqPihlbGVtZW50KS0+aHJlZigpOwotI2VuZGlmCi0gICAgZWxzZQotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLQotICAgIHJldHVybiBTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldCh0
YXJnZXQpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBw
YWludGluZ1Jlc291cmNlRnJvbVNWR1BhaW50KERvY3VtZW50KiBkb2N1bWVudCwgU1ZHUGFpbnQq
IHBhaW50LCBBdG9taWNTdHJpbmcmIGlkLCBib29sJiBoYXNQZW5kaW5nUmVzb3VyY2UpCi17Ci0g
ICAgQVNTRVJUKHBhaW50KTsKLQotICAgIFNWR1BhaW50OjpTVkdQYWludFR5cGUgcGFpbnRUeXBl
ID0gcGFpbnQtPnBhaW50VHlwZSgpOwotICAgIGlmIChwYWludFR5cGUgIT0gU1ZHUGFpbnQ6OlNW
R19QQUlOVFRZUEVfVVJJICYmIHBhaW50VHlwZSAhPSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9V
UklfUkdCQ09MT1IpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWQgPSBTVkdVUklSZWZlcmVu
Y2U6OmdldFRhcmdldChwYWludC0+dXJpKCkpOwotICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyKiBjb250YWluZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lckJ5SWQoZG9jdW1l
bnQsIGlkKTsKLSAgICBpZiAoIWNvbnRhaW5lcikgewotICAgICAgICBoYXNQZW5kaW5nUmVzb3Vy
Y2UgPSB0cnVlOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZW5kZXJTVkdSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlID0gY29udGFpbmVyLT5yZXNvdXJjZVR5cGUoKTsKLSAgICBp
ZiAocmVzb3VyY2VUeXBlICE9IFBhdHRlcm5SZXNvdXJjZVR5cGUgJiYgcmVzb3VyY2VUeXBlICE9
IExpbmVhckdyYWRpZW50UmVzb3VyY2VUeXBlICYmIHJlc291cmNlVHlwZSAhPSBSYWRpYWxHcmFk
aWVudFJlc291cmNlVHlwZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY29udGFp
bmVyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UoU1ZH
RG9jdW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25zLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBT
VkdFbGVtZW50KiBlbGVtZW50KQotewotICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBpZiAoIWVs
ZW1lbnQtPmlzU3R5bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGV4dGVuc2lvbnMtPmFk
ZFBlbmRpbmdSZXNvdXJjZShpZCwgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGVsZW1l
bnQpKTsKLX0KLQotYm9vbCBTVkdSZXNvdXJjZXM6OmJ1aWxkQ2FjaGVkUmVzb3VyY2VzKGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0g
ICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAgIE5vZGUqIG5vZGUg
PSBvYmplY3QtPm5vZGUoKTsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgQVNTRVJUKG5vZGUtPmlz
U1ZHRWxlbWVudCgpKTsKLQotICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4obm9kZSk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBvYmplY3QtPmRvY3VtZW50KCk7Ci0gICAg
QVNTRVJUKGRvY3VtZW50KTsKLQotICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9u
cyA9IGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7Ci0gICAgQVNTRVJUKGV4dGVuc2lv
bnMpOwotCi0gICAgQXRvbWljU3RyaW5nSW1wbCogdGFnTmFtZUltcGwgPSBlbGVtZW50LT50YWdR
TmFtZSgpLmxvY2FsTmFtZSgpLmltcGwoKTsKLSAgICBpZiAoIXRhZ05hbWVJbXBsKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGZvdW5kUmVzb3VyY2VzID0gZmFsc2U7Ci0gICAg
aWYgKGNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkuY29udGFpbnModGFnTmFtZUltcGwpKSB7Ci0g
ICAgICAgIGlmIChzdHlsZS0+aGFzQ2xpcHBlcigpKSB7Ci0gICAgICAgICAgICBBdG9taWNTdHJp
bmcgaWQoc3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgpKTsKLSAgICAgICAgICAgIGlmIChzZXRDbGlw
cGVyKGdldFJlbmRlclNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI+KGRv
Y3VtZW50LCBpZCkpKQotICAgICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShl
eHRlbnNpb25zLCBpZCwgZWxlbWVudCk7Ci0gICAgICAgIH0KLQotI2lmIEVOQUJMRShGSUxURVJT
KQotICAgICAgICBpZiAoc3R5bGUtPmhhc0ZpbHRlcigpKSB7Ci0gICAgICAgICAgICBBdG9taWNT
dHJpbmcgaWQoc3R5bGUtPmZpbHRlclJlc291cmNlKCkpOwotICAgICAgICAgICAgaWYgKHNldEZp
bHRlcihnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KGRv
Y3VtZW50LCBpZCkpKQotICAgICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShl
eHRlbnNpb25zLCBpZCwgZWxlbWVudCk7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGlm
IChzdHlsZS0+aGFzTWFza2VyKCkpIHsKLSAgICAgICAgICAgIEF0b21pY1N0cmluZyBpZChzdHls
ZS0+bWFza2VyUmVzb3VyY2UoKSk7Ci0gICAgICAgICAgICBpZiAoc2V0TWFza2VyKGdldFJlbmRl
clNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcj4oZG9jdW1lbnQsIGlkKSkp
Ci0gICAgICAgICAgICAgICAgZm91bmRSZXNvdXJjZXMgPSB0cnVlOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKGV4dGVuc2lvbnMsIGlk
LCBlbGVtZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtYXJrZXJUYWdzKCkuY29u
dGFpbnModGFnTmFtZUltcGwpICYmIHN0eWxlLT5oYXNNYXJrZXJzKCkpIHsKLSAgICAgICAgQXRv
bWljU3RyaW5nIG1hcmtlclN0YXJ0SWQoc3R5bGUtPm1hcmtlclN0YXJ0UmVzb3VyY2UoKSk7Ci0g
ICAgICAgIGlmIChzZXRNYXJrZXJTdGFydChnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXI+KGRvY3VtZW50LCBtYXJrZXJTdGFydElkKSkpCi0gICAgICAgICAg
ICBmb3VuZFJlc291cmNlcyA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlZ2lz
dGVyUGVuZGluZ1Jlc291cmNlKGV4dGVuc2lvbnMsIG1hcmtlclN0YXJ0SWQsIGVsZW1lbnQpOwot
Ci0gICAgICAgIEF0b21pY1N0cmluZyBtYXJrZXJNaWRJZChzdHlsZS0+bWFya2VyTWlkUmVzb3Vy
Y2UoKSk7Ci0gICAgICAgIGlmIChzZXRNYXJrZXJNaWQoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlk
PFJlbmRlclNWR1Jlc291cmNlTWFya2VyPihkb2N1bWVudCwgbWFya2VyTWlkSWQpKSkKLSAgICAg
ICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
cmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UoZXh0ZW5zaW9ucywgbWFya2VyTWlkSWQsIGVsZW1lbnQp
OwotCi0gICAgICAgIEF0b21pY1N0cmluZyBtYXJrZXJFbmRJZChzdHlsZS0+bWFya2VyRW5kUmVz
b3VyY2UoKSk7Ci0gICAgICAgIGlmIChzZXRNYXJrZXJFbmQoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VC
eUlkPFJlbmRlclNWR1Jlc291cmNlTWFya2VyPihkb2N1bWVudCwgbWFya2VyRW5kSWQpKSkKLSAg
ICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UoZXh0ZW5zaW9ucywgbWFya2VyRW5kSWQsIGVsZW1l
bnQpOwotICAgIH0KLQotICAgIGlmIChmaWxsQW5kU3Ryb2tlVGFncygpLmNvbnRhaW5zKHRhZ05h
bWVJbXBsKSkgewotICAgICAgICBpZiAoc3R5bGUtPmhhc0ZpbGwoKSkgewotICAgICAgICAgICAg
Ym9vbCBoYXNQZW5kaW5nUmVzb3VyY2UgPSBmYWxzZTsKLSAgICAgICAgICAgIEF0b21pY1N0cmlu
ZyBpZDsKLSAgICAgICAgICAgIGlmIChzZXRGaWxsKHBhaW50aW5nUmVzb3VyY2VGcm9tU1ZHUGFp
bnQoZG9jdW1lbnQsIHN0eWxlLT5maWxsUGFpbnQoKSwgaWQsIGhhc1BlbmRpbmdSZXNvdXJjZSkp
KQotICAgICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGhhc1BlbmRpbmdSZXNvdXJjZSkKLSAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRp
bmdSZXNvdXJjZShleHRlbnNpb25zLCBpZCwgZWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoc3R5bGUtPmhhc1N0cm9rZSgpKSB7Ci0gICAgICAgICAgICBib29sIGhhc1BlbmRpbmdS
ZXNvdXJjZSA9IGZhbHNlOwotICAgICAgICAgICAgQXRvbWljU3RyaW5nIGlkOwotICAgICAgICAg
ICAgaWYgKHNldFN0cm9rZShwYWludGluZ1Jlc291cmNlRnJvbVNWR1BhaW50KGRvY3VtZW50LCBz
dHlsZS0+c3Ryb2tlUGFpbnQoKSwgaWQsIGhhc1BlbmRpbmdSZXNvdXJjZSkpKQotICAgICAgICAg
ICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGhhc1Bl
bmRpbmdSZXNvdXJjZSkKLSAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShl
eHRlbnNpb25zLCBpZCwgZWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY2hh
aW5hYmxlUmVzb3VyY2VUYWdzKCkuY29udGFpbnModGFnTmFtZUltcGwpKSB7Ci0gICAgICAgIEF0
b21pY1N0cmluZyBpZCh0YXJnZXRSZWZlcmVuY2VGcm9tUmVzb3VyY2UoZWxlbWVudCkpOwotICAg
ICAgICBpZiAoc2V0TGlua2VkUmVzb3VyY2UoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXJC
eUlkKGRvY3VtZW50LCBpZCkpKQotICAgICAgICAgICAgZm91bmRSZXNvdXJjZXMgPSB0cnVlOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShleHRlbnNp
b25zLCBpZCwgZWxlbWVudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvdW5kUmVzb3VyY2VzOwot
fQotCi12b2lkIFNWR1Jlc291cmNlczo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVj
dCogb2JqZWN0LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhICYmICFtX21hcmtlckRhdGEgJiYgIW1fZmlsbFN0cm9r
ZURhdGEgJiYgIW1fbGlua2VkUmVzb3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2xpbmtlZFJlc291cmNlKSB7Ci0gICAgICAgIEFTU0VSVCghbV9jbGlwcGVyRmlsdGVyTWFza2Vy
RGF0YSk7Ci0gICAgICAgIEFTU0VSVCghbV9tYXJrZXJEYXRhKTsKLSAgICAgICAgQVNTRVJUKCFt
X2ZpbGxTdHJva2VEYXRhKTsKLSAgICAgICAgbV9saW5rZWRSZXNvdXJjZS0+cmVtb3ZlQ2xpZW50
RnJvbUNhY2hlKG9iamVjdCwgbWFya0ZvckludmFsaWRhdGlvbik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSkgewotICAgICAgICBp
ZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlcikKLSAgICAgICAgICAgIG1fY2xp
cHBlckZpbHRlck1hc2tlckRhdGEtPmNsaXBwZXItPnJlbW92ZUNsaWVudEZyb21DYWNoZShvYmpl
Y3QsIG1hcmtGb3JJbnZhbGlkYXRpb24pOwotI2lmIEVOQUJMRShGSUxURVJTKQotICAgICAgICBp
ZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyKQotICAgICAgICAgICAgbV9jbGlw
cGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0
LCBtYXJrRm9ySW52YWxpZGF0aW9uKTsKLSNlbmRpZgotICAgICAgICBpZiAobV9jbGlwcGVyRmls
dGVyTWFza2VyRGF0YS0+bWFza2VyKQotICAgICAgICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2Vy
RGF0YS0+bWFza2VyLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0LCBtYXJrRm9ySW52YWxp
ZGF0aW9uKTsKLSAgICB9Ci0KLSAgICBpZiAobV9tYXJrZXJEYXRhKSB7Ci0gICAgICAgIGlmICht
X21hcmtlckRhdGEtPm1hcmtlclN0YXJ0KQotICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJr
ZXJTdGFydC0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKG9iamVjdCwgbWFya0ZvckludmFsaWRhdGlv
bik7Ci0gICAgICAgIGlmIChtX21hcmtlckRhdGEtPm1hcmtlck1pZCkKLSAgICAgICAgICAgIG1f
bWFya2VyRGF0YS0+bWFya2VyTWlkLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0LCBtYXJr
Rm9ySW52YWxpZGF0aW9uKTsKLSAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2VyRW5kKQot
ICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQtPnJlbW92ZUNsaWVudEZyb21DYWNo
ZShvYmplY3QsIG1hcmtGb3JJbnZhbGlkYXRpb24pOwotICAgIH0KLQotICAgIGlmIChtX2ZpbGxT
dHJva2VEYXRhKSB7Ci0gICAgICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhLT5maWxsKQotICAgICAg
ICAgICAgbV9maWxsU3Ryb2tlRGF0YS0+ZmlsbC0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKG9iamVj
dCwgbWFya0ZvckludmFsaWRhdGlvbik7Ci0gICAgICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhLT5z
dHJva2UpCi0gICAgICAgICAgICBtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UtPnJlbW92ZUNsaWVu
dEZyb21DYWNoZShvYmplY3QsIG1hcmtGb3JJbnZhbGlkYXRpb24pOwotICAgIH0KLX0KLQotdm9p
ZCBTVkdSZXNvdXJjZXM6OnJlc291cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyKiByZXNvdXJjZSkKLXsKLSAgICBBU1NFUlQocmVzb3VyY2UpOwotICAgIGlmICghbV9jbGlw
cGVyRmlsdGVyTWFza2VyRGF0YSAmJiAhbV9tYXJrZXJEYXRhICYmICFtX2ZpbGxTdHJva2VEYXRh
ICYmICFtX2xpbmtlZFJlc291cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9saW5r
ZWRSZXNvdXJjZSA9PSByZXNvdXJjZSkgewotICAgICAgICBBU1NFUlQoIW1fY2xpcHBlckZpbHRl
ck1hc2tlckRhdGEpOwotICAgICAgICBBU1NFUlQoIW1fbWFya2VyRGF0YSk7Ci0gICAgICAgIEFT
U0VSVCghbV9maWxsU3Ryb2tlRGF0YSk7Ci0gICAgICAgIG1fbGlua2VkUmVzb3VyY2UtPnJlbW92
ZUFsbENsaWVudHNGcm9tQ2FjaGUoKTsKLSAgICAgICAgbV9saW5rZWRSZXNvdXJjZSA9IDA7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHJlc291cmNlLT5yZXNvdXJjZVR5
cGUoKSkgewotICAgIGNhc2UgTWFza2VyUmVzb3VyY2VUeXBlOgotICAgICAgICBpZiAoIW1fY2xp
cHBlckZpbHRlck1hc2tlckRhdGEpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKG1f
Y2xpcHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tlciA9PSByZXNvdXJjZSkgewotICAgICAgICAg
ICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+bWFza2VyLT5yZW1vdmVBbGxDbGllbnRzRnJv
bUNhY2hlKCk7Ci0gICAgICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXIg
PSAwOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWFya2VyUmVzb3VyY2VU
eXBlOgotICAgICAgICBpZiAoIW1fbWFya2VyRGF0YSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBpZiAobV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydCA9PSByZXNvdXJjZSkgewotICAgICAg
ICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydC0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNo
ZSgpOwotICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydCA9IDA7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2VyTWlkID09IHJlc291cmNlKSB7Ci0g
ICAgICAgICAgICBtX21hcmtlckRhdGEtPm1hcmtlck1pZC0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21D
YWNoZSgpOwotICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJNaWQgPSAwOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX21hcmtlckRhdGEtPm1hcmtlckVuZCA9PSByZXNvdXJjZSkgewot
ICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQtPnJlbW92ZUFsbENsaWVudHNGcm9t
Q2FjaGUoKTsKLSAgICAgICAgICAgIG1fbWFya2VyRGF0YS0+bWFya2VyRW5kID0gMDsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBhdHRlcm5SZXNvdXJjZVR5cGU6Ci0gICAg
Y2FzZSBMaW5lYXJHcmFkaWVudFJlc291cmNlVHlwZToKLSAgICBjYXNlIFJhZGlhbEdyYWRpZW50
UmVzb3VyY2VUeXBlOgotICAgICAgICBpZiAoIW1fZmlsbFN0cm9rZURhdGEpCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgaWYgKG1fZmlsbFN0cm9rZURhdGEtPmZpbGwgPT0gcmVzb3VyY2Up
IHsKLSAgICAgICAgICAgIG1fZmlsbFN0cm9rZURhdGEtPmZpbGwtPnJlbW92ZUFsbENsaWVudHNG
cm9tQ2FjaGUoKTsKLSAgICAgICAgICAgIG1fZmlsbFN0cm9rZURhdGEtPmZpbGwgPSAwOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UgPT0gcmVzb3VyY2Up
IHsKLSAgICAgICAgICAgIG1fZmlsbFN0cm9rZURhdGEtPnN0cm9rZS0+cmVtb3ZlQWxsQ2xpZW50
c0Zyb21DYWNoZSgpOwotICAgICAgICAgICAgbV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlID0gMDsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRlclJlc291cmNlVHlwZToK
LSNpZiBFTkFCTEUoRklMVEVSUykKLSAgICAgICAgaWYgKCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJE
YXRhKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChtX2NsaXBwZXJGaWx0ZXJNYXNr
ZXJEYXRhLT5maWx0ZXIgPT0gcmVzb3VyY2UpIHsKLSAgICAgICAgICAgIG1fY2xpcHBlckZpbHRl
ck1hc2tlckRhdGEtPmZpbHRlci0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOwotICAgICAg
ICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyID0gMDsKLSAgICAgICAgfQot
I2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDbGlwcGVyUmVzb3VyY2VUeXBlOgotICAgICAgICBpZiAoIW1fY2xpcHBl
ckZpbHRlck1hc2tlckRhdGEpCi0gICAgICAgICAgICBicmVhazsgCi0gICAgICAgIGlmIChtX2Ns
aXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyID09IHJlc291cmNlKSB7Ci0gICAgICAgICAg
ICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyLT5yZW1vdmVBbGxDbGllbnRzRnJv
bUNhY2hlKCk7Ci0gICAgICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVy
ID0gMDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNvbGlkQ29sb3JSZXNv
dXJjZVR5cGU6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdm9p
ZCBTVkdSZXNvdXJjZXM6OmJ1aWxkU2V0T2ZSZXNvdXJjZXMoSGFzaFNldDxSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lcio+JiBzZXQpCi17Ci0gICAgaWYgKCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJE
YXRhICYmICFtX21hcmtlckRhdGEgJiYgIW1fZmlsbFN0cm9rZURhdGEgJiYgIW1fbGlua2VkUmVz
b3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2xpbmtlZFJlc291cmNlKSB7Ci0g
ICAgICAgIEFTU0VSVCghbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSk7Ci0gICAgICAgIEFTU0VS
VCghbV9tYXJrZXJEYXRhKTsKLSAgICAgICAgQVNTRVJUKCFtX2ZpbGxTdHJva2VEYXRhKTsKLSAg
ICAgICAgc2V0LmFkZChtX2xpbmtlZFJlc291cmNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKSB7Ci0gICAgICAgIGlmIChtX2Ns
aXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyKQotICAgICAgICAgICAgc2V0LmFkZChtX2Ns
aXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyKTsKLSNpZiBFTkFCTEUoRklMVEVSUykKLSAg
ICAgICAgaWYgKG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlcikKLSAgICAgICAgICAg
IHNldC5hZGQobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyKTsKLSNlbmRpZgotICAg
ICAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+bWFza2VyKQotICAgICAgICAgICAg
c2V0LmFkZChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXIpOwotICAgIH0KLQotICAg
IGlmIChtX21hcmtlckRhdGEpIHsKLSAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2VyU3Rh
cnQpCi0gICAgICAgICAgICBzZXQuYWRkKG1fbWFya2VyRGF0YS0+bWFya2VyU3RhcnQpOwotICAg
ICAgICBpZiAobV9tYXJrZXJEYXRhLT5tYXJrZXJNaWQpCi0gICAgICAgICAgICBzZXQuYWRkKG1f
bWFya2VyRGF0YS0+bWFya2VyTWlkKTsKLSAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2Vy
RW5kKQotICAgICAgICAgICAgc2V0LmFkZChtX21hcmtlckRhdGEtPm1hcmtlckVuZCk7Ci0gICAg
fQotCi0gICAgaWYgKG1fZmlsbFN0cm9rZURhdGEpIHsKLSAgICAgICAgaWYgKG1fZmlsbFN0cm9r
ZURhdGEtPmZpbGwpCi0gICAgICAgICAgICBzZXQuYWRkKG1fZmlsbFN0cm9rZURhdGEtPmZpbGwp
OwotICAgICAgICBpZiAobV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlKQotICAgICAgICAgICAgc2V0
LmFkZChtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UpOwotICAgIH0KLX0KLQotYm9vbCBTVkdSZXNv
dXJjZXM6OnNldENsaXBwZXIoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyKQotewot
ICAgIGlmICghY2xpcHBlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKGNs
aXBwZXItPnJlc291cmNlVHlwZSgpID09IENsaXBwZXJSZXNvdXJjZVR5cGUpOwotCi0gICAgaWYg
KCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKQotICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNr
ZXJEYXRhID0gQ2xpcHBlckZpbHRlck1hc2tlckRhdGE6OmNyZWF0ZSgpOwotCi0gICAgbV9jbGlw
cGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlciA9IGNsaXBwZXI7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgU1ZHUmVzb3VyY2VzOjpyZXNldENsaXBwZXIoKQotewotICAgIEFTU0VSVCht
X2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKTsKLSAgICBBU1NFUlQobV9jbGlwcGVyRmlsdGVyTWFz
a2VyRGF0YS0+Y2xpcHBlcik7Ci0gICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBl
ciA9IDA7Ci19Ci0KLSNpZiBFTkFCTEUoRklMVEVSUykKLWJvb2wgU1ZHUmVzb3VyY2VzOjpzZXRG
aWx0ZXIoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBpZiAoIWZpbHRl
cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKGZpbHRlci0+cmVzb3VyY2VU
eXBlKCkgPT0gRmlsdGVyUmVzb3VyY2VUeXBlKTsKLQotICAgIGlmICghbV9jbGlwcGVyRmlsdGVy
TWFza2VyRGF0YSkKLSAgICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSA9IENsaXBwZXJG
aWx0ZXJNYXNrZXJEYXRhOjpjcmVhdGUoKTsKLQotICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRh
dGEtPmZpbHRlciA9IGZpbHRlcjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTVkdSZXNv
dXJjZXM6OnJlc2V0RmlsdGVyKCkKLXsKLSAgICBBU1NFUlQobV9jbGlwcGVyRmlsdGVyTWFza2Vy
RGF0YSk7Ci0gICAgQVNTRVJUKG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlcik7Ci0g
ICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyID0gMDsKLX0KLSNlbmRpZgotCi1i
b29sIFNWR1Jlc291cmNlczo6c2V0TWFya2VyU3RhcnQoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIq
IG1hcmtlclN0YXJ0KQotewotICAgIGlmICghbWFya2VyU3RhcnQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEFTU0VSVChtYXJrZXJTdGFydC0+cmVzb3VyY2VUeXBlKCkgPT0gTWFya2Vy
UmVzb3VyY2VUeXBlKTsKLQotICAgIGlmICghbV9tYXJrZXJEYXRhKQotICAgICAgICBtX21hcmtl
ckRhdGEgPSBNYXJrZXJEYXRhOjpjcmVhdGUoKTsKLQotICAgIG1fbWFya2VyRGF0YS0+bWFya2Vy
U3RhcnQgPSBtYXJrZXJTdGFydDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTVkdSZXNv
dXJjZXM6OnJlc2V0TWFya2VyU3RhcnQoKQotewotICAgIEFTU0VSVChtX21hcmtlckRhdGEpOwot
ICAgIEFTU0VSVChtX21hcmtlckRhdGEtPm1hcmtlclN0YXJ0KTsKLSAgICBtX21hcmtlckRhdGEt
Pm1hcmtlclN0YXJ0ID0gMDsKLX0KLQotYm9vbCBTVkdSZXNvdXJjZXM6OnNldE1hcmtlck1pZChS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkKQotewotICAgIGlmICghbWFya2VyTWlk
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQobWFya2VyTWlkLT5yZXNvdXJj
ZVR5cGUoKSA9PSBNYXJrZXJSZXNvdXJjZVR5cGUpOwotCi0gICAgaWYgKCFtX21hcmtlckRhdGEp
Ci0gICAgICAgIG1fbWFya2VyRGF0YSA9IE1hcmtlckRhdGE6OmNyZWF0ZSgpOwotCi0gICAgbV9t
YXJrZXJEYXRhLT5tYXJrZXJNaWQgPSBtYXJrZXJNaWQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgU1ZHUmVzb3VyY2VzOjpyZXNldE1hcmtlck1pZCgpCi17Ci0gICAgQVNTRVJUKG1fbWFy
a2VyRGF0YSk7Ci0gICAgQVNTRVJUKG1fbWFya2VyRGF0YS0+bWFya2VyTWlkKTsKLSAgICBtX21h
cmtlckRhdGEtPm1hcmtlck1pZCA9IDA7Ci19Ci0KLWJvb2wgU1ZHUmVzb3VyY2VzOjpzZXRNYXJr
ZXJFbmQoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCkKLXsKLSAgICBpZiAoIW1h
cmtlckVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKG1hcmtlckVuZC0+
cmVzb3VyY2VUeXBlKCkgPT0gTWFya2VyUmVzb3VyY2VUeXBlKTsKLQotICAgIGlmICghbV9tYXJr
ZXJEYXRhKQotICAgICAgICBtX21hcmtlckRhdGEgPSBNYXJrZXJEYXRhOjpjcmVhdGUoKTsKLQot
ICAgIG1fbWFya2VyRGF0YS0+bWFya2VyRW5kID0gbWFya2VyRW5kOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIFNWR1Jlc291cmNlczo6cmVzZXRNYXJrZXJFbmQoKQotewotICAgIEFTU0VS
VChtX21hcmtlckRhdGEpOwotICAgIEFTU0VSVChtX21hcmtlckRhdGEtPm1hcmtlckVuZCk7Ci0g
ICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQgPSAwOwotfQotCi1ib29sIFNWR1Jlc291cmNlczo6
c2V0TWFza2VyKFJlbmRlclNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIpCi17Ci0gICAgaWYgKCFt
YXNrZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChtYXNrZXItPnJlc291
cmNlVHlwZSgpID09IE1hc2tlclJlc291cmNlVHlwZSk7Ci0KLSAgICBpZiAoIW1fY2xpcHBlckZp
bHRlck1hc2tlckRhdGEpCi0gICAgICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEgPSBDbGlw
cGVyRmlsdGVyTWFza2VyRGF0YTo6Y3JlYXRlKCk7Ci0KLSAgICBtX2NsaXBwZXJGaWx0ZXJNYXNr
ZXJEYXRhLT5tYXNrZXIgPSBtYXNrZXI7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZH
UmVzb3VyY2VzOjpyZXNldE1hc2tlcigpCi17Ci0gICAgQVNTRVJUKG1fY2xpcHBlckZpbHRlck1h
c2tlckRhdGEpOwotICAgIEFTU0VSVChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXIp
OwotICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tlciA9IDA7Ci19Ci0KLWJvb2wg
U1ZHUmVzb3VyY2VzOjpzZXRGaWxsKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBmaWxsKQot
ewotICAgIGlmICghZmlsbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKGZp
bGwtPnJlc291cmNlVHlwZSgpID09IFBhdHRlcm5SZXNvdXJjZVR5cGUKLSAgICAgICAgICAgfHwg
ZmlsbC0+cmVzb3VyY2VUeXBlKCkgPT0gTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGUKLSAgICAg
ICAgICAgfHwgZmlsbC0+cmVzb3VyY2VUeXBlKCkgPT0gUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5
cGUpOwotCi0gICAgaWYgKCFtX2ZpbGxTdHJva2VEYXRhKQotICAgICAgICBtX2ZpbGxTdHJva2VE
YXRhID0gRmlsbFN0cm9rZURhdGE6OmNyZWF0ZSgpOwotCi0gICAgbV9maWxsU3Ryb2tlRGF0YS0+
ZmlsbCA9IGZpbGw7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZHUmVzb3VyY2VzOjpy
ZXNldEZpbGwoKQotewotICAgIEFTU0VSVChtX2ZpbGxTdHJva2VEYXRhKTsKLSAgICBBU1NFUlQo
bV9maWxsU3Ryb2tlRGF0YS0+ZmlsbCk7Ci0gICAgbV9maWxsU3Ryb2tlRGF0YS0+ZmlsbCA9IDA7
Ci19Ci0KLWJvb2wgU1ZHUmVzb3VyY2VzOjpzZXRTdHJva2UoUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIqIHN0cm9rZSkKLXsKLSAgICBpZiAoIXN0cm9rZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgQVNTRVJUKHN0cm9rZS0+cmVzb3VyY2VUeXBlKCkgPT0gUGF0dGVyblJlc291cmNl
VHlwZQotICAgICAgICAgICB8fCBzdHJva2UtPnJlc291cmNlVHlwZSgpID09IExpbmVhckdyYWRp
ZW50UmVzb3VyY2VUeXBlCi0gICAgICAgICAgIHx8IHN0cm9rZS0+cmVzb3VyY2VUeXBlKCkgPT0g
UmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGUpOwotCi0gICAgaWYgKCFtX2ZpbGxTdHJva2VEYXRh
KQotICAgICAgICBtX2ZpbGxTdHJva2VEYXRhID0gRmlsbFN0cm9rZURhdGE6OmNyZWF0ZSgpOwot
Ci0gICAgbV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlID0gc3Ryb2tlOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIFNWR1Jlc291cmNlczo6cmVzZXRTdHJva2UoKQotewotICAgIEFTU0VSVCht
X2ZpbGxTdHJva2VEYXRhKTsKLSAgICBBU1NFUlQobV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlKTsK
LSAgICBtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UgPSAwOwotfQotCi1ib29sIFNWR1Jlc291cmNl
czo6c2V0TGlua2VkUmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGxpbmtlZFJl
c291cmNlKQotewotICAgIGlmICghbGlua2VkUmVzb3VyY2UpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIG1fbGlua2VkUmVzb3VyY2UgPSBsaW5rZWRSZXNvdXJjZTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXM6OnJlc2V0TGlua2VkUmVzb3VyY2UoKQotewot
ICAgIEFTU0VSVChtX2xpbmtlZFJlc291cmNlKTsKLSAgICBtX2xpbmtlZFJlc291cmNlID0gMDsK
LX0KLQotI2lmbmRlZiBOREVCVUcKLXZvaWQgU1ZHUmVzb3VyY2VzOjpkdW1wKGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0KQotewotICAgIEFTU0VSVChvYmplY3QpOwotICAgIEFTU0VSVChvYmpl
Y3QtPm5vZGUoKSk7Ci0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIi0+IHRoaXM9JXAsIFNWR1Jlc291
cmNlcyhyZW5kZXJlcj0lcCwgbm9kZT0lcClcbiIsIHRoaXMsIG9iamVjdCwgb2JqZWN0LT5ub2Rl
KCkpOwotICAgIGZwcmludGYoc3RkZXJyLCAiIHwgRE9NIFRyZWU6XG4iKTsKLSAgICBvYmplY3Qt
Pm5vZGUoKS0+c2hvd1RyZWVGb3JUaGlzKCk7Ci0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIHwg
TGlzdCBvZiByZXNvdXJjZXM6XG4iKTsKLSAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0
YSkgewotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gbV9j
bGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlcikKLSAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiIHwtPiBDbGlwcGVyICAgIDogJXAgKG5vZGU9JXApXG4iLCBjbGlwcGVyLCBjbGlwcGVy
LT5ub2RlKCkpOwotI2lmIEVOQUJMRShGSUxURVJTKQotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIqIGZpbHRlciA9IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlcikK
LSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHwtPiBGaWx0ZXIgICAgIDogJXAgKG5vZGU9
JXApXG4iLCBmaWx0ZXIsIGZpbHRlci0+bm9kZSgpKTsKLSNlbmRpZgotICAgICAgICBpZiAoUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEt
Pm1hc2tlcikKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHwtPiBNYXNrZXIgICAgIDog
JXAgKG5vZGU9JXApXG4iLCBtYXNrZXIsIG1hc2tlci0+bm9kZSgpKTsKLSAgICB9Ci0KLSAgICBp
ZiAobV9tYXJrZXJEYXRhKSB7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciog
bWFya2VyU3RhcnQgPSBtX21hcmtlckRhdGEtPm1hcmtlclN0YXJ0KQotICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgfC0+IE1hcmtlclN0YXJ0OiAlcCAobm9kZT0lcClcbiIsIG1hcmtlclN0
YXJ0LCBtYXJrZXJTdGFydC0+bm9kZSgpKTsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNl
TWFya2VyKiBtYXJrZXJNaWQgPSBtX21hcmtlckRhdGEtPm1hcmtlck1pZCkKLSAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiIHwtPiBNYXJrZXJNaWQgIDogJXAgKG5vZGU9JXApXG4iLCBtYXJr
ZXJNaWQsIG1hcmtlck1pZC0+bm9kZSgpKTsKLSAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNl
TWFya2VyKiBtYXJrZXJFbmQgPSBtX21hcmtlckRhdGEtPm1hcmtlckVuZCkKLSAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiIHwtPiBNYXJrZXJFbmQgIDogJXAgKG5vZGU9JXApXG4iLCBtYXJr
ZXJFbmQsIG1hcmtlckVuZC0+bm9kZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9maWxsU3Ryb2tl
RGF0YSkgewotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGZpbGwgPSBt
X2ZpbGxTdHJva2VEYXRhLT5maWxsKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfC0+
IEZpbGwgICAgICAgOiAlcCAobm9kZT0lcClcbiIsIGZpbGwsIGZpbGwtPm5vZGUoKSk7Ci0gICAg
ICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogc3Ryb2tlID0gbV9maWxsU3Ryb2tl
RGF0YS0+c3Ryb2tlKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfC0+IFN0cm9rZSAg
ICAgOiAlcCAobm9kZT0lcClcbiIsIHN0cm9rZSwgc3Ryb2tlLT5ub2RlKCkpOwotICAgIH0KLQot
ICAgIGlmIChtX2xpbmtlZFJlc291cmNlKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiB8LT4g
eGxpbms6aHJlZiA6ICVwIChub2RlPSVwKVxuIiwgbV9saW5rZWRSZXNvdXJjZSwgbV9saW5rZWRS
ZXNvdXJjZS0+bm9kZSgpKTsKLX0KLSNlbmRpZgotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuaAkocmV2aXNpb24gNzUzNDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHUmVzb3VyY2VzX2gKLSNk
ZWZpbmUgU1ZHUmVzb3VyY2VzX2gKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlcjsKLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOwotY2xh
c3MgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI7Ci1jbGFzcyBSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
cjsKLWNsYXNzIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOwotY2xhc3MgU1ZHUmVuZGVyU3R5bGU7
Ci0KLS8vIEhvbGRzIGEgc2V0IG9mIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBSZW5kZXJP
YmplY3QKLWNsYXNzIFNWR1Jlc291cmNlcyA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6
Ci0gICAgU1ZHUmVzb3VyY2VzKCk7Ci0KLSAgICBib29sIGJ1aWxkQ2FjaGVkUmVzb3VyY2VzKGNv
bnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFNWR1JlbmRlclN0eWxlKik7Ci0KLSAgICAvLyBPcmRp
bmFyeSByZXNvdXJjZXMKLSAgICBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIoKSBj
b25zdCB7IHJldHVybiBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhID8gbV9jbGlwcGVyRmlsdGVy
TWFza2VyRGF0YS0+Y2xpcHBlciA6IDA7IH0KLSNpZiBFTkFCTEUoRklMVEVSUykKLSAgICBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwcGVyRmls
dGVyTWFza2VyRGF0YSA/IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlciA6IDA7IH0K
LSNlbmRpZgotICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFya2VyRGF0YSA/IG1fbWFya2VyRGF0YS0+bWFya2VyU3RhcnQgOiAwOyB9
Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck1pZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWFya2VyRGF0YSA/IG1fbWFya2VyRGF0YS0+bWFya2VyTWlkIDogMDsgfQotICAgIFJlbmRl
clNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQoKSBjb25zdCB7IHJldHVybiBtX21hcmtlckRh
dGEgPyBtX21hcmtlckRhdGEtPm1hcmtlckVuZCA6IDA7IH0KLSAgICBSZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlciogbWFza2VyKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0
YSA/IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tlciA6IDA7IH0KLQotICAgIC8vIFBh
aW50IHNlcnZlcnMKLSAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogZmlsbCgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsbFN0cm9rZURhdGEgPyBtX2ZpbGxTdHJva2VEYXRhLT5maWxsIDogMDsg
fQotICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBzdHJva2UoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGxTdHJva2VEYXRhID8gbV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlIDogMDsgfQotCi0g
ICAgLy8gQ2hhaW5hYmxlIHJlc291cmNlcyAtIGxpbmtlZCB0aHJvdWdoIHhsaW5rOmhyZWYKLSAg
ICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogbGlua2VkUmVzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmtlZFJlc291cmNlOyB9Ci0KLSAgICB2b2lkIGJ1aWxkU2V0T2ZSZXNvdXJjZXMo
SGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+Jik7Ci0KLSAgICAvLyBNZXRob2Rz
IG9wZXJhdGluZyBvbiBhbGwgY2FjaGVkIHJlc291cmNlcwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50
RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUp
IGNvbnN0OwotICAgIHZvaWQgcmVzb3VyY2VEZXN0cm95ZWQoUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIqKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICB2b2lkIGR1bXAoY29uc3QgUmVuZGVyT2Jq
ZWN0Kik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgU1ZHUmVzb3VyY2Vz
Q3ljbGVTb2x2ZXI7Ci0KLSAgICAvLyBPbmx5IHVzZWQgYnkgU1ZHUmVzb3VyY2VzQ2FjaGUgY3lj
bGUgZGV0ZWN0aW9uIGxvZ2ljCi0gICAgdm9pZCByZXNldENsaXBwZXIoKTsKLSNpZiBFTkFCTEUo
RklMVEVSUykKLSAgICB2b2lkIHJlc2V0RmlsdGVyKCk7Ci0jZW5kaWYKLSAgICB2b2lkIHJlc2V0
TWFya2VyU3RhcnQoKTsKLSAgICB2b2lkIHJlc2V0TWFya2VyTWlkKCk7Ci0gICAgdm9pZCByZXNl
dE1hcmtlckVuZCgpOwotICAgIHZvaWQgcmVzZXRNYXNrZXIoKTsKLSAgICB2b2lkIHJlc2V0Rmls
bCgpOwotICAgIHZvaWQgcmVzZXRTdHJva2UoKTsKLSAgICB2b2lkIHJlc2V0TGlua2VkUmVzb3Vy
Y2UoKTsKLQotcHJpdmF0ZToKLSAgICBib29sIHNldENsaXBwZXIoUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyKik7Ci0jaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAgYm9vbCBzZXRGaWx0ZXIoUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIqKTsKLSNlbmRpZgotICAgIGJvb2wgc2V0TWFya2VyU3RhcnQoUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIqKTsKLSAgICBib29sIHNldE1hcmtlck1pZChSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlciopOwotICAgIGJvb2wgc2V0TWFya2VyRW5kKFJlbmRlclNWR1Jlc291cmNl
TWFya2VyKik7Ci0gICAgYm9vbCBzZXRNYXNrZXIoUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqKTsK
LSAgICBib29sIHNldEZpbGwoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqKTsKLSAgICBib29s
IHNldFN0cm9rZShSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciopOwotICAgIGJvb2wgc2V0TGlu
a2VkUmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqKTsKLQotICAgIC8vIEZyb20g
U1ZHIDEuMSAybmQgRWRpdGlvbgotICAgIC8vIGNsaXBwZXI6ICdjb250YWluZXIgZWxlbWVudHMn
IGFuZCAnZ3JhcGhpY3MgZWxlbWVudHMnCi0gICAgLy8gZmlsdGVyOiAgJ2NvbnRhaW5lciBlbGVt
ZW50cycgYW5kICdncmFwaGljcyBlbGVtZW50cycKLSAgICAvLyBtYXNrZXI6ICAnY29udGFpbmVy
IGVsZW1lbnRzJyBhbmQgJ2dyYXBoaWNzIGVsZW1lbnRzJwotICAgIC8vIC0+IGEsIGNpcmNsZSwg
ZGVmcywgZWxsaXBzZSwgZ2x5cGgsIGcsIGltYWdlLCBsaW5lLCBtYXJrZXIsIG1hc2ssIG1pc3Np
bmctZ2x5cGgsIHBhdGgsIHBhdHRlcm4sIHBvbHlnb24sIHBvbHlsaW5lLCByZWN0LCBzdmcsIHN3
aXRjaCwgc3ltYm9sLCB0ZXh0LCB1c2UKLSAgICBzdHJ1Y3QgQ2xpcHBlckZpbHRlck1hc2tlckRh
dGEgewotICAgICAgICBDbGlwcGVyRmlsdGVyTWFza2VyRGF0YSgpCi0gICAgICAgICAgICA6IGNs
aXBwZXIoMCkKLSNpZiBFTkFCTEUoRklMVEVSUykKLSAgICAgICAgICAgICwgZmlsdGVyKDApCi0j
ZW5kaWYKLSAgICAgICAgICAgICwgbWFza2VyKDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0g
ICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPENsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhPiBjcmVhdGUo
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENsaXBwZXJGaWx0ZXJNYXNrZXJE
YXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlw
cGVyOwotI2lmIEVOQUJMRShGSUxURVJTKQotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ciogZmlsdGVyOwotI2VuZGlmCi0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlTWFza2VyKiBtYXNr
ZXI7Ci0gICAgfTsKLQotICAgIC8vIEZyb20gU1ZHIDEuMSAybmQgRWRpdGlvbgotICAgIC8vIG1h
cmtlcjogbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUKLSAgICBzdHJ1Y3QgTWFya2VyRGF0
YSB7Ci0gICAgICAgIE1hcmtlckRhdGEoKQotICAgICAgICAgICAgOiBtYXJrZXJTdGFydCgwKQot
ICAgICAgICAgICAgLCBtYXJrZXJNaWQoMCkKLSAgICAgICAgICAgICwgbWFya2VyRW5kKDApCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPE1hcmtlckRh
dGE+IGNyZWF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWFya2VyRGF0
YTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJT
dGFydDsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck1pZDsKLSAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZDsKLSAgICB9OwotCi0gICAgLy8g
RnJvbSBTVkcgMS4xIDJuZCBFZGl0aW9uCi0gICAgLy8gZmlsbDogICAgICAgJ3NoYXBlcycgYW5k
ICd0ZXh0IGNvbnRlbnQgZWxlbWVudHMnCi0gICAgLy8gc3Ryb2tlOiAgICAgJ3NoYXBlcycgYW5k
ICd0ZXh0IGNvbnRlbnQgZWxlbWVudHMnCi0gICAgLy8gLT4gYWx0R2x5cGgsIGNpcmNsZSwgZWxs
aXBzZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQsIHRleHRQYXRo
LCB0cmVmLCB0c3BhbgotICAgIHN0cnVjdCBGaWxsU3Ryb2tlRGF0YSB7Ci0gICAgICAgIEZpbGxT
dHJva2VEYXRhKCkKLSAgICAgICAgICAgIDogZmlsbCgwKQotICAgICAgICAgICAgLCBzdHJva2Uo
MCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8Rmls
bFN0cm9rZURhdGE+IGNyZWF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcg
RmlsbFN0cm9rZURhdGE7Ci0gICAgICAgIH0KLQotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lciogZmlsbDsKLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHN0cm9r
ZTsKLSAgICB9OwotCi0gICAgT3duUHRyPENsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhPiBtX2NsaXBw
ZXJGaWx0ZXJNYXNrZXJEYXRhOwotICAgIE93blB0cjxNYXJrZXJEYXRhPiBtX21hcmtlckRhdGE7
Ci0gICAgT3duUHRyPEZpbGxTdHJva2VEYXRhPiBtX2ZpbGxTdHJva2VEYXRhOwotICAgIFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyKiBtX2xpbmtlZFJlc291cmNlOwotfTsKLQotfQotCi0jZW5k
aWYKLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0Nh
Y2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3Vy
Y2VzQ2FjaGUuY3BwCShyZXZpc2lvbiA3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTY1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTVkdSZXNv
dXJjZXNDYWNoZS5oIgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgotI2lu
Y2x1ZGUgIlNWR1Jlc291cmNlcy5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlc0N5Y2xlU29sdmVy
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU1ZHUmVzb3VyY2VzQ2FjaGU6OlNWR1Jlc291
cmNlc0NhY2hlKCkKLXsKLX0KLQotU1ZHUmVzb3VyY2VzQ2FjaGU6On5TVkdSZXNvdXJjZXNDYWNo
ZSgpCi17Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1fY2FjaGUpOwotfQotCi12b2lkIFNWR1Jlc291
cmNlc0NhY2hlOjphZGRSZXNvdXJjZXNGcm9tUmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0g
ICAgQVNTRVJUKHN0eWxlKTsKLSAgICBBU1NFUlQoIW1fY2FjaGUuY29udGFpbnMob2JqZWN0KSk7
Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUo
KTsKLSAgICBBU1NFUlQoc3ZnU3R5bGUpOwotCi0gICAgLy8gQnVpbGQgYSBsaXN0IG9mIGFsbCBy
ZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXNzZWQgUmVuZGVyT2JqZWN0Ci0gICAgU1ZH
UmVzb3VyY2VzKiByZXNvdXJjZXMgPSBuZXcgU1ZHUmVzb3VyY2VzOwotICAgIGlmICghcmVzb3Vy
Y2VzLT5idWlsZENhY2hlZFJlc291cmNlcyhvYmplY3QsIHN2Z1N0eWxlKSkgewotICAgICAgICBk
ZWxldGUgcmVzb3VyY2VzOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUHV0IG9i
amVjdCBpbiBjYWNoZS4KLSAgICBtX2NhY2hlLnNldChvYmplY3QsIHJlc291cmNlcyk7Ci0KLSAg
ICAvLyBSdW4gY3ljbGUtZGV0ZWN0aW9uIF9hZnRlcndhcmRzXywgc28gc2VsZi1yZWZlcmVuY2Vz
IGNhbiBiZSBjYXVnaHQgYXMgd2VsbC4KLSAgICBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlciBzb2x2
ZXIob2JqZWN0LCByZXNvdXJjZXMpOwotICAgIHNvbHZlci5yZXNvbHZlQ3ljbGVzKCk7Ci0KLSAg
ICAvLyBXYWxrIHJlc291cmNlcyBhbmQgcmVnaXN0ZXIgdGhlIHJlbmRlciBvYmplY3QgYXQgZWFj
aCByZXNvdXJjZXMuCi0gICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+IHJl
c291cmNlU2V0OwotICAgIHJlc291cmNlcy0+YnVpbGRTZXRPZlJlc291cmNlcyhyZXNvdXJjZVNl
dCk7Ci0KLSAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9y
IGVuZCA9IHJlc291cmNlU2V0LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IHJlc291cmNlU2V0LmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmFkZENsaWVudChvYmplY3QpOwotfQotCi12b2lk
IFNWR1Jlc291cmNlc0NhY2hlOjpyZW1vdmVSZXNvdXJjZXNGcm9tUmVuZGVyT2JqZWN0KFJlbmRl
ck9iamVjdCogb2JqZWN0KQotewotICAgIGlmICghbV9jYWNoZS5jb250YWlucyhvYmplY3QpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IG1fY2FjaGUu
Z2V0KG9iamVjdCk7Ci0KLSAgICAvLyBXYWxrIHJlc291cmNlcyBhbmQgcmVnaXN0ZXIgdGhlIHJl
bmRlciBvYmplY3QgYXQgZWFjaCByZXNvdXJjZXMuCi0gICAgSGFzaFNldDxSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lcio+IHJlc291cmNlU2V0OwotICAgIHJlc291cmNlcy0+YnVpbGRTZXRPZlJl
c291cmNlcyhyZXNvdXJjZVNldCk7Ci0KLSAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyKj46Oml0ZXJhdG9yIGVuZCA9IHJlc291cmNlU2V0LmVuZCgpOwotICAgIGZvciAoSGFz
aFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IHJlc291cmNl
U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnJlbW92ZUNsaWVu
dChvYmplY3QpOwotCi0gICAgZGVsZXRlIG1fY2FjaGUudGFrZShvYmplY3QpOwotfQotCi1zdGF0
aWMgaW5saW5lIFNWR1Jlc291cmNlc0NhY2hlKiByZXNvdXJjZXNDYWNoZUZyb21SZW5kZXJPYmpl
Y3QoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBy
ZW5kZXJlci0+ZG9jdW1lbnQoKTsKLSAgICBBU1NFUlQoZG9jdW1lbnQpOwotCi0gICAgU1ZHRG9j
dW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25zID0gZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKTsKLSAgICBBU1NFUlQoZXh0ZW5zaW9ucyk7Ci0KLSAgICBTVkdSZXNvdXJjZXNDYWNoZSog
Y2FjaGUgPSBleHRlbnNpb25zLT5yZXNvdXJjZXNDYWNoZSgpOwotICAgIEFTU0VSVChjYWNoZSk7
Ci0KLSAgICByZXR1cm4gY2FjaGU7Ci19Ci0KLVNWR1Jlc291cmNlcyogU1ZHUmVzb3VyY2VzQ2Fj
aGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQotewotICAgIEFTU0VSVChyZW5kZXJlcik7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGUqIGNhY2hl
ID0gcmVzb3VyY2VzQ2FjaGVGcm9tUmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKLSAgICBpZiAoIWNh
Y2hlLT5tX2NhY2hlLmNvbnRhaW5zKHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICByZXR1cm4gY2FjaGUtPm1fY2FjaGUuZ2V0KHJlbmRlcmVyKTsKLX0KLQotdm9pZCBTVkdSZXNv
dXJjZXNDYWNoZTo6Y2xpZW50TGF5b3V0Q2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsK
LSAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRS
ZXNvdXJjZXNGb3JSZW5kZXJPYmplY3Qob2JqZWN0KTsKLSAgICBpZiAoIXJlc291cmNlcykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcmVzb3VyY2VzLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2Jq
ZWN0KTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHlsZSogbmV3U3R5bGUpCi17Ci0gICAgQVNTRVJUKHJlbmRlcmVyKTsKLSAgICBpZiAoZGlmZiA9
PSBTdHlsZURpZmZlcmVuY2VFcXVhbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xpZW50VXBk
YXRlZEZyb21FbGVtZW50KHJlbmRlcmVyLCBuZXdTdHlsZSk7Ci0gICAgUmVuZGVyU1ZHUmVzb3Vy
Y2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbihyZW5kZXJlciwg
ZmFsc2UpOwotfQotIAotdm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50VXBkYXRlZEZyb21F
bGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHls
ZSkKLXsKLSAgICBBU1NFUlQocmVuZGVyZXIpOwotICAgIEFTU0VSVChyZW5kZXJlci0+cGFyZW50
KCkpOwotCi0gICAgU1ZHUmVzb3VyY2VzQ2FjaGUqIGNhY2hlID0gcmVzb3VyY2VzQ2FjaGVGcm9t
UmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKLSAgICBjYWNoZS0+cmVtb3ZlUmVzb3VyY2VzRnJvbVJl
bmRlck9iamVjdChyZW5kZXJlcik7Ci0gICAgY2FjaGUtPmFkZFJlc291cmNlc0Zyb21SZW5kZXJP
YmplY3QocmVuZGVyZXIsIG5ld1N0eWxlKTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6
Y2xpZW50RGVzdHJveWVkKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17Ci0gICAgQVNTRVJUKHJl
bmRlcmVyKTsKLSAgICBTVkdSZXNvdXJjZXNDYWNoZSogY2FjaGUgPSByZXNvdXJjZXNDYWNoZUZy
b21SZW5kZXJPYmplY3QocmVuZGVyZXIpOwotICAgIGNhY2hlLT5yZW1vdmVSZXNvdXJjZXNGcm9t
UmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6cmVz
b3VyY2VEZXN0cm95ZWQoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHJlc291cmNlKQotewot
ICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGUqIGNhY2hlID0gcmVz
b3VyY2VzQ2FjaGVGcm9tUmVuZGVyT2JqZWN0KHJlc291cmNlKTsKLQotICAgIC8vIFRoZSByZXNv
dXJjZSBpdHNlbGYgbWF5IGhhdmUgY2xpZW50cywgdGhhdCBuZWVkIHRvIGJlIG5vdGlmaWVkLgot
ICAgIGNhY2hlLT5yZW1vdmVSZXNvdXJjZXNGcm9tUmVuZGVyT2JqZWN0KHJlc291cmNlKTsKLQot
ICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgU1ZHUmVzb3VyY2VzKj46Oml0ZXJhdG9yIGVuZCA9
IGNhY2hlLT5tX2NhY2hlLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBT
VkdSZXNvdXJjZXMqPjo6aXRlcmF0b3IgaXQgPSBjYWNoZS0+bV9jYWNoZS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnJlc291cmNlRGVzdHJveWVkKHJlc291
cmNlKTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
VkdSZXNvdXJjZXNDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TVkdSZXNvdXJjZXNDYWNoZS5oCShyZXZpc2lvbiA3NTM0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU1ZHUmVzb3VyY2VzQ2FjaGVfaAotI2Rl
ZmluZSBTVkdSZXNvdXJjZXNDYWNoZV9oCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIlJl
bmRlclN0eWxlQ29uc3RhbnRzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBSZW5kZXJTdHlsZTsK
LWNsYXNzIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOwotY2xhc3MgU1ZHUmVzb3VyY2VzOwot
Ci1jbGFzcyBTVkdSZXNvdXJjZXNDYWNoZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6
Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGUoKTsKLSAgICB+U1ZHUmVzb3VyY2VzQ2FjaGUoKTsKLQot
ICAgIHZvaWQgYWRkUmVzb3VyY2VzRnJvbVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqLCBjb25z
dCBSZW5kZXJTdHlsZSopOwotICAgIHZvaWQgcmVtb3ZlUmVzb3VyY2VzRnJvbVJlbmRlck9iamVj
dChSZW5kZXJPYmplY3QqKTsKLSAgICBzdGF0aWMgU1ZHUmVzb3VyY2VzKiBjYWNoZWRSZXNvdXJj
ZXNGb3JSZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0Kik7Ci0KLSAgICAvLyBDYWxsZWQgZnJvbSBh
bGwgU1ZHIHJlbmRlcmVycyBkZXN0cm95KCkgbWV0aG9kcyAtIGV4Y2VwdCBmb3IgUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIuCi0gICAgc3RhdGljIHZvaWQgY2xpZW50RGVzdHJveWVkKFJlbmRl
ck9iamVjdCopOwotCi0gICAgLy8gQ2FsbGVkIGZyb20gYWxsIFNWRyByZW5kZXJlcnMgbGF5b3V0
KCkgbWV0aG9kcy4KLSAgICBzdGF0aWMgdm9pZCBjbGllbnRMYXlvdXRDaGFuZ2VkKFJlbmRlck9i
amVjdCopOwotCi0gICAgLy8gQ2FsbGVkIGZyb20gYWxsIFNWRyByZW5kZXJlcnMgc3R5bGVEaWRD
aGFuZ2UoKSBtZXRob2RzLgotICAgIHN0YXRpYyB2b2lkIGNsaWVudFN0eWxlQ2hhbmdlZChSZW5k
ZXJPYmplY3QqLCBTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7
Ci0KLSAgICAvLyBDYWxsZWQgZnJvbSBhbGwgU1ZHIHJlbmRlcmVycyB1cGRhdGVGcm9tRWxlbWVu
dCgpIG1ldGhvZHMuCi0gICAgc3RhdGljIHZvaWQgY2xpZW50VXBkYXRlZEZyb21FbGVtZW50KFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7Ci0KLSAgICAvLyBDYWxs
ZWQgZnJvbSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6ZGVzdHJveSgpLgotICAgIHN0YXRp
YyB2b2lkIHJlc291cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKik7Ci0K
LXByaXZhdGU6Ci0gICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBTVkdSZXNvdXJjZXMqPiBtX2Nh
Y2hlOwotfTsKLQotfQotCi0jZW5kaWYKLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwCShyZXZpc2lvbiA3
NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5o
IgotCi0vLyBTZXQgdG8gYSB2YWx1ZSA+IDAsIHRvIGRlYnVnIHRoZSByZXNvdXJjZSBjYWNoZS4K
LSNkZWZpbmUgREVCVUdfQ1lDTEVfREVURUNUSU9OIDAKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgotI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2VyLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyRWxl
bWVudC5oIgotI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1Bh
dHRlcm5FbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiU1ZH
UmVzb3VyY2VzQ2FjaGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TVkdSZXNvdXJjZXND
eWNsZVNvbHZlcjo6U1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMpCi0gICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQot
ICAgICwgbV9yZXNvdXJjZXMocmVzb3VyY2VzKQotewotICAgIEFTU0VSVChtX3JlbmRlcmVyKTsK
LSAgICBBU1NFUlQobV9yZXNvdXJjZXMpOwotfQotCi1TVkdSZXNvdXJjZXNDeWNsZVNvbHZlcjo6
flNWR1Jlc291cmNlc0N5Y2xlU29sdmVyKCkKLXsKLX0KLQotYm9vbCBTVkdSZXNvdXJjZXNDeWNs
ZVNvbHZlcjo6cmVzb3VyY2VDb250YWluc0N5Y2xlcyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBj
b25zdAotewotICAgIEFTU0VSVChyZW5kZXJlcik7Ci0KLSAgICAvLyBGaXJzdCBvcGVyYXRlIG9u
IHRoZSByZXNvdXJjZXMgb2YgdGhlIGdpdmVuIHJlbmRlcmVyLgotICAgIC8vIDxtYXJrZXIgaWQ9
ImEiPiA8cGF0aCBtYXJrZXItc3RhcnQ9InVybCgjYikiLz4gLi4uCi0gICAgLy8gPG1hcmtlciBp
ZD0iYiIgbWFya2VyLXN0YXJ0PSJ1cmwoI2EpIi8+Ci0gICAgaWYgKFNWR1Jlc291cmNlcyogcmVz
b3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVj
dChyZW5kZXJlcikpIHsKLSAgICAgICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
cio+IHJlc291cmNlU2V0OwotICAgICAgICByZXNvdXJjZXMtPmJ1aWxkU2V0T2ZSZXNvdXJjZXMo
cmVzb3VyY2VTZXQpOwotCi0gICAgICAgIC8vIFdhbGsgYWxsIHJlc291cmNlcyBhbmQgY2hlY2sg
d2hldGVyIHRoZXkgcmVmZXJlbmNlIGFueSByZXNvdXJjZSBjb250YWluZWQgaW4gdGhlIHJlc291
cmNlcyBzZXQuCi0gICAgICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPjo6
aXRlcmF0b3IgZW5kID0gcmVzb3VyY2VTZXQuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IHJlc291cmNlU2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKG1fYWxsUmVzb3VyY2Vz
LmNvbnRhaW5zKCppdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBUaGVuIG9wZXJhdGUgb24gdGhlIGNoaWxkIHJlc291cmNlcyBvZiB0
aGUgZ2l2ZW4gcmVuZGVyZXIuCi0gICAgLy8gPG1hcmtlciBpZD0iYSI+IDxwYXRoIG1hcmtlci1z
dGFydD0idXJsKCNiKSIvPiAuLi4KLSAgICAvLyA8bWFya2VyIGlkPSJiIj4gPHBhdGggbWFya2Vy
LXN0YXJ0PSJ1cmwoI2EpIi8+IC4uLgotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJl
bmRlcmVyLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KSB7Ci0gICAgICAgIFNWR1Jlc291cmNlcyogY2hpbGRSZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXND
YWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KGNoaWxkKTsKLSAgICAgICAgaWYg
KCFjaGlsZFJlc291cmNlcykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAg
ICAgLy8gQSBjaGlsZCBvZiB0aGUgZ2l2ZW4gJ3Jlc291cmNlJyBjb250YWlucyByZXNvdXJjZXMu
IAotICAgICAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj4gY2hpbGRTZXQ7
Ci0gICAgICAgIGNoaWxkUmVzb3VyY2VzLT5idWlsZFNldE9mUmVzb3VyY2VzKGNoaWxkU2V0KTsK
LQotICAgICAgICAvLyBXYWxrIGFsbCBjaGlsZCByZXNvdXJjZXMgYW5kIGNoZWNrIHdoZXRlciB0
aGV5IHJlZmVyZW5jZSBhbnkgcmVzb3VyY2UgY29udGFpbmVkIGluIHRoZSByZXNvdXJjZXMgc2V0
LgotICAgICAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9y
IGVuZCA9IGNoaWxkU2V0LmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIqPjo6aXRlcmF0b3IgaXQgPSBjaGlsZFNldC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtX2FsbFJlc291cmNlcy5jb250YWlucygqaXQp
KQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
V2FsayBjaGlsZHJlbiByZWN1cnNpdmVseSwgc3RvcCBpbW1lZGlhdGVseSBpZiB3ZSBmb3VuZCBh
IGN5Y2xlCi0gICAgICAgIGlmIChyZXNvdXJjZUNvbnRhaW5zQ3ljbGVzKGNoaWxkKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9p
ZCBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlcjo6cmVzb2x2ZUN5Y2xlcygpCi17Ci0gICAgQVNTRVJU
KG1fYWxsUmVzb3VyY2VzLmlzRW1wdHkoKSk7Ci0KLSNpZiBERUJVR19DWUNMRV9ERVRFQ1RJT04g
PiAwCi0gICAgZnByaW50ZihzdGRlcnIsICJcbkJlZm9yZSBjeWNsZSBkZXRlY3Rpb246XG4iKTsK
LSAgICBtX3Jlc291cmNlcy0+ZHVtcChtX3JlbmRlcmVyKTsKLSNlbmRpZgotCi0gICAgLy8gU3Rh
c2ggYWxsIHJlc291cmNlcyBpbnRvIGEgSGFzaFNldCBmb3IgdGhlIGVhc2Ugb2YgdHJhdmVyc2lu
Zy4KLSAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj4gbG9jYWxSZXNvdXJj
ZXM7Ci0gICAgbV9yZXNvdXJjZXMtPmJ1aWxkU2V0T2ZSZXNvdXJjZXMobG9jYWxSZXNvdXJjZXMp
OwotICAgIEFTU0VSVCghbG9jYWxSZXNvdXJjZXMuaXNFbXB0eSgpKTsKLQotICAgIC8vIEFkZCBh
bGwgcGFyZW50IHJlc291cmNlIGNvbnRhaW5lcnMgdG8gdGhlIEhhc2hTZXQuCi0gICAgSGFzaFNl
dDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+IHBhcmVudFJlc291cmNlczsKLSAgICBSZW5k
ZXJPYmplY3QqIHBhcmVudCA9IG1fcmVuZGVyZXItPnBhcmVudCgpOwotICAgIHdoaWxlIChwYXJl
bnQpIHsKLSAgICAgICAgaWYgKHBhcmVudC0+aXNTVkdSZXNvdXJjZUNvbnRhaW5lcigpKQotICAg
ICAgICAgICAgcGFyZW50UmVzb3VyY2VzLmFkZChwYXJlbnQtPnRvUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXIoKSk7Ci0gICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50KCk7Ci0gICAgfQot
Ci0jaWYgREVCVUdfQ1lDTEVfREVURUNUSU9OID4gMAotICAgIGZwcmludGYoc3RkZXJyLCAiXG5E
ZXRlY3Rpbmcgd2hldGVyIGFueSByZXNvdXJjZXMgcmVmZXJlbmNlcyBhbnkgb2YgZm9sbG93aW5n
IG9iamVjdHM6XG4iKTsKLSAgICB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiTG9jYWwgcmVz
b3VyY2VzOlxuIik7Ci0gICAgICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIq
Pjo6aXRlcmF0b3IgZW5kID0gbG9jYWxSZXNvdXJjZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFz
aFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IGxvY2FsUmVz
b3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAifD4gJXM6IG9iamVjdD0lcCAobm9kZT0lcClcbiIsICgqaXQpLT5yZW5kZXJOYW1lKCks
ICppdCwgKCppdCktPm5vZGUoKSk7Ci0KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJQYXJlbnQg
cmVzb3VyY2VzOlxuIik7Ci0gICAgICAgIGVuZCA9IHBhcmVudFJlc291cmNlcy5lbmQoKTsKLSAg
ICAgICAgZm9yIChIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9y
IGl0ID0gcGFyZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAifD4gJXM6IG9iamVjdD0lcCAobm9kZT0lcClcbiIsICgqaXQp
LT5yZW5kZXJOYW1lKCksICppdCwgKCppdCktPm5vZGUoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICAvLyBCdWlsZCBjb21iaW5lZCBzZXQgb2YgbG9jYWwgYW5kIHBhcmVudCByZXNvdXJjZXMuCi0g
ICAgbV9hbGxSZXNvdXJjZXMgPSBsb2NhbFJlc291cmNlczsKLSAgICBIYXNoU2V0PFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGVuZCA9IHBhcmVudFJlc291cmNlcy5lbmQo
KTsKLSAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPjo6aXRlcmF0
b3IgaXQgPSBwYXJlbnRSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBtX2FsbFJlc291cmNlcy5hZGQoKml0KTsKLQotICAgIC8vIElmIHdlJ3JlIGEgcmVzb3VyY2Us
IGFkZCBvdXJzZWx2ZXMgdG8gdGhlIEhhc2hTZXQuCi0gICAgaWYgKG1fcmVuZGVyZXItPmlzU1ZH
UmVzb3VyY2VDb250YWluZXIoKSkKLSAgICAgICAgbV9hbGxSZXNvdXJjZXMuYWRkKG1fcmVuZGVy
ZXItPnRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoKSk7Ci0KLSAgICBBU1NFUlQoIW1fYWxs
UmVzb3VyY2VzLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBUaGUgam9iIG9mIHRoaXMgZnVuY3Rpb24g
aXMgdG8gZGV0ZXJtaW5lIHdoZXRlciBhbnkgb2YgdGhlICdyZXNvdXJjZXMnIGFzc29jaWF0ZWQg
d2l0aCB0aGUgZ2l2ZW4gJ3JlbmRlcmVyJwotICAgIC8vIHJlZmVyZW5jZXMgdXMgKG9yIHdoZXRl
ciBhbnkgb2YgaXRzIGtpZHMgcmVmZXJlbmNlcyB1cykgLT4gdGhhdCdzIGEgY3ljbGUsIHdlIG5l
ZWQgdG8gZmluZCBhbmQgYnJlYWsgaXQuCi0gICAgZW5kID0gbG9jYWxSZXNvdXJjZXMuZW5kKCk7
Ci0gICAgZm9yIChIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9y
IGl0ID0gbG9jYWxSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSA9ICppdDsKLSAgICAgICAgaWYg
KHBhcmVudFJlc291cmNlcy5jb250YWlucyhyZXNvdXJjZSkgfHwgcmVzb3VyY2VDb250YWluc0N5
Y2xlcyhyZXNvdXJjZSkpCi0gICAgICAgICAgICBicmVha0N5Y2xlKHJlc291cmNlKTsKLSAgICB9
Ci0KLSNpZiBERUJVR19DWUNMRV9ERVRFQ1RJT04gPiAwCi0gICAgZnByaW50ZihzdGRlcnIsICJc
bkFmdGVyIGN5Y2xlIGRldGVjdGlvbjpcbiIpOwotICAgIG1fcmVzb3VyY2VzLT5kdW1wKG1fcmVu
ZGVyZXIpOwotI2VuZGlmCi0KLSAgICBtX2FsbFJlc291cmNlcy5jbGVhcigpOwotfQotCi12b2lk
IFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyOjpicmVha0N5Y2xlKFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyKiByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlKQotewotICAgIEFTU0VSVChyZXNvdXJjZUxl
YWRpbmdUb0N5Y2xlKTsKLSAgICBpZiAocmVzb3VyY2VMZWFkaW5nVG9DeWNsZSA9PSBtX3Jlc291
cmNlcy0+bGlua2VkUmVzb3VyY2UoKSkgewotICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRMaW5r
ZWRSZXNvdXJjZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3dpdGNoIChyZXNv
dXJjZUxlYWRpbmdUb0N5Y2xlLT5yZXNvdXJjZVR5cGUoKSkgewotICAgIGNhc2UgTWFza2VyUmVz
b3VyY2VUeXBlOgotICAgICAgICBBU1NFUlQocmVzb3VyY2VMZWFkaW5nVG9DeWNsZSA9PSBtX3Jl
c291cmNlcy0+bWFza2VyKCkpOwotICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRNYXNrZXIoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNYXJrZXJSZXNvdXJjZVR5cGU6Ci0gICAgICAgIEFT
U0VSVChyZXNvdXJjZUxlYWRpbmdUb0N5Y2xlID09IG1fcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgp
IHx8IHJlc291cmNlTGVhZGluZ1RvQ3ljbGUgPT0gbV9yZXNvdXJjZXMtPm1hcmtlck1pZCgpIHx8
IHJlc291cmNlTGVhZGluZ1RvQ3ljbGUgPT0gbV9yZXNvdXJjZXMtPm1hcmtlckVuZCgpKTsKLSAg
ICAgICAgaWYgKG1fcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpID09IHJlc291cmNlTGVhZGluZ1Rv
Q3ljbGUpCi0gICAgICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRNYXJrZXJTdGFydCgpOwotICAg
ICAgICBpZiAobV9yZXNvdXJjZXMtPm1hcmtlck1pZCgpID09IHJlc291cmNlTGVhZGluZ1RvQ3lj
bGUpCi0gICAgICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRNYXJrZXJNaWQoKTsKLSAgICAgICAg
aWYgKG1fcmVzb3VyY2VzLT5tYXJrZXJFbmQoKSA9PSByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlKQot
ICAgICAgICAgICAgbV9yZXNvdXJjZXMtPnJlc2V0TWFya2VyRW5kKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUGF0dGVyblJlc291cmNlVHlwZToKLSAgICBjYXNlIExpbmVhckdyYWRpZW50
UmVzb3VyY2VUeXBlOgotICAgIGNhc2UgUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGU6Ci0gICAg
ICAgIEFTU0VSVChyZXNvdXJjZUxlYWRpbmdUb0N5Y2xlID09IG1fcmVzb3VyY2VzLT5maWxsKCkg
fHwgcmVzb3VyY2VMZWFkaW5nVG9DeWNsZSA9PSBtX3Jlc291cmNlcy0+c3Ryb2tlKCkpOwotICAg
ICAgICBpZiAobV9yZXNvdXJjZXMtPmZpbGwoKSA9PSByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlKQot
ICAgICAgICAgICAgbV9yZXNvdXJjZXMtPnJlc2V0RmlsbCgpOwotICAgICAgICBpZiAobV9yZXNv
dXJjZXMtPnN0cm9rZSgpID09IHJlc291cmNlTGVhZGluZ1RvQ3ljbGUpCi0gICAgICAgICAgICBt
X3Jlc291cmNlcy0+cmVzZXRTdHJva2UoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGaWx0
ZXJSZXNvdXJjZVR5cGU6Ci0jaWYgRU5BQkxFKEZJTFRFUlMpCi0gICAgICAgIEFTU0VSVChyZXNv
dXJjZUxlYWRpbmdUb0N5Y2xlID09IG1fcmVzb3VyY2VzLT5maWx0ZXIoKSk7Ci0gICAgICAgIG1f
cmVzb3VyY2VzLT5yZXNldEZpbHRlcigpOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ2xpcHBlclJlc291cmNlVHlwZToKLSAgICAgICAgQVNTRVJUKHJlc291cmNlTGVhZGluZ1Rv
Q3ljbGUgPT0gbV9yZXNvdXJjZXMtPmNsaXBwZXIoKSk7Ci0gICAgICAgIG1fcmVzb3VyY2VzLT5y
ZXNldENsaXBwZXIoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTb2xpZENvbG9yUmVzb3Vy
Y2VUeXBlOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NW
R1Jlc291cmNlc0N5Y2xlU29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmgJKHJldmlzaW9uIDc1MzQ3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdSZXNv
dXJjZXNDeWNsZVNvbHZlcl9oCi0jZGVmaW5lIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyX2gKLQot
I2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lcjsKLWNsYXNzIFNWR1Jlc291cmNlczsKLQotY2xhc3MgU1ZHUmVzb3VyY2VzQ3ljbGVT
b2x2ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVibGljOgotICAgIFNWR1Jlc291cmNlc0N5
Y2xlU29sdmVyKFJlbmRlck9iamVjdCosIFNWR1Jlc291cmNlcyopOwotICAgIH5TVkdSZXNvdXJj
ZXNDeWNsZVNvbHZlcigpOwotCi0gICAgdm9pZCByZXNvbHZlQ3ljbGVzKCk7Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCByZXNvdXJjZUNvbnRhaW5zQ3ljbGVzKFJlbmRlck9iamVjdCopIGNvbnN0Owot
ICAgIHZvaWQgYnJlYWtDeWNsZShSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciopOwotCi0gICAg
UmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwotICAgIFNWR1Jlc291cmNlcyogbV9yZXNvdXJjZXM7
Ci0gICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+IG1fYWxsUmVzb3VyY2Vz
OyAKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCShyZXZpc2lvbiA3NTM0NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHU2hhZG93VHJlZUVs
ZW1lbnRzLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5o
IgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5j
bHVkZSAiU1ZHVXNlRWxlbWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFNWR1No
YWRvd1RyZWVDb250YWluZXJFbGVtZW50Ci0KLVNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50
OjpTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQpCi0gICAg
OiBTVkdHRWxlbWVudChTVkdOYW1lczo6Z1RhZywgZG9jdW1lbnQpCi17Ci19Ci0KLVBhc3NSZWZQ
dHI8U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ+IFNWR1NoYWRvd1RyZWVDb250YWluZXJF
bGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQoZG9jdW1lbnQpKTsKLX0KLQotRmxv
YXRTaXplIFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50Ojpjb250YWluZXJUcmFuc2xhdGlv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZShtX3hPZmZzZXQudmFsdWUodGhpcyks
IG1feU9mZnNldC52YWx1ZSh0aGlzKSk7Ci19Ci0KLS8vIFNWR1NoYWRvd1RyZWVSb290RWxlbWVu
dAotCi1pbmxpbmUgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50OjpTVkdTaGFkb3dUcmVlUm9vdEVs
ZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBTVkdVc2VFbGVtZW50KiBzaGFkb3dQYXJlbnQpCi0g
ICAgOiBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkKLXsKLSAgICBzZXRT
aGFkb3dIb3N0KHNoYWRvd1BhcmVudCk7Ci0gICAgc2V0SW5Eb2N1bWVudCgpOwotfQotCi1QYXNz
UmVmUHRyPFNWR1NoYWRvd1RyZWVSb290RWxlbWVudD4gU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50
OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBTVkdVc2VFbGVtZW50KiBzaGFkb3dQYXJlbnQp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQoZG9j
dW1lbnQsIHNoYWRvd1BhcmVudCkpOwotfQotCi12b2lkIFNWR1NoYWRvd1RyZWVSb290RWxlbWVu
dDo6YXR0YWNoRWxlbWVudChQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSwgUmVuZGVyQXJl
bmEqIGFyZW5hKQotewotICAgIEFTU0VSVChzaGFkb3dIb3N0KCkpOwotCi0gICAgLy8gQ3JlYXRl
IHRoZSByZW5kZXJlciB3aXRoIHRoZSBzcGVjaWZpZWQgc3R5bGUKLSAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXIoYXJlbmEsIHN0eWxlLmdldCgpKTsKLSAgICBpZiAo
cmVuZGVyZXIpIHsKLSAgICAgICAgc2V0UmVuZGVyZXIocmVuZGVyZXIpOwotICAgICAgICByZW5k
ZXJlci0+c2V0U3R5bGUoc3R5bGUpOwotICAgIH0KLQotICAgIC8vIFNldCB0aGVzZSBleHBsaWNp
dGx5IHNpbmNlIHRoaXMgbm9ybWFsbHkgaGFwcGVucyBkdXJpbmcgYW4gYXR0YWNoKCkKLSAgICBz
ZXRBdHRhY2hlZCgpOwotCi0gICAgLy8gQWRkIHRoZSByZW5kZXJlciB0byB0aGUgcmVuZGVyIHRy
ZWUKLSAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgIHNoYWRvd0hvc3QoKS0+cmVuZGVyZXIoKS0+
YWRkQ2hpbGQocmVuZGVyZXIpOwotfQotCi12b2lkIFNWR1NoYWRvd1RyZWVSb290RWxlbWVudDo6
Y2xlYXJTaGFkb3dIb3N0KCkKLXsKLSAgICBzZXRTaGFkb3dIb3N0KDApOwotfQotCi19Ci0KLSNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVl
RWxlbWVudHMuaAkocmV2aXNpb24gNzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTVkdTaGFkb3dUcmVlRWxlbWVudHNfaAotI2RlZmlu
ZSBTVkdTaGFkb3dUcmVlRWxlbWVudHNfaAotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJT
VkdHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEZsb2F0U2l6ZTsKLWNsYXNzIFNWR1VzZUVsZW1lbnQ7Ci0KLWNsYXNzIFNW
R1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50IDogcHVibGljIFNWR0dFbGVtZW50IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Kik7Ci0KLSAgICBGbG9hdFNpemUgY29udGFpbmVyVHJhbnNsYXRpb24o
KSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRhaW5lck9mZnNldChjb25zdCBTVkdMZW5ndGgmIHgs
IGNvbnN0IFNWR0xlbmd0aCYgeSkKLSAgICB7Ci0gICAgICAgIG1feE9mZnNldCA9IHg7Ci0gICAg
ICAgIG1feU9mZnNldCA9IHk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgU1ZHU2hhZG93VHJl
ZUNvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQqKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJv
b2wgaXNTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
LQotICAgIFNWR0xlbmd0aCBtX3hPZmZzZXQ7Ci0gICAgU1ZHTGVuZ3RoIG1feU9mZnNldDsKLX07
Ci0KLWNsYXNzIFNWR1NoYWRvd1RyZWVSb290RWxlbWVudCA6IHB1YmxpYyBTVkdTaGFkb3dUcmVl
Q29udGFpbmVyRWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHU2hh
ZG93VHJlZVJvb3RFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqLCBTVkdVc2VFbGVtZW50KiBzaGFk
b3dQYXJlbnQpOwotCi0gICAgdm9pZCBhdHRhY2hFbGVtZW50KFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+LCBSZW5kZXJBcmVuYSopOwotICAgIHZvaWQgY2xlYXJTaGFkb3dIb3N0KCk7Ci0KLXByaXZh
dGU6Ci0gICAgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50KERvY3VtZW50KiwgU1ZHVXNlRWxlbWVu
dCogc2hhZG93UGFyZW50KTsKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmNw
cAkocmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
b3JlaWduT2JqZWN0LmNwcDo3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShTVkdfRk9SRUlHTl9PQkpFQ1QpCisj
aW5jbHVkZSAiUmVuZGVyRm9yZWlnbk9iamVjdC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCisjaW5jbHVkZSAiU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJT
VkdSZW5kZXJTdXBwb3J0LmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUg
IlRyYW5zZm9ybVN0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyRm9yZWln
bk9iamVjdDo6UmVuZGVyRm9yZWlnbk9iamVjdChTVkdGb3JlaWduT2JqZWN0RWxlbWVudCogbm9k
ZSkgCisgICAgOiBSZW5kZXJTVkdCbG9jayhub2RlKQorICAgICwgbV9uZWVkc1RyYW5zZm9ybVVw
ZGF0ZSh0cnVlKQoreworfQorCitSZW5kZXJGb3JlaWduT2JqZWN0Ojp+UmVuZGVyRm9yZWlnbk9i
amVjdCgpCit7Cit9CisKK3ZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGludCwgaW50KQoreworICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBQYWludEluZm8gY2hpbGRQ
YWludEluZm8ocGFpbnRJbmZvKTsKKyAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7
CisgICAgY2hpbGRQYWludEluZm8uYXBwbHlUcmFuc2Zvcm0obG9jYWxUcmFuc2Zvcm0oKSk7CisK
KyAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlzKSkKKyAgICAg
ICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+Y2xpcChtX3ZpZXdwb3J0KTsKKworICAgIGZsb2F0
IG9wYWNpdHkgPSBzdHlsZSgpLT5vcGFjaXR5KCk7CisgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQor
ICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9w
YWNpdHkpOworCisgICAgUmVuZGVyQmxvY2s6OnBhaW50KGNoaWxkUGFpbnRJbmZvLCAwLCAwKTsK
KworICAgIGlmIChvcGFjaXR5IDwgMS4wZikKKyAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4
dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQt
PnJlc3RvcmUoKTsKK30KKworSW50UmVjdCBSZW5kZXJGb3JlaWduT2JqZWN0OjpjbGlwcGVkT3Zl
cmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
cikKK3sKKyAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQodGhpcywgcmVwYWludENvbnRhaW5lcik7Cit9CisKK3ZvaWQgUmVuZGVyRm9yZWln
bk9iamVjdDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyLCBJbnRSZWN0JiByZXBhaW50UmVjdCwgYm9vbCBmaXhlZCkKK3sKKyAgICBT
VkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWludENvbnRh
aW5lciwgcmVwYWludFJlY3QsIGZpeGVkKTsKK30KKworY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBS
ZW5kZXJGb3JlaWduT2JqZWN0Ojpsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QKK3sKKyAg
ICBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm0gPSBsb2NhbFRyYW5zZm9ybSgpOworICAgIG1fbG9j
YWxUb1BhcmVudFRyYW5zZm9ybS50cmFuc2xhdGUobV92aWV3cG9ydC54KCksIG1fdmlld3BvcnQu
eSgpKTsKKyAgICByZXR1cm4gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOworfQorCit2b2lkIFJl
bmRlckZvcmVpZ25PYmplY3Q6OmNvbXB1dGVMb2dpY2FsV2lkdGgoKQoreworICAgIC8vIEZJWE1F
OiBJbnZlc3RpZ2F0ZSBpbiBzaXplIHJvdW5kaW5nIGlzc3VlcworICAgIHNldFdpZHRoKHN0YXRp
Y19jYXN0PGludD4ocm91bmRmKG1fdmlld3BvcnQud2lkdGgoKSkpKTsKK30KKwordm9pZCBSZW5k
ZXJGb3JlaWduT2JqZWN0Ojpjb21wdXRlTG9naWNhbEhlaWdodCgpCit7CisgICAgLy8gRklYTUU6
IEludmVzdGlnYXRlIGluIHNpemUgcm91bmRpbmcgaXNzdWVzCisgICAgc2V0SGVpZ2h0KHN0YXRp
Y19jYXN0PGludD4ocm91bmRmKG1fdmlld3BvcnQuaGVpZ2h0KCkpKSk7Cit9CisKK3ZvaWQgUmVu
ZGVyRm9yZWlnbk9iamVjdDo6bGF5b3V0KCkKK3sKKyAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7
CisgICAgQVNTRVJUKCF2aWV3KCktPmxheW91dFN0YXRlRW5hYmxlZCgpKTsgLy8gUmVuZGVyU1ZH
Um9vdCBkaXNhYmxlcyBsYXlvdXRTdGF0ZSBmb3IgdGhlIFNWRyByZW5kZXJpbmcgdHJlZS4KKwor
ICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmlu
Z0xheW91dCgpKTsKKyAgICBTVkdGb3JlaWduT2JqZWN0RWxlbWVudCogZm9yZWlnbiA9IHN0YXRp
Y19jYXN0PFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Kj4obm9kZSgpKTsKKworICAgIGJvb2wgdXBk
YXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IGZhbHNlOworICAgIGlmIChtX25lZWRzVHJh
bnNmb3JtVXBkYXRlKSB7CisgICAgICAgIG1fbG9jYWxUcmFuc2Zvcm0gPSBmb3JlaWduLT5hbmlt
YXRlZExvY2FsVHJhbnNmb3JtKCk7CisgICAgICAgIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSBm
YWxzZTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7Cisg
ICAgfQorCisgICAgRmxvYXRSZWN0IG9sZFZpZXdwb3J0ID0gbV92aWV3cG9ydDsKKworICAgIC8v
IENhY2hlIHZpZXdwb3J0IGJvdW5kYXJpZXMKKyAgICBGbG9hdFBvaW50IHZpZXdwb3J0TG9jYXRp
b24oZm9yZWlnbi0+eCgpLnZhbHVlKGZvcmVpZ24pLCBmb3JlaWduLT55KCkudmFsdWUoZm9yZWln
bikpOworICAgIG1fdmlld3BvcnQgPSBGbG9hdFJlY3Qodmlld3BvcnRMb2NhdGlvbiwgRmxvYXRT
aXplKGZvcmVpZ24tPndpZHRoKCkudmFsdWUoZm9yZWlnbiksIGZvcmVpZ24tPmhlaWdodCgpLnZh
bHVlKGZvcmVpZ24pKSk7CisgICAgaWYgKCF1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRz
KQorICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gb2xkVmlld3BvcnQg
IT0gbV92aWV3cG9ydDsKKworICAgIC8vIFNldCBib3ggb3JpZ2luIHRvIHRoZSBmb3JlaWduT2Jq
ZWN0IHgveSB0cmFuc2xhdGlvbiwgc28gcG9zaXRpb25lZCBvYmplY3RzIGluIFhIVE1MIGNvbnRl
bnQgZ2V0IGNvcnJlY3QKKyAgICAvLyBwb3NpdGlvbnMuIEEgcmVndWxhciBSZW5kZXJCb3hNb2Rl
bE9iamVjdCB3b3VsZCBwdWxsIHRoaXMgaW5mb3JtYXRpb24gZnJvbSBSZW5kZXJTdHlsZSAtIGlu
IFNWRyB0aG9zZQorICAgIC8vIHByb3BlcnRpZXMgYXJlIGlnbm9yZWQgZm9yIG5vbiA8c3ZnPiBl
bGVtZW50cywgc28gd2UgbWltaWMgd2hhdCBoYXBwZW5zIHdoZW4gc3BlY2lmeWluZyB0aGVtIHRo
cm91Z2ggQ1NTLgorCisgICAgLy8gRklYTUU6IEludmVzdGlnYXRlIGluIGxvY2F0aW9uIHJvdW5k
aW5nIGlzc3VlcyAtIG9ubHkgYWZmZWN0cyBSZW5kZXJGb3JlaWduT2JqZWN0ICYgUmVuZGVyU1ZH
VGV4dAorICAgIHNldExvY2F0aW9uKHJvdW5kZWRJbnRQb2ludCh2aWV3cG9ydExvY2F0aW9uKSk7
CisKKyAgICBib29sIGxheW91dENoYW5nZWQgPSBtX2V2ZXJIYWRMYXlvdXQgJiYgc2VsZk5lZWRz
TGF5b3V0KCk7CisgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOworICAgIEFTU0VSVCghbmVlZHNM
YXlvdXQoKSk7CisKKyAgICAvLyBJZiBvdXIgYm91bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUgcGFy
ZW50cy4KKyAgICBpZiAodXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cykKKyAgICAgICAg
UmVuZGVyU1ZHQmxvY2s6OnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOworCisgICAgLy8gSW52
YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIG9mIHRoaXMgY2xpZW50IGlmIG91ciBsYXlvdXQgY2hhbmdl
ZC4KKyAgICBpZiAobGF5b3V0Q2hhbmdlZCkKKyAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNs
aWVudExheW91dENoYW5nZWQodGhpcyk7CisKKyAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5
b3V0KCk7Cit9CisKK2Jvb2wgUmVuZGVyRm9yZWlnbk9iamVjdDo6bm9kZUF0RmxvYXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24p
Cit7CisgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUcmFuc2Zvcm0oKS5pbnZlcnNl
KCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisKKyAgICAvLyBFYXJseSBleGl0IGlmIGxvY2Fs
IHBvaW50IGlzIG5vdCBjb250YWluZWQgaW4gY2xpcHBlZCB2aWV3cG9ydCBhcmVhCisgICAgaWYg
KFNWR1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4odGhpcykgJiYgIW1fdmlld3BvcnQu
Y29udGFpbnMobG9jYWxQb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFBv
aW50IHJvdW5kZWRMb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpOworICAg
IHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCByb3VuZGVk
TG9jYWxQb2ludC54KCksIHJvdW5kZWRMb2NhbFBvaW50LnkoKSwgMCwgMCwgaGl0VGVzdEFjdGlv
bik7Cit9CisKK2Jvb2wgUmVuZGVyRm9yZWlnbk9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50LCBIaXRUZXN0
QWN0aW9uKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkLCBib29sIHVzZVRy
YW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKK3sKKyAgICAv
LyBXaGVuIGNyYXdsaW5nIHVwIHRoZSBoaWVyYWNoeSBzdGFydGluZyBmcm9tIGZvcmVpZ25PYmpl
Y3QgY2hpbGQgY29udGVudCwgdXNlVHJhbnNmb3JtcyBtYXkgbm90IGJlIHNldCB0byB0cnVlLgor
ICAgIGlmICghdXNlVHJhbnNmb3JtcykKKyAgICAgICAgdXNlVHJhbnNmb3JtcyA9IHRydWU7Cisg
ICAgU1ZHUmVuZGVyU3VwcG9ydDo6bWFwTG9jYWxUb0NvbnRhaW5lcih0aGlzLCByZXBhaW50Q29u
dGFpbmVyLCBmaXhlZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOworfQorCit9CisK
KyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWdu
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJGb3JlaWduT2JqZWN0LmgJKHJldmlzaW9uIDc1MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oOjc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRlckZvcmVp
Z25PYmplY3RfaAorI2RlZmluZSBSZW5kZXJGb3JlaWduT2JqZWN0X2gKKworI2lmIEVOQUJMRShT
VkcpICYmIEVOQUJMRShTVkdfRk9SRUlHTl9PQkpFQ1QpCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0Jsb2Nr
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHRm9yZWlnbk9iamVjdEVsZW1l
bnQ7CisKK2NsYXNzIFJlbmRlckZvcmVpZ25PYmplY3QgOiBwdWJsaWMgUmVuZGVyU1ZHQmxvY2sg
eworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlckZvcmVpZ25PYmplY3QoU1ZHRm9yZWlnbk9i
amVjdEVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJGb3JlaWduT2JqZWN0KCk7CisKKyAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
Rm9yZWlnbk9iamVjdCI7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBp
bnQgcGFyZW50WCwgaW50IHBhcmVudFkpOworCisgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNl
KTsKKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVj
dCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnQ7IH0KKyAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdmll
d3BvcnQ7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnQ7IH0KKworICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNTVkdGb3JlaWduT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5z
Zm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzVHJhbnNmb3JtVXBkYXRlKCkgeyBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQor
CisgcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxXaWR0aCgpOworICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodCgpOworCisgICAgdmlydHVhbCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9jYWxUcmFuc2Zvcm07IH0KKworICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7
CisgICAgRmxvYXRSZWN0IG1fdmlld3BvcnQ7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxU
cmFuc2Zvcm07CisgICAgbXV0YWJsZSBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRvUGFyZW50VHJh
bnNmb3JtOworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmgJKHJldmlzaW9uIDc1
MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJGb3JlaWduT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdGb3JlaWduT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
dmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9y
bVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIG1hcExvY2Fs
VG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wg
Zml4ZWQgLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJikgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgeyBtX25lZWRzVHJhbnNmb3Jt
VXBkYXRlID0gdHJ1ZTsgfQogCiAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCShyZXZpc2lvbiA3NTM0NykJ
KGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0FsbEluT25lLmNwcDo3NTM0
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworLy8gVGhpcyBhbGwtaW4tb25lIGNwcCBmaWxl
IGN1dHMgZG93biBvbiB0ZW1wbGF0ZSBibG9hdCB0byBhbGxvdyB1cyB0byBidWlsZCBvdXIgV2lu
ZG93cyByZWxlYXNlIGJ1aWxkLgorCisjaW5jbHVkZSAiUmVuZGVyU1ZHQmxvY2suY3BwIgorI2lu
Y2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHR3JhZGll
bnRTdG9wLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwIgorI2lu
Y2x1ZGUgIlJlbmRlclNWR0ltYWdlLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVj
dC5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuY3BwIgorI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlQ2xpcHBlci5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCIKKyNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VM
aW5lYXJHcmFkaWVudC5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3Bw
IgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCIKKyNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFk
aWFsR3JhZGllbnQuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5j
cHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hh
ZG93VHJlZVJvb3RDb250YWluZXIuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1RyYW5zZm9ybWFi
bGVDb250YWluZXIuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNw
cCIKKyNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcCIKKyNpbmNsdWRlICJTVkdNYXJr
ZXJMYXlvdXRJbmZvLmNwcCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmNwcCIKKyNpbmNs
dWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXMuY3Bw
IgorI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmNwcCIKKyNpbmNsdWRlICJTVkdSZXNvdXJj
ZXNDeWNsZVNvbHZlci5jcHAiCisjaW5jbHVkZSAiU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCIK
KworLy8gRklYTUU6IEFzIHNvb24gYXMgYWxsIFNWRyByZW5kZXJlcnMgbGl2ZSBpbiByZW5kZXJp
bmcvc3ZnLCB0aGlzIGZpbGUgc2hvdWxkIGJlIG1vdmVkIHRoZXJlIGFzIHdlbGwsIHJlbW92aW5n
IHRoZSBuZWVkIGZvciB0aGUgc3ZnLyBpbmNsdWRlcyBiZWxvdy4KKyNpbmNsdWRlICJzdmcvUmVu
ZGVyU1ZHSW5saW5lLmNwcCIKKyNpbmNsdWRlICJzdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAi
CisjaW5jbHVkZSAic3ZnL1JlbmRlclNWR1RTcGFuLmNwcCIKKyNpbmNsdWRlICJzdmcvUmVuZGVy
U1ZHVGV4dC5jcHAiCisjaW5jbHVkZSAic3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcCIKKyNpbmNs
dWRlICJzdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAiCisjaW5jbHVkZSAic3ZnL1NWR0lubGluZVRl
eHRCb3guY3BwIgorI2luY2x1ZGUgInN2Zy9TVkdSb290SW5saW5lQm94LmNwcCIKKyNpbmNsdWRl
ICJzdmcvU1ZHVGV4dENodW5rLmNwcCIKKyNpbmNsdWRlICJzdmcvU1ZHVGV4dENodW5rQnVpbGRl
ci5jcHAiCisjaW5jbHVkZSAic3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmNwcCIKKyNpbmNs
dWRlICJzdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCIKKyNpbmNsdWRlICJz
dmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAiCisjaW5jbHVkZSAic3ZnL1NWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZS5jcHAiCisjaW5jbHVkZSAic3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFj
aW5nLmNwcCIKKyNpbmNsdWRlICJzdmcvU1ZHVGV4dE1ldHJpY3MuY3BwIgorI2luY2x1ZGUgInN2
Zy9TVkdUZXh0UXVlcnkuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDc1MzQ3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3Bw
IgogI2luY2x1ZGUgIlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHSW1hZ2UuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5jcHAiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmNwcCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIgpAQCAtNDUsMzIgKzQ3LDI4IEBACiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290
LmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHAiCisj
aW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4uY3BwIgorI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuY3Bw
IgorI2luY2x1ZGUgIlJlbmRlclNWR1RleHRQYXRoLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdU
cmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTVkdWaWV3cG9ydENv
bnRhaW5lci5jcHAiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAiCisjaW5jbHVk
ZSAiU1ZHSW5saW5lRmxvd0JveC5jcHAiCisjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5jcHAi
CiAjaW5jbHVkZSAiU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAiCiAjaW5jbHVkZSAiU1ZHUmVuZGVy
U3VwcG9ydC5jcHAiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAiCiAjaW5jbHVk
ZSAiU1ZHUmVzb3VyY2VzLmNwcCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5jcHAiCiAj
aW5jbHVkZSAiU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwIgorI2luY2x1ZGUgIlNWR1Jvb3RJ
bmxpbmVCb3guY3BwIgogI2luY2x1ZGUgIlNWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAiCi0KLS8v
IEZJWE1FOiBBcyBzb29uIGFzIGFsbCBTVkcgcmVuZGVyZXJzIGxpdmUgaW4gcmVuZGVyaW5nL3N2
ZywgdGhpcyBmaWxlIHNob3VsZCBiZSBtb3ZlZCB0aGVyZSBhcyB3ZWxsLCByZW1vdmluZyB0aGUg
bmVlZCBmb3IgdGhlIHN2Zy8gaW5jbHVkZXMgYmVsb3cuCi0jaW5jbHVkZSAic3ZnL1JlbmRlclNW
R0lubGluZS5jcHAiCi0jaW5jbHVkZSAic3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwIgotI2lu
Y2x1ZGUgInN2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAiCi0jaW5jbHVkZSAic3ZnL1JlbmRlclNWR1Rl
eHQuY3BwIgotI2luY2x1ZGUgInN2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAiCi0jaW5jbHVkZSAi
c3ZnL1NWR0lubGluZUZsb3dCb3guY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZHUm9vdElubGluZUJveC5jcHAiCi0jaW5jbHVkZSAic3Zn
L1NWR1RleHRDaHVuay5jcHAiCi0jaW5jbHVkZSAic3ZnL1NWR1RleHRDaHVua0J1aWxkZXIuY3Bw
IgotI2luY2x1ZGUgInN2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAiCi0jaW5jbHVkZSAi
c3ZnL1NWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAiCi0jaW5jbHVkZSAic3ZnL1NW
R1RleHRMYXlvdXRFbmdpbmUuY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdUZXh0TGF5b3V0RW5naW5l
QmFzZWxpbmUuY3BwIgotI2luY2x1ZGUgInN2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5j
cHAiCi0jaW5jbHVkZSAic3ZnL1NWR1RleHRNZXRyaWNzLmNwcCIKLSNpbmNsdWRlICJzdmcvU1ZH
VGV4dFF1ZXJ5LmNwcCIKKyNpbmNsdWRlICJTVkdUZXh0Q2h1bmsuY3BwIgorI2luY2x1ZGUgIlNW
R1RleHRDaHVua0J1aWxkZXIuY3BwIgorI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
LmNwcCIKKyNpbmNsdWRlICJTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwIgorI2lu
Y2x1ZGUgIlNWR1RleHRMYXlvdXRFbmdpbmUuY3BwIgorI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZS5jcHAiCisjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcu
Y3BwIgorI2luY2x1ZGUgIlNWR1RleHRNZXRyaWNzLmNwcCIKKyNpbmNsdWRlICJTVkdUZXh0UXVl
cnkuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdCbG9jay5jcHAJKHJldmlzaW9uIDc1MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHQmxvY2suY3BwOjc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNs
dWRlICJSZW5kZXJTVkdCbG9jay5oIgorCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIK
KyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVy
U1ZHQmxvY2s6OlJlbmRlclNWR0Jsb2NrKFNWR0VsZW1lbnQqIG5vZGUpIAorICAgIDogUmVuZGVy
QmxvY2sobm9kZSkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdCbG9jazo6c2V0U3R5bGUoUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUpIAoreworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gdXNl
U3R5bGUgPSBzdHlsZTsKKworICAgIC8vIFNWRyB0ZXh0IGxheW91dCBjb2RlIGV4cGVjdHMgdXMg
dG8gYmUgYSBibG9jay1sZXZlbCBzdHlsZSBlbGVtZW50LiAgIAorICAgIGlmICh1c2VTdHlsZS0+
aXNEaXNwbGF5SW5saW5lVHlwZSgpKSB7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3
U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgICAgIG5ld1N0eWxlLT5pbmhlcml0
RnJvbSh1c2VTdHlsZS5nZXQoKSk7CisgICAgICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KEJMT0NL
KTsKKyAgICAgICAgdXNlU3R5bGUgPSBuZXdTdHlsZS5yZWxlYXNlKCk7CisgICAgfQorCisgICAg
UmVuZGVyQmxvY2s6OnNldFN0eWxlKHVzZVN0eWxlLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHQmxvY2s6OnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgpCit7CisgICAgUmVuZGVy
QmxvY2s6OnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgpOworCisgICAgLy8gUmVuZGVyU1ZH
bG9jaywgdXNlZCBieSBSZW5kZXIoU1ZHVGV4dHxGb3JlaWduT2JqZWN0KSwgaXMgbm90IGFsbG93
ZWQgdG8gY2FsbCBzZXRIYXNPdmVyZmxvd0NsaXAodHJ1ZSkuCisgICAgLy8gUmVuZGVyQmxvY2sg
YXNzdW1lcyBhIGxheWVyIHRvIGJlIHByZXNlbnQgd2hlbiB0aGUgb3ZlcmZsb3cgY2xpcCBmdW5j
dGlvbmFsaXR5IGlzIHJlcXVlc3RlZC4gQm90aAorICAgIC8vIFJlbmRlcihTVkdUZXh0fEZvcmVp
Z25PYmplY3QpIHJldHVybiAnZmFsc2UnIG9uICdyZXF1aXJlc0xheWVyJy4gRmluZSBmb3IgUmVu
ZGVyU1ZHVGV4dC4KKyAgICAvLworICAgIC8vIElmIHdlIHdhbnQgdG8gc3VwcG9ydCBvdmVyZmxv
dyBydWxlcyBmb3IgPGZvcmVpZ25PYmplY3Q+IHdlIGNhbiBjaG9vc2UgYmV0d2VlbiB0d28gc29s
dXRpb25zOgorICAgIC8vIGEpIG1ha2UgUmVuZGVyRm9yZWlnbk9iamVjdCByZXF1aXJlIGxheWVy
cyBhbmQgU1ZHIGxheWVyIGF3YXJlCisgICAgLy8gYikgcmVhY3RvciBvdmVyZmxvdyBsb2dpYyBv
dXQgb2YgUmVuZGVyTGF5ZXIgKGFzIHN1Z2dlc3RlZCBieSBkaHlhdHQpLCB3aGljaCBpcyBhIGxh
cmdlIHRhc2sKKyAgICAvLworICAgIC8vIFVudGlsIHRoaXMgaXMgcmVzb2x2ZWQsIGRpc2FibGUg
b3ZlcmZsb3cgc3VwcG9ydC4gT3BlcmEvRkYgZG9uJ3Qgc3VwcG9ydCBpdCBhcyB3ZWxsIGF0IHRo
ZSBtb21lbnQgKEZlYiAyMDEwKS4KKyAgICAvLworICAgIC8vIE5vdGU6IFRoaXMgZG9lcyBOT1Qg
YWZmZWN0IG92ZXJmbG93IGhhbmRsaW5nIG9uIG91dGVyL2lubmVyIDxzdmc+IGVsZW1lbnRzIC0g
dGhpcyBpcyBoYW5kbGVkCisgICAgLy8gbWFudWFsbHkgYnkgUmVuZGVyU1ZHUm9vdCAtIHdoaWNo
IG93bnMgdGhlIGRvY3VtZW50cyBlbmNsb3Npbmcgcm9vdCBsYXllciBhbmQgdGh1cyB3b3JrcyBm
aW5lLgorICAgIHNldEhhc092ZXJmbG93Q2xpcChmYWxzZSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZH
QmxvY2s6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50LCBpbnQpCit7CisgICAg
Ly8gVGhpcyBjb2RlIHBhdGggc2hvdWxkIG5ldmVyIGJlIHRha2VuIGZvciBTVkcsIGFzIHdlJ3Jl
IGFzc3VtaW5nIHVzZVRyYW5zZm9ybXM9dHJ1ZSBldmVyeXdoZXJlLCBhYnNvbHV0ZVF1YWRzIHNo
b3VsZCBiZSB1c2VkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFJlbmRl
clNWR0Jsb2NrOjpkZXN0cm95KCkKK3sKKyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50RGVz
dHJveWVkKHRoaXMpOworICAgIFJlbmRlckJsb2NrOjpkZXN0cm95KCk7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHQmxvY2s6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3Qg
UmVuZGVyU3R5bGUqIG5ld1N0eWxlKQoreworICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5j
ZUxheW91dCkKKyAgICAgICAgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisgICAgUmVuZGVy
QmxvY2s6OnN0eWxlV2lsbENoYW5nZShkaWZmLCBuZXdTdHlsZSk7Cit9CisKK3ZvaWQgUmVuZGVy
U1ZHQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUpCit7CisgICAgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKGRp
ZmYsIG9sZFN0eWxlKTsKKyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2Vk
KHRoaXMsIGRpZmYsIHN0eWxlKCkpOworfQorCit2b2lkIFJlbmRlclNWR0Jsb2NrOjp1cGRhdGVG
cm9tRWxlbWVudCgpCit7CisgICAgUmVuZGVyQmxvY2s6OnVwZGF0ZUZyb21FbGVtZW50KCk7Cisg
ICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFVwZGF0ZWRGcm9tRWxlbWVudCh0aGlzLCBzdHls
ZSgpKTsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmgJKHJldmlzaW9uIDc1MzQ3KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suaDo3NTM0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgUmVuZGVyU1ZHQmxvY2tfaAorI2RlZmluZSBSZW5kZXJTVkdCbG9ja19oCisKKyNpZiBF
TkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVy
U3VwcG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0VsZW1lbnQ7CisK
K2NsYXNzIFJlbmRlclNWR0Jsb2NrIDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBSZW5kZXJTVkdCbG9jayhTVkdFbGVtZW50Kik7CisKK3ByaXZhdGU6CisgICAg
dmlydHVhbCB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+KTsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQm94TW9kZWxJbmZvRnJvbVN0eWxlKCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOworICAgIHZp
cnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7Cit9
OworCit9CisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNpb24gNzUzNDcpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwOjc1MzQ3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZH
Q29udGFpbmVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgi
CisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIK
KyNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHQ29udGFpbmVyOjpSZW5kZXJTVkdD
b250YWluZXIoU1ZHU3R5bGVkRWxlbWVudCogbm9kZSkKKyAgICA6IFJlbmRlclNWR01vZGVsT2Jq
ZWN0KG5vZGUpCisgICAgLCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSh0cnVlKQoreworfQorCitS
ZW5kZXJTVkdDb250YWluZXI6On5SZW5kZXJTVkdDb250YWluZXIoKQoreworfQorCit2b2lkIFJl
bmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0KCkKK3sKKyAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7
CisKKyAgICAvLyBSZW5kZXJTVkdSb290IGRpc2FibGVzIGxheW91dFN0YXRlIGZvciB0aGUgU1ZH
IHJlbmRlcmluZyB0cmVlLgorICAgIEFTU0VSVCghdmlldygpLT5sYXlvdXRTdGF0ZUVuYWJsZWQo
KSk7CisKKyAgICAvLyBBbGxvdyBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciB0byB1cGRhdGUg
aXRzIHZpZXdwb3J0LgorICAgIGNhbGNWaWV3cG9ydCgpOworCisgICAgTGF5b3V0UmVwYWludGVy
IHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgfHwgc2VsZldp
bGxQYWludCgpKTsKKworICAgIC8vIEFsbG93IFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWlu
ZXIgdG8gdXBkYXRlIGl0cyB0cmFuc2Zvcm0uCisgICAgYm9vbCB1cGRhdGVkVHJhbnNmb3JtID0g
Y2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKTsKKworICAgIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91
dENoaWxkcmVuKHRoaXMsIHNlbGZOZWVkc0xheW91dCgpKTsKKworICAgIC8vIEludmFsaWRhdGUg
YWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCisgICAg
aWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkKKyAgICAgICAgU1ZHUmVz
b3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7CisKKyAgICAvLyBBdCB0aGlz
IHBvaW50IExheW91dFJlcGFpbnRlciBhbHJlYWR5IGdyYWJiZWQgdGhlIG9sZCBib3VuZHMsCisg
ICAgLy8gcmVjYWxjdWxhdGUgdGhlbSBub3cgc28gcmVwYWludEFmdGVyTGF5b3V0KCkgdXNlcyB0
aGUgbmV3IGJvdW5kcy4KKyAgICBpZiAobV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgfHwgdXBkYXRl
ZFRyYW5zZm9ybSkgeworICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7CisgICAgICAg
IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gZmFsc2U7CisgICAgCisgICAgICAgIC8vIElmIG91
ciBib3VuZHMgY2hhbmdlZCwgbm90aWZ5IHRoZSBwYXJlbnRzLgorICAgICAgICBSZW5kZXJTVkdN
b2RlbE9iamVjdDo6c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisgICAgfQorCisgICAgcmVw
YWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOworICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsK
K30KKworYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OnNlbGZXaWxsUGFpbnQoKQoreworI2lmIEVO
QUJMRShGSUxURVJTKQorICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2Vz
Q2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlzKTsKKyAgICByZXR1cm4g
cmVzb3VyY2VzICYmIHJlc291cmNlcy0+ZmlsdGVyKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGludCwgaW50KQoreworICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTcGVjOiBncm91cHMg
dy9vIGNoaWxkcmVuIHN0aWxsIG1heSByZW5kZXIgZmlsdGVyIGNvbnRlbnQuCisgICAgaWYgKCFm
aXJzdENoaWxkKCkgJiYgIXNlbGZXaWxsUGFpbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
RmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsK
KyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVj
dChyZXBhaW50UmVjdCwgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLCBwYWludEluZm8pKQorICAg
ICAgICByZXR1cm47CisKKyAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsK
KyAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisKKyAgICAvLyBMZXQgdGhlIFJl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyIHN1YmNsYXNzIGNsaXAgaWYgbmVjZXNzYXJ5CisgICAg
YXBwbHlWaWV3cG9ydENsaXAoY2hpbGRQYWludEluZm8pOworCisgICAgY2hpbGRQYWludEluZm8u
YXBwbHlUcmFuc2Zvcm0obG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpKTsKKworICAgIGJvb2wgY29u
dGludWVSZW5kZXJpbmcgPSB0cnVlOworICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlRm9yZWdyb3VuZCkKKyAgICAgICAgY29udGludWVSZW5kZXJpbmcgPSBTVkdSZW5k
ZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZv
KTsKKworICAgIGlmIChjb250aW51ZVJlbmRlcmluZykgeworICAgICAgICBjaGlsZFBhaW50SW5m
by51cGRhdGVQYWludGluZ1Jvb3RGb3JDaGlsZHJlbih0aGlzKTsKKyAgICAgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkKKyAgICAgICAgICAgIGNoaWxkLT5wYWludChjaGlsZFBhaW50SW5mbywgMCwg
MCk7CisgICAgfQorCisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdy
b3VuZCkKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ29udGVudCh0
aGlzLCBjaGlsZFBhaW50SW5mbywgcGFpbnRJbmZvLmNvbnRleHQpOworCisgICAgY2hpbGRQYWlu
dEluZm8uY29udGV4dC0+cmVzdG9yZSgpOworCisgICAgLy8gRklYTUU6IFRoaXMgcmVhbGx5IHNo
b3VsZCBiZSBkcmF3biBmcm9tIGxvY2FsIGNvb3JkaW5hdGVzLCBidXQgY3VycmVudGx5IHdlIGhh
Y2sgaXQKKyAgICAvLyB0byBhdm9pZCBvdXIgY2xpcCBraWxsaW5nIG91ciBvdXRsaW5lIHJlY3Qu
ICBUaHVzIHdlIHRyYW5zbGF0ZSBvdXIKKyAgICAvLyBvdXRsaW5lIHJlY3QgaW50byBwYXJlbnQg
Y29vcmRzIGJlZm9yZSBkcmF3aW5nLgorICAgIC8vIEZJWE1FOiBUaGlzIG1lYW5zIG91ciBmb2N1
cyByaW5nIHdvbid0IHNoYXJlIG91ciByb3RhdGlvbiBsaWtlIGl0IHNob3VsZC4KKyAgICAvLyBX
ZSBzaG91bGQgaW5zdGVhZCBkaXNhYmxlIG91ciBjbGlwIGR1cmluZyBQYWludFBoYXNlT3V0bGlu
ZQorICAgIGlmICgocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpICYmIHN0eWxlKCktPm91dGxpbmVX
aWR0aCgpICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSB7CisgICAgICAgIElu
dFJlY3QgcGFpbnRSZWN0SW5QYXJlbnQgPSBlbmNsb3NpbmdJbnRSZWN0KGxvY2FsVG9QYXJlbnRU
cmFuc2Zvcm0oKS5tYXBSZWN0KHJlcGFpbnRSZWN0KSk7CisgICAgICAgIHBhaW50T3V0bGluZShw
YWludEluZm8uY29udGV4dCwgcGFpbnRSZWN0SW5QYXJlbnQueCgpLCBwYWludFJlY3RJblBhcmVu
dC55KCksIHBhaW50UmVjdEluUGFyZW50LndpZHRoKCksIHBhaW50UmVjdEluUGFyZW50LmhlaWdo
dCgpKTsKKyAgICB9Cit9CisKKy8vIGFkZEZvY3VzUmluZ1JlY3RzIGlzIGNhbGxlZCBmcm9tIHBh
aW50T3V0bGluZSBhbmQgbmVlZHMgdG8gYmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZXMgYXMgdGhl
IHBhaW50T3VsaW5lIGNhbGwKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphZGRGb2N1c1JpbmdS
ZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQsIGludCkKK3sKKyAgICBJbnRSZWN0IHBh
aW50UmVjdEluUGFyZW50ID0gZW5jbG9zaW5nSW50UmVjdChsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KCkubWFwUmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7CisgICAgaWYgKCFw
YWludFJlY3RJblBhcmVudC5pc0VtcHR5KCkpCisgICAgICAgIHJlY3RzLmFwcGVuZChwYWludFJl
Y3RJblBhcmVudCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjp1cGRhdGVDYWNoZWRC
b3VuZGFyaWVzKCkKK3sKKyAgICBtX29iamVjdEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Cisg
ICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIG1fcmVwYWludEJvdW5k
aW5nQm94ID0gRmxvYXRSZWN0KCk7CisKKyAgICBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29u
dGFpbmVyQm91bmRpbmdCb3hlcyh0aGlzLCBtX29iamVjdEJvdW5kaW5nQm94LCBtX3N0cm9rZUJv
dW5kaW5nQm94LCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6
aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5n
Qm94KTsKK30KKworYm9vbCBSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdEZsb2F0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQor
eworICAgIC8vIEdpdmUgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgYSBjaGFuY2UgdG8gYXBw
bHkgaXRzIHZpZXdwb3J0IGNsaXAKKyAgICBpZiAoIXBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAo
cG9pbnRJblBhcmVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZsb2F0UG9pbnQg
bG9jYWxQb2ludCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQo
cG9pbnRJblBhcmVudCk7CisKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlw
cGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CisgICAgICAgIGlmIChj
aGlsZC0+bm9kZUF0RmxvYXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2FsUG9pbnQsIGhpdFRl
c3RBY3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91
bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gU3BlYzogT25seSBncmFwaGljYWwgZWxlbWVudHMgY2Fu
IGJlIHRhcmdldGVkIGJ5IHRoZSBtb3VzZSwgcGVyaW9kLgorICAgIC8vIDE2LjQ6ICJJZiB0aGVy
ZSBhcmUgbm8gZ3JhcGhpY3MgZWxlbWVudHMgd2hvc2UgcmVsZXZhbnQgZ3JhcGhpY3MgY29udGVu
dCBpcyB1bmRlciB0aGUgcG9pbnRlciAoaS5lLiwgdGhlcmUgaXMgbm8gdGFyZ2V0IGVsZW1lbnQp
LCB0aGUgZXZlbnQgaXMgbm90IGRpc3BhdGNoZWQuIgorICAgIHJldHVybiBmYWxzZTsKK30KKwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAkocmV2aXNpb24gNzUzNDcpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaDo3NTM0NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFJlbmRlclNWR0NvbnRhaW5lcl9oCisjZGVmaW5lIFJlbmRlclNWR0NvbnRhaW5lcl9oCisKKyNp
ZiBFTkFCTEUoU1ZHKQorCisjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdFbGVtZW50OworCitjbGFzcyBSZW5kZXJTVkdD
b250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgeworcHVibGljOgorICAgIGV4
cGxpY2l0IFJlbmRlclNWR0NvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50Kik7CisgICAgdmlydHVh
bCB+UmVuZGVyU1ZHQ29udGFpbmVyKCk7CisKKyAgICBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExp
c3QqIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KKyAgICBSZW5kZXJP
YmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KKworICAg
IHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkp
OworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNC
b3VuZGFyaWVzVXBkYXRlID0gdHJ1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBSZW5k
ZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsgcmV0dXJuIGNoaWxkcmVuKCk7
IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQorCisgICAgdmlydHVhbCBib29sIGlz
U1ZHQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdDb250YWluZXIiOyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9j
dXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworCisgICAgdmly
dHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVj
dEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBGbG9h
dFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3Jl
cGFpbnRCb3VuZGluZ0JveDsgfQorCisgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisKKyAgICAvLyBBbGxvdyBSZW5kZXJTVkdU
cmFuc2Zvcm1hYmxlQ29udGFpbmVyIHRvIGhvb2sgaW4gYXQgdGhlIHJpZ2h0IHRpbWUgaW4gbGF5
b3V0KCkKKyAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKSB7IHJldHVy
biBmYWxzZTsgfQorCisgICAgLy8gQWxsb3cgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgdG8g
aG9vayBpbiBhdCB0aGUgcmlnaHQgdGltZXMgaW4gbGF5b3V0KCksIHBhaW50KCkgYW5kIG5vZGVB
dEZsb2F0UG9pbnQoKQorICAgIHZpcnR1YWwgdm9pZCBjYWxjVmlld3BvcnQoKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlWaWV3cG9ydENsaXAoUGFpbnRJbmZvJikgeyB9CisgICAgdmlydHVh
bCBib29sIHBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29uc3QgRmxvYXRQb2ludCYgLypwb2lu
dEluUGFyZW50Ki8pIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgc2VsZldpbGxQYWludCgp
OworICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOworCitwcml2YXRlOgorICAgIFJl
bmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOworICAgIEZsb2F0UmVjdCBtX29iamVjdEJv
dW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94OworICAgIEZsb2F0
UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAgICBib29sIG1fbmVlZHNCb3VuZGFyaWVzVXBk
YXRlIDogMTsKK307CisgIAoraW5saW5lIFJlbmRlclNWR0NvbnRhaW5lciogdG9SZW5kZXJTVkdD
b250YWluZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgLy8gTm90ZTogaXNTVkdDb250
YWluZXIgaXMgYWxzbyB0cnVlIGZvciBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciwgd2hpY2gg
aXMgbm90IGRlcml2ZWQgZnJvbSB0aGlzLgorICAgIEFTU0VSVCghb2JqZWN0IHx8IChvYmplY3Qt
PmlzU1ZHQ29udGFpbmVyKCkgJiYgc3RyY21wKG9iamVjdC0+cmVuZGVyTmFtZSgpLCAiUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIiKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJT
VkdDb250YWluZXIqPihvYmplY3QpOworfQorCitpbmxpbmUgY29uc3QgUmVuZGVyU1ZHQ29udGFp
bmVyKiB0b1JlbmRlclNWR0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sK
KyAgICAvLyBOb3RlOiBpc1NWR0NvbnRhaW5lciBpcyBhbHNvIHRydWUgZm9yIFJlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyLCB3aGljaCBpcyBub3QgZGVyaXZlZCBmcm9tIHRoaXMuCisgICAgQVNT
RVJUKCFvYmplY3QgfHwgKG9iamVjdC0+aXNTVkdDb250YWluZXIoKSAmJiBzdHJjbXAob2JqZWN0
LT5yZW5kZXJOYW1lKCksICJSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciIpKSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR0NvbnRhaW5lcio+KG9iamVjdCk7Cit9CisK
Ky8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3Zv
aWQgdG9SZW5kZXJTVkdDb250YWluZXIoY29uc3QgUmVuZGVyU1ZHQ29udGFpbmVyKik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8g
UmVuZGVyU1ZHQ29udGFpbmVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAJKHJldmlzaW9uIDc1MzQ3KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcDo3
NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRT
dG9wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgi
CisKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlNW
R0dyYWRpZW50RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZH
UmVzb3VyY2VzQ2FjaGUuaCIKKyNpbmNsdWRlICJTVkdTdG9wRWxlbWVudC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CisKK1JlbmRlclNW
R0dyYWRpZW50U3RvcDo6UmVuZGVyU1ZHR3JhZGllbnRTdG9wKFNWR1N0b3BFbGVtZW50KiBlbGVt
ZW50KQorICAgIDogUmVuZGVyT2JqZWN0KGVsZW1lbnQpCit7Cit9CisKK1JlbmRlclNWR0dyYWRp
ZW50U3RvcDo6flJlbmRlclNWR0dyYWRpZW50U3RvcCgpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZH
R3JhZGllbnRTdG9wOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIFJlbmRlck9iamVjdDo6c3R5bGVEaWRDaGFu
Z2UoZGlmZiwgb2xkU3R5bGUpOworICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZUVxdWFs
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyA8c3RvcD4gZWxlbWVudHMgc2hvdWxkIG9ubHkg
YmUgYWxsb3dlZCB0byBtYWtlIHJlbmRlcmVycyB1bmRlciBncmFkaWVudCBlbGVtZW50cworICAg
IC8vIGJ1dCBJIGNhbiBpbWFnaW5lIGEgZmV3IGNhc2VzIHdlIG1pZ2h0IG5vdCBiZSBjYXRjaGlu
Zywgc28gbGV0J3Mgbm90IGNyYXNoIGlmIG91ciBwYXJlbnQgaXNuJ3QgYSBncmFkaWVudC4KKyAg
ICBTVkdHcmFkaWVudEVsZW1lbnQqIGdyYWRpZW50ID0gZ3JhZGllbnRFbGVtZW50KCk7CisgICAg
aWYgKCFncmFkaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGdyYWRpZW50LT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIEFTU0VSVChyZW5kZXJlci0+aXNTVkdSZXNvdXJjZUNvbnRhaW5lcigp
KTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogY29udGFpbmVyID0gcmVuZGVyZXIt
PnRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoKTsKKyAgICBjb250YWluZXItPnJlbW92ZUFs
bENsaWVudHNGcm9tQ2FjaGUoKTsKK30KKwordm9pZCBSZW5kZXJTVkdHcmFkaWVudFN0b3A6Omxh
eW91dCgpCit7CisgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOworfQorCitTVkdHcmFkaWVudEVs
ZW1lbnQqIFJlbmRlclNWR0dyYWRpZW50U3RvcDo6Z3JhZGllbnRFbGVtZW50KCkgY29uc3QKK3sK
KyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gbm9kZSgpLT5wYXJlbnROb2RlKCk7Cisg
ICAgaWYgKHBhcmVudE5vZGUtPmhhc1RhZ05hbWUobGluZWFyR3JhZGllbnRUYWcpIHx8IHBhcmVu
dE5vZGUtPmhhc1RhZ05hbWUocmFkaWFsR3JhZGllbnRUYWcpKQorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8U1ZHR3JhZGllbnRFbGVtZW50Kj4ocGFyZW50Tm9kZSk7CisgICAgcmV0dXJuIDA7
Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgJKHJldmlzaW9u
IDc1MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHR3JhZGllbnRT
dG9wLmg6NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dy
YWRpZW50U3RvcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdHcmFkaWVudFN0b3BfaAor
I2RlZmluZSBSZW5kZXJTVkdHcmFkaWVudFN0b3BfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3Mg
U1ZHR3JhZGllbnRFbGVtZW50OworY2xhc3MgU1ZHU3RvcEVsZW1lbnQ7CisKKy8vIFRoaXMgY2xh
c3MgZXhpc3RzIG1vc3RseSBzbyB3ZSBjYW4gaGVhciBhYm91dCBncmFkaWVudCBzdG9wIHN0eWxl
IGNoYW5nZXMKK2NsYXNzIFJlbmRlclNWR0dyYWRpZW50U3RvcCA6IHB1YmxpYyBSZW5kZXJPYmpl
Y3QgeworcHVibGljOgorICAgIFJlbmRlclNWR0dyYWRpZW50U3RvcChTVkdTdG9wRWxlbWVudCop
OworICAgIHZpcnR1YWwgflJlbmRlclNWR0dyYWRpZW50U3RvcCgpOworCisgICAgdmlydHVhbCBi
b29sIGlzU1ZHR3JhZGllbnRTdG9wKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdHcmFk
aWVudFN0b3AiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisKKyAgICAvLyBUaGlz
IG92ZXJyaWRlcyBhcmUgbmVlZGVkIHRvIHByZXZlbnQgQVNTRVJUcyBvbiA8c3ZnPjxzdG9wIC8+
PC9zdmc+CisgICAgLy8gUmVuZGVyT2JqZWN0J3MgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgQVNT
RVJUX05PVF9SRUFDSEVEKCkKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA0MDAKKyAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqKSB7IHJldHVybiBJbnRSZWN0KCk7IH0KKyAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIEZs
b2F0UmVjdCgpOyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBj
b25zdCB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0K
KworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CisKK3ByaXZhdGU6CisgICAgU1ZH
R3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQoKSBjb25zdDsKK307CisKK2lubGluZSBj
b25zdCBSZW5kZXJTVkdHcmFkaWVudFN0b3AqIHRvUmVuZGVyU1ZHR3JhZGllbnRTdG9wKGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+
aXNTVkdHcmFkaWVudFN0b3AoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRl
clNWR0dyYWRpZW50U3RvcCo+KG9iamVjdCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShT
VkcpCisjZW5kaWYgLy8gUmVuZGVyU1ZHR3JhZGllbnRTdG9wX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5jcHAJKHJldmlzaW9uIDc1MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcDo3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5j
bHVkZSAiUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgiCisKKyNpbmNsdWRlICJSZW5kZXJTVkdQ
YXRoLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
KFNWR1N0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCisgICAgOiBSZW5kZXJTVkdDb250YWluZXIoZWxl
bWVudCkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmxheW91dCgpCit7
CisgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOworICAgIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91
dENoaWxkcmVuKHRoaXMsIHNlbGZOZWVkc0xheW91dCgpKTsgCisgICAgc2V0TmVlZHNMYXlvdXQo
ZmFsc2UpOyAgICAKK30KKwordm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OnBhaW50KFBh
aW50SW5mbyYsIGludCwgaW50KQoreworICAgIC8vIFRoaXMgc3VidHJlZSBkb2VzIG5vdCBwYWlu
dC4KK30KKwordm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmFic29sdXRlUXVhZHMoVmVj
dG9yPEZsb2F0UXVhZD4mKQoreworICAgIC8vIFRoaXMgc3VidHJlZSBkb2VzIG5vdCB0YWtlIHVw
IHNwYWNlIG9yIHBhaW50Cit9CisKK2Jvb2wgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpub2Rl
QXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAkocmV2aXNpb24g
NzUzNDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250
YWluZXIuaDo3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcl9oCisjZGVmaW5lIFJlbmRlclNWR0hpZGRlbkNvbnRh
aW5lcl9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjbGFzcyBTVkdTdHlsZWRFbGVtZW50Owor
CisvLyBUaGlzIGNsYXNzIGlzIGZvciBjb250YWluZXJzIHdoaWNoIGFyZSBuZXZlciBkcmF3biwg
YnV0IGRvIG5lZWQgdG8gc3VwcG9ydCBzdHlsZQorLy8gPGRlZnM+LCA8bGluZWFyR3JhZGllbnQ+
LCA8cmFkaWFsR3JhZGllbnQ+IGFyZSBhbGwgZ29vZCBleGFtcGxlcworY2xhc3MgUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyIDogcHVibGljIFJlbmRlclNWR0NvbnRhaW5lciB7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyKFNWR1N0eWxlZEVsZW1lbnQqKTsK
KworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJS
ZW5kZXJTVkdIaWRkZW5Db250YWluZXIiOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzU1ZHSGlkZGVuQ29u
dGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c0xheWVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOworICAgIAorICAgIHZpcnR1
YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9i
amVjdCopIHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1
YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKK307Cit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoU1ZHKQorI2VuZGlmIC8vIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcl9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAkocmV2
aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFn
ZS5jcHA6NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMDkgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJl
ciA8cGFyb2dhQHBhcm9nYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShT
VkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW1hZ2UuaCIKKworI2luY2x1ZGUgIkF0dHIuaCIKKyNp
bmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMu
aCIKKyNpbmNsdWRlICJSZW5kZXJJbWFnZVJlc291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCisjaW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRp
by5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJj
ZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdJbWFnZTo6UmVuZGVyU1ZH
SW1hZ2UoU1ZHSW1hZ2VFbGVtZW50KiBpbXBsKQorICAgIDogUmVuZGVyU1ZHTW9kZWxPYmplY3Qo
aW1wbCkKKyAgICAsIG1fdXBkYXRlQ2FjaGVkUmVwYWludFJlY3QodHJ1ZSkKKyAgICAsIG1fbmVl
ZHNUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkKKyAgICAsIG1faW1hZ2VSZXNvdXJjZShSZW5kZXJJbWFn
ZVJlc291cmNlOjpjcmVhdGUoKSkKK3sKKyAgICBtX2ltYWdlUmVzb3VyY2UtPmluaXRpYWxpemUo
dGhpcyk7Cit9CisKK1JlbmRlclNWR0ltYWdlOjp+UmVuZGVyU1ZHSW1hZ2UoKQoreworICAgIG1f
aW1hZ2VSZXNvdXJjZS0+c2h1dGRvd24oKTsKK30KKwordm9pZCBSZW5kZXJTVkdJbWFnZTo6bGF5
b3V0KCkKK3sKKyAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CisKKyAgICBMYXlvdXRSZXBhaW50
ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBzZWxm
TmVlZHNMYXlvdXQoKSk7CisgICAgU1ZHSW1hZ2VFbGVtZW50KiBpbWFnZSA9IHN0YXRpY19jYXN0
PFNWR0ltYWdlRWxlbWVudCo+KG5vZGUoKSk7CisKKyAgICBib29sIHRyYW5zZm9ybU9yQm91bmRh
cmllc1VwZGF0ZSA9IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgfHwgbV91cGRhdGVDYWNoZWRSZXBh
aW50UmVjdDsKKyAgICBpZiAobV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSkgeworICAgICAgICBtX2xv
Y2FsVHJhbnNmb3JtID0gaW1hZ2UtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICAgICAg
bV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChtX3VwZGF0
ZUNhY2hlZFJlcGFpbnRSZWN0KSB7CisgICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9v
YmplY3RCb3VuZGluZ0JveDsKKyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVw
YWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKKyAgICAg
ICAgbV91cGRhdGVDYWNoZWRSZXBhaW50UmVjdCA9IGZhbHNlOworICAgIH0KKworICAgIC8vIElu
dmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5n
ZWQuCisgICAgaWYgKG1fZXZlckhhZExheW91dCAmJiBzZWxmTmVlZHNMYXlvdXQoKSkKKyAgICAg
ICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQodGhpcyk7CisKKyAgICAv
LyBJZiBvdXIgYm91bmRzIGNoYW5nZWQsIG5vdGlmeSB0aGUgcGFyZW50cy4KKyAgICBpZiAodHJh
bnNmb3JtT3JCb3VuZGFyaWVzVXBkYXRlKQorICAgICAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CisKKyAgICByZXBhaW50ZXIucmVwYWludEFmdGVy
TGF5b3V0KCk7CisgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOworfQorCit2b2lkIFJlbmRlclNW
R0ltYWdlOjp1cGRhdGVGcm9tRWxlbWVudCgpCit7CisgICAgU1ZHSW1hZ2VFbGVtZW50KiBpbWFn
ZSA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudCo+KG5vZGUoKSk7CisKKyAgICBGbG9hdFJl
Y3Qgb2xkQm91bmRhcmllcyA9IG1fb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgbV9vYmplY3RCb3Vu
ZGluZ0JveCA9IEZsb2F0UmVjdChpbWFnZS0+eCgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPnkoKS52
YWx1ZShpbWFnZSksIGltYWdlLT53aWR0aCgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPmhlaWdodCgp
LnZhbHVlKGltYWdlKSk7CisgICAgaWYgKG1fb2JqZWN0Qm91bmRpbmdCb3ggIT0gb2xkQm91bmRh
cmllcykgeworICAgICAgICBtX3VwZGF0ZUNhY2hlZFJlcGFpbnRSZWN0ID0gdHJ1ZTsKKyAgICAg
ICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7CisgICAgfQorICAgIFJlbmRlclNWR01vZGVsT2JqZWN0
Ojp1cGRhdGVGcm9tRWxlbWVudCgpOworfQorCit2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQpCit7CisgICAgaWYgKHBhaW50SW5mby5jb250
ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERF
TiB8fCAhbV9pbWFnZVJlc291cmNlLT5oYXNJbWFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
OworICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRS
ZWN0KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKKyAgICBi
b29sIGRyYXdzT3V0bGluZSA9IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIChjaGlsZFBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBjaGlsZFBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlU2VsZk91dGxpbmUpOworICAgIGlmIChkcmF3c091dGxpbmUgfHwgY2hpbGRQ
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAgICAgY2hpbGRQ
YWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgICAgICBjaGlsZFBhaW50SW5mby5hcHBseVRy
YW5zZm9ybShtX2xvY2FsVHJhbnNmb3JtKTsKKworICAgICAgICBpZiAoY2hpbGRQYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICAgICAgICAgIFBhaW50SW5mbyBz
YXZlZEluZm8oY2hpbGRQYWludEluZm8pOworCisgICAgICAgICAgICBpZiAoU1ZHUmVuZGVyU3Vw
cG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbykpIHsK
KyAgICAgICAgICAgICAgICBJbWFnZSogaW1hZ2UgPSBtX2ltYWdlUmVzb3VyY2UtPmltYWdlKCk7
CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gbV9vYmplY3RCb3VuZGluZ0Jv
eDsKKyAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdCgwLCAwLCBpbWFnZS0+d2lkdGgo
KSwgaW1hZ2UtPmhlaWdodCgpKTsKKworICAgICAgICAgICAgICAgIFNWR0ltYWdlRWxlbWVudCog
aW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoaW1hZ2VFbGVtZW50LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCkuYWxp
Z24oKSAhPSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19O
T05FKQorICAgICAgICAgICAgICAgICAgICBpbWFnZUVsZW1lbnQtPnByZXNlcnZlQXNwZWN0UmF0
aW8oKS50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNSZWN0KTsKKworICAgICAgICAgICAgICAg
IGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBT
VkdSZW5kZXJTdXBwb3J0OjpmaW5pc2hSZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJ
bmZvLCBzYXZlZEluZm8uY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZHJhd3NP
dXRsaW5lKQorICAgICAgICAgICAgcGFpbnRPdXRsaW5lKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQs
IHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdCb3gueCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihib3Vu
ZGluZ0JveC55KCkpLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdC
b3gud2lkdGgoKSksIHN0YXRpY19jYXN0PGludD4oYm91bmRpbmdCb3guaGVpZ2h0KCkpKTsKKyAg
ICAgICAgCisgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB9
Cit9CisKK2Jvb2wgUmVuZGVyU1ZHSW1hZ2U6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAgIC8v
IFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10ZXN0
IHRoZW4uCisgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQ
b2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19JTUFHRV9ISVRURVNUSU5HLCByZXF1ZXN0LCBzdHls
ZSgpLT5wb2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxlKCktPnZp
c2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKKyAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5y
ZXF1aXJlVmlzaWJsZSkgeworICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRv
UGFyZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworICAg
ICAgICAgICAgCisgICAgICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5n
QXJlYSh0aGlzLCBsb2NhbFBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBpZiAoaGl0UnVsZXMuY2FuSGl0RmlsbCkgeworICAgICAgICAgICAgaWYgKG1fb2JqZWN0
Qm91bmRpbmdCb3guY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgICAgICB1cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJTVkdJbWFnZTo6aW1hZ2VD
aGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCopCit7CisgICAgLy8gVGhlIGlt
YWdlIHJlc291cmNlIGRlZmF1bHRzIHRvIG51bGxJbWFnZSB1bnRpbCB0aGUgcmVzb3VyY2UgYXJy
aXZlcy4KKyAgICAvLyBUaGlzIGVtcHR5IGltYWdlIG1heSBiZSBjYWNoZWQgYnkgU1ZHIHJlc291
cmNlcyB3aGljaCBtdXN0IGJlIGludmFsaWRhdGVkLgorICAgIGlmIChTVkdSZXNvdXJjZXMqIHJl
c291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmpl
Y3QodGhpcykpCisgICAgICAgIHJlc291cmNlcy0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKHRoaXMp
OworCisgICAgLy8gRXZlbnR1YWxseSBub3RpZnkgcGFyZW50IHJlc291cmNlcywgdGhhdCB3ZSd2
ZSBjaGFuZ2VkLgorICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50
UmVzb3VyY2VJbnZhbGlkYXRpb24odGhpcywgZmFsc2UpOworCisgICAgcmVwYWludCgpOworfQor
Cit2b2lkIFJlbmRlclNWR0ltYWdlOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4m
IHJlY3RzLCBpbnQsIGludCkKK3sKKyAgICAvLyB0aGlzIGlzIGNhbGxlZCBmcm9tIHBhaW50KCkg
YWZ0ZXIgdGhlIGxvY2FsVHJhbnNmb3JtIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZAorICAgIElu
dFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkpOworICAgIGlmICghY29udGVudFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBy
ZWN0cy5hcHBlbmQoY29udGVudFJlY3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaAkocmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oOjc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFu
b3ZAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgUmVu
ZGVyU1ZHSW1hZ2VfaAorI2RlZmluZSBSZW5kZXJTVkdJbWFnZV9oCisKKyNpZiBFTkFCTEUoU1ZH
KQorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSAiU1ZHUHJlc2VydmVB
c3BlY3RSYXRpby5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJJbWFnZVJlc291cmNlOworY2xhc3MgU1ZHSW1hZ2VF
bGVtZW50OworCitjbGFzcyBSZW5kZXJTVkdJbWFnZSA6IHB1YmxpYyBSZW5kZXJTVkdNb2RlbE9i
amVjdCB7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHSW1hZ2UoU1ZHSW1hZ2VFbGVtZW50Kik7Cisg
ICAgdmlydHVhbCB+UmVuZGVyU1ZHSW1hZ2UoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKKworICAgIFJlbmRlckltYWdlUmVz
b3VyY2UqIGltYWdlUmVzb3VyY2UoKSB7IHJldHVybiBtX2ltYWdlUmVzb3VyY2UuZ2V0KCk7IH0K
KyAgICBjb25zdCBSZW5kZXJJbWFnZVJlc291cmNlKiBpbWFnZVJlc291cmNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbWFnZVJlc291cmNlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBj
b25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR0ltYWdlIjsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
CisgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisKKyAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRp
bmdCb3g7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJv
dW5kaW5nQm94OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9y
PEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworCisgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hh
bmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBw
YXJlbnRYLCBpbnQgcGFyZW50WSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKKworICAgIHZpcnR1YWwgQWZmaW5l
VHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9y
bTsgfQorCisgICAgYm9vbCBtX3VwZGF0ZUNhY2hlZFJlcGFpbnRSZWN0IDogMTsKKyAgICBib29s
IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOworICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2Fs
VHJhbnNmb3JtOworICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94OworICAgIEZsb2F0
UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAgICBPd25QdHI8UmVuZGVySW1hZ2VSZXNvdXJj
ZT4gbV9pbWFnZVJlc291cmNlOworfTsKKworaW5saW5lIFJlbmRlclNWR0ltYWdlKiB0b1JlbmRl
clNWR0ltYWdlKFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8
IG9iamVjdC0+aXNTVkdJbWFnZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZH
SW1hZ2UqPihvYmplY3QpOworfQorCitpbmxpbmUgY29uc3QgUmVuZGVyU1ZHSW1hZ2UqIHRvUmVu
ZGVyU1ZHSW1hZ2UoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFv
YmplY3QgfHwgb2JqZWN0LT5pc1NWR0ltYWdlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBSZW5kZXJTVkdJbWFnZSo+KG9iamVjdCk7Cit9CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBh
bnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9SZW5kZXJTVkdJbWFnZShj
b25zdCBSZW5kZXJTVkdJbWFnZSopOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmIC8vIFJlbmRlclNWR0ltYWdlX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
Y3BwCShyZXZpc2lvbiA3NTM0NykJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR01vZGVsT2JqZWN0LmNwcDo3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3
IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
IAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAi
UmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKKworI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgi
CisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1JlbmRlclNWR01vZGVsT2JqZWN0OjpSZW5kZXJTVkdNb2RlbE9iamVjdChTVkdTdHlsZWRFbGVt
ZW50KiBub2RlKQorICAgIDogUmVuZGVyT2JqZWN0KG5vZGUpCit7Cit9CisKK0ludFJlY3QgUmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKQoreworICAgIHJldHVybiBTVkdSZW5kZXJT
dXBwb3J0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCh0aGlzLCByZXBhaW50Q29udGFp
bmVyKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y29tcHV0ZVJlY3RGb3JSZXBh
aW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiByZXBh
aW50UmVjdCwgYm9vbCBmaXhlZCkKK3sKKyAgICBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlUmVj
dEZvclJlcGFpbnQodGhpcywgcmVwYWludENvbnRhaW5lciwgcmVwYWludFJlY3QsIGZpeGVkKTsK
K30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCAsIGJvb2wgdXNl
VHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAoreworICAg
IFNWR1JlbmRlclN1cHBvcnQ6Om1hcExvY2FsVG9Db250YWluZXIodGhpcywgcmVwYWludENvbnRh
aW5lciwgZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsKK30KKworLy8gQ29w
aWVkIGZyb20gUmVuZGVyQm94LCB0aGlzIG1ldGhvZCBsaWtlbHkgcmVxdWlyZXMgZnVydGhlciBy
ZWZhY3RvcmluZyB0byB3b3JrIGVhc2lseSBmb3IgYm90aCBTVkcgYW5kIENTUyBCb3ggTW9kZWwg
Y29udGVudC4KKy8vIEZJWE1FOiBUaGlzIG1heSBhbHNvIG5lZWQgdG8gbW92ZSBpbnRvIFNWR1Jl
bmRlclN1cHBvcnQgYXMgdGhlIFJlbmRlckJveCB2ZXJzaW9uIGRlcGVuZHMKKy8vIG9uIGJvcmRl
ckJvdW5kaW5nQm94KCkgd2hpY2ggU1ZHIFJlbmRlckJveCBzdWJjbGFzZXMgKGxpa2UgU1ZHUmVu
ZGVyQmxvY2spIGRvIG5vdCBpbXBsZW1lbnQuCitJbnRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0
OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lciwgSW50UG9pbnQqKSBjb25zdAoreworICAgIEludFJlY3QgYm94ID0gZW5jbG9zaW5n
SW50UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBhZGp1c3RSZWN0
Rm9yT3V0bGluZUFuZFNoYWRvdyhib3gpOworCisgICAgRmxvYXRRdWFkIGNvbnRhaW5lclJlbGF0
aXZlUXVhZCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChib3gpLCByZXBhaW50Q29u
dGFpbmVyKTsKKyAgICByZXR1cm4gY29udGFpbmVyUmVsYXRpdmVRdWFkLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUmVjdHMo
VmVjdG9yPEludFJlY3Q+JiwgaW50LCBpbnQpCit7CisgICAgLy8gVGhpcyBjb2RlIHBhdGggc2hv
dWxkIG5ldmVyIGJlIHRha2VuIGZvciBTVkcsIGFzIHdlJ3JlIGFzc3VtaW5nIHVzZVRyYW5zZm9y
bXM9dHJ1ZSBldmVyeXdoZXJlLCBhYnNvbHV0ZVF1YWRzIHNob3VsZCBiZSB1c2VkLgorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK3sKKyAgICBxdWFkcy5hcHBlbmQo
bG9jYWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3VuZGluZ0JveCgpKSk7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OmRlc3Ryb3koKQoreworICAgIFNWR1Jlc291cmNlc0NhY2hlOjpj
bGllbnREZXN0cm95ZWQodGhpcyk7CisgICAgUmVuZGVyT2JqZWN0OjpkZXN0cm95KCk7Cit9CisK
K3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQoreworICAgIGlmIChkaWZmID09
IFN0eWxlRGlmZmVyZW5jZUxheW91dCkKKyAgICAgICAgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRl
KCk7CisgICAgUmVuZGVyT2JqZWN0OjpzdHlsZVdpbGxDaGFuZ2UoZGlmZiwgbmV3U3R5bGUpOwor
fQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIFJlbmRlck9i
amVjdDo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOworICAgIFNWR1Jlc291cmNlc0Nh
Y2hlOjpjbGllbnRTdHlsZUNoYW5nZWQodGhpcywgZGlmZiwgc3R5bGUoKSk7Cit9CisKK3ZvaWQg
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21FbGVtZW50KCkKK3sKKyAgICBSZW5kZXJP
YmplY3Q6OnVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVu
dFVwZGF0ZWRGcm9tRWxlbWVudCh0aGlzLCBzdHlsZSgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdN
b2RlbE9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgaW50LCBpbnQsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKQoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDc1MzQ3
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDo3
NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZH
TW9kZWxPYmplY3RfaAorI2RlZmluZSBSZW5kZXJTVkdNb2RlbE9iamVjdF9oCisKKyNpZiBFTkFC
TEUoU1ZHKQorCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVy
U3VwcG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIE1vc3QgcmVuZGVyZXJzIGlu
IHRoZSBTVkcgcmVuZGVyaW5nIHRyZWUgd2lsbCBpbmhlcml0IGZyb20gdGhpcyBjbGFzcworLy8g
YnV0IG5vdCBhbGwuIChlLmcuIFJlbmRlclNWR0ZvcmVpZ25PYmplY3QsIFJlbmRlclNWR0Jsb2Nr
KSB0aHVzIG1ldGhvZHMKKy8vIHJlcXVpcmVkIGJ5IFNWRyByZW5kZXJzIG5lZWQgdG8gYmUgZGVj
bGFyZWQgb24gUmVuZGVyT2JqZWN0LCBidXQgc2hhcmVkCisvLyBsb2dpYyBjYW4gZ28gaW4gdGhp
cyBjbGFzcyBvciBpbiBTVkdSZW5kZXJTdXBwb3J0LgorCitjbGFzcyBTVkdTdHlsZWRFbGVtZW50
OworCitjbGFzcyBSZW5kZXJTVkdNb2RlbE9iamVjdCA6IHB1YmxpYyBSZW5kZXJPYmplY3Qgewor
cHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlclNWR01vZGVsT2JqZWN0KFNWR1N0eWxlZEVsZW1l
bnQqKTsKKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKworICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVw
YWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7CisgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CisgICAgdmlydHVhbCBJ
bnRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyLCBJbnRQb2ludCopIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGFic29s
dXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwg
dm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGVzdHJveSgpOworCisgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3Jtcywg
Ym9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3R5
bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxl
bWVudCgpOworCitwcml2YXRlOgorICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBuZXZlciBiZSBj
YWxsZWQsIFNWRyB1c2VzIGEgZGlmZmVyZW50IG5vZGVBdFBvaW50IG1ldGhvZAorICAgIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHhJ
bkNvbnRhaW5lciwgaW50IHlJbkNvbnRhaW5lciwgaW50IGR4UGFyZW50VG9Db250YWluZXIsIGlu
dCBkeVBhcmVudFRvQ29udGFpbmVyLCBIaXRUZXN0QWN0aW9uKTsKK307CisKK30KKworI2VuZGlm
IC8vIEVOQUJMRShTVkcpCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA3NTM0NykJKGZyb20g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmNwcDo3NTM0NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKwor
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCisjaW5j
bHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IGlubGluZSBSZW5kZXJTVkdSZXNvdXJjZSogcmVxdWVzdFBhaW50aW5nUmVzb3VyY2UoUmVuZGVy
U1ZHUmVzb3VyY2VNb2RlIG1vZGUsIFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUsIENvbG9yJiBmYWxsYmFja0NvbG9yKQoreworICAgIEFTU0VSVChvYmplY3Qp
OworICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICAvLyBJZiB3ZSBoYXZlIG5vIHN0eWxlIGF0IGFs
bCwgaWdub3JlIGl0LgorICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxl
LT5zdmdTdHlsZSgpOworICAgIGlmICghc3ZnU3R5bGUpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgLy8gSWYgd2UgaGF2ZSBubyBmaWxsL3N0cm9rZSwgcmV0dXJuIDAuCisgICAgaWYgKG1vZGUg
PT0gQXBwbHlUb0ZpbGxNb2RlKSB7CisgICAgICAgIGlmICghc3ZnU3R5bGUtPmhhc0ZpbGwoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghc3ZnU3R5
bGUtPmhhc1N0cm9rZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgU1ZH
UGFpbnQqIHBhaW50ID0gbW9kZSA9PSBBcHBseVRvRmlsbE1vZGUgPyBzdmdTdHlsZS0+ZmlsbFBh
aW50KCkgOiBzdmdTdHlsZS0+c3Ryb2tlUGFpbnQoKTsKKyAgICBBU1NFUlQocGFpbnQpOworCisg
ICAgU1ZHUGFpbnQ6OlNWR1BhaW50VHlwZSBwYWludFR5cGUgPSBwYWludC0+cGFpbnRUeXBlKCk7
CisgICAgaWYgKHBhaW50VHlwZSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9OT05FKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIENvbG9yIGNvbG9yOworICAgIGlmIChwYWludFR5cGUgPT0g
U1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfUkdCQ09MT1IKKyAgICAgICAgfHwgcGFpbnRUeXBlID09
IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1JHQkNPTE9SX0lDQ0NPTE9SCisgICAgICAgIHx8IHBh
aW50VHlwZSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfUkdCQ09MT1IKKyAgICAgICAg
fHwgcGFpbnRUeXBlID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1VSSV9SR0JDT0xPUl9JQ0ND
T0xPUikKKyAgICAgICAgY29sb3IgPSBwYWludC0+Y29sb3IoKTsKKyAgICBlbHNlIGlmIChwYWlu
dFR5cGUgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SIHx8IHBhaW50VHlw
ZSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfQ1VSUkVOVENPTE9SKQorICAgICAgICBj
b2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CisK
KyAgICBpZiAoc3R5bGUtPmluc2lkZUxpbmsoKSA9PSBJbnNpZGVWaXNpdGVkTGluaykgeworICAg
ICAgICBSZW5kZXJTdHlsZSogdmlzaXRlZFN0eWxlID0gc3R5bGUtPmdldENhY2hlZFBzZXVkb1N0
eWxlKFZJU0lURURfTElOSyk7CisgICAgICAgIEFTU0VSVCh2aXNpdGVkU3R5bGUpOworCisgICAg
ICAgIGlmIChTVkdQYWludCogdmlzaXRlZFBhaW50ID0gbW9kZSA9PSBBcHBseVRvRmlsbE1vZGUg
PyB2aXNpdGVkU3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxQYWludCgpIDogdmlzaXRlZFN0eWxlLT5z
dmdTdHlsZSgpLT5zdHJva2VQYWludCgpKSB7CisgICAgICAgICAgICAvLyBGb3IgU1ZHX1BBSU5U
VFlQRV9DVVJSRU5UQ09MT1IsICdjb2xvcicgYWxyZWFkeSBjb250YWlucyB0aGUgJ3Zpc2l0ZWRD
b2xvcicuCisgICAgICAgICAgICBpZiAodmlzaXRlZFBhaW50LT5wYWludFR5cGUoKSA8IFNWR1Bh
aW50OjpTVkdfUEFJTlRUWVBFX1VSSV9OT05FICYmIHZpc2l0ZWRQYWludC0+cGFpbnRUeXBlKCkg
IT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgQ29sb3ImIHZpc2l0ZWRDb2xvciA9IHZpc2l0ZWRQYWludC0+Y29sb3IoKTsKKyAg
ICAgICAgICAgICAgICBpZiAodmlzaXRlZENvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgY29sb3IgPSBDb2xvcih2aXNpdGVkQ29sb3IucmVkKCksIHZpc2l0ZWRDb2xvci5ncmVl
bigpLCB2aXNpdGVkQ29sb3IuYmx1ZSgpLCBjb2xvci5hbHBoYSgpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHRoZSBwcmltYXJ5IHJlc291cmNlIGlzIGp1
c3QgYSBjb2xvciwgcmV0dXJuIGltbWVkaWF0ZWx5LgorICAgIFJlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvciogY29sb3JSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBh
aW50aW5nUmVzb3VyY2UoKTsKKyAgICBpZiAocGFpbnRUeXBlIDwgU1ZHUGFpbnQ6OlNWR19QQUlO
VFRZUEVfVVJJX05PTkUpIHsKKyAgICAgICAgLy8gSWYgYW4gaW52YWxpZCBmaWxsIGNvbG9yIGlz
IHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gZmlsbC9zdHJva2U9Im5vbmUiLgorICAgICAgICBpZiAo
IWNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGNvbG9y
UmVzb3VyY2UtPnNldENvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuIGNvbG9yUmVzb3VyY2U7
CisgICAgfQorCisgICAgLy8gSWYgbm8gcmVzb3VyY2VzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhl
IGdpdmVuIHJlbmRlcmVyLCByZXR1cm4gdGhlIGNvbG9yIHJlc291cmNlLgorICAgIFNWR1Jlc291
cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJl
bmRlck9iamVjdChvYmplY3QpOworICAgIGlmICghcmVzb3VyY2VzKSB7CisgICAgICAgIC8vIElm
IGEgcGFpbnQgc2VydmVyIGlzIHNwZWNpZmllZCwgYW5kIG5vIG9yIGFuIGludmFsaWQgZmFsbGJh
Y2sgY29sb3IgaXMgZ2l2ZW4sIGRlZmF1bHQgdG8gZmlsbC9zdHJva2U9ImJsYWNrIi4KKyAgICAg
ICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBjb2xvciA9IENvbG9yOjpibGFj
azsKKworICAgICAgICBjb2xvclJlc291cmNlLT5zZXRDb2xvcihjb2xvcik7CisgICAgICAgIHJl
dHVybiBjb2xvclJlc291cmNlOworICAgIH0KKworICAgIC8vIElmIHRoZSByZXF1ZXN0ZWQgcmVz
b3VyY2UgaXMgbm90IGF2YWlsYWJsZSwgcmV0dXJuIHRoZSBjb2xvciByZXNvdXJjZS4KKyAgICBS
ZW5kZXJTVkdSZXNvdXJjZSogdXJpUmVzb3VyY2UgPSBtb2RlID09IEFwcGx5VG9GaWxsTW9kZSA/
IHJlc291cmNlcy0+ZmlsbCgpIDogcmVzb3VyY2VzLT5zdHJva2UoKTsKKyAgICBpZiAoIXVyaVJl
c291cmNlKSB7CisgICAgICAgIC8vIElmIGEgcGFpbnQgc2VydmVyIGlzIHNwZWNpZmllZCwgYW5k
IG5vIG9yIGFuIGludmFsaWQgZmFsbGJhY2sgY29sb3IgaXMgZ2l2ZW4sIGRlZmF1bHQgdG8gZmls
bC9zdHJva2U9ImJsYWNrIi4KKyAgICAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCisgICAgICAg
ICAgICBjb2xvciA9IENvbG9yOjpibGFjazsKKworICAgICAgICBjb2xvclJlc291cmNlLT5zZXRD
b2xvcihjb2xvcik7CisgICAgICAgIHJldHVybiBjb2xvclJlc291cmNlOworICAgIH0KKworICAg
IC8vIFRoZSBwYWludCBzZXJ2ZXIgcmVzb3VyY2UgZXhpc3RzLCB0aG91Z2ggaXQgbWF5IGJlIGlu
dmFsaWQgKHBhdHRlcm4gd2l0aCB3aWR0aC9oZWlnaHQ9MCkuIFBhc3MgdGhlIGZhbGxiYWNrIGNv
bG9yIHRvIG91ciBjYWxsZXIKKyAgICAvLyBzbyBpdCBjYW4gdXNlIHRoZSBzb2xpZCBjb2xvciBw
YWludGluZyByZXNvdXJjZSwgaWYgYXBwbHlSZXNvdXJjZSgpIG9uIHRoZSBVUkkgcmVzb3VyY2Ug
ZmFpbGVkLgorICAgIGZhbGxiYWNrQ29sb3IgPSBjb2xvcjsKKyAgICByZXR1cm4gdXJpUmVzb3Vy
Y2U7Cit9CisKK1JlbmRlclNWR1Jlc291cmNlKiBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50
aW5nUmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSwgQ29sb3ImIGZhbGxiYWNrQ29sb3IpCit7CisgICAgcmV0dXJuIHJlcXVlc3RQYWludGluZ1Jl
c291cmNlKEFwcGx5VG9GaWxsTW9kZSwgb2JqZWN0LCBzdHlsZSwgZmFsbGJhY2tDb2xvcik7Cit9
CisKK1JlbmRlclNWR1Jlc291cmNlKiBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdS
ZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBD
b2xvciYgZmFsbGJhY2tDb2xvcikKK3sKKyAgICByZXR1cm4gcmVxdWVzdFBhaW50aW5nUmVzb3Vy
Y2UoQXBwbHlUb1N0cm9rZU1vZGUsIG9iamVjdCwgc3R5bGUsIGZhbGxiYWNrQ29sb3IpOworfQor
CitSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRT
b2xpZFBhaW50aW5nUmVzb3VyY2UoKQoreworICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IqIHNfc2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlID0gMDsKKyAgICBpZiAoIXNf
c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKQorICAgICAgICBzX3NoYXJlZFNvbGlkUGFpbnRp
bmdSZXNvdXJjZSA9IG5ldyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I7CisgICAgcmV0dXJu
IHNfc2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291
cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIGJvb2wgbmVlZHNMYXlvdXQpCit7CisgICAgQVNTRVJUKG9iamVjdCk7Cisg
ICAgaWYgKG5lZWRzTGF5b3V0KQorICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUp
OworCisgICAgLy8gSW52YWxpZGF0ZSByZXNvdXJjZXMgaW4gYW5jZXN0b3IgY2hhaW4sIGlmIG5l
ZWRlZC4KKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBvYmplY3QtPnBhcmVudCgpOworICAg
IHdoaWxlIChjdXJyZW50KSB7CisgICAgICAgIGlmIChjdXJyZW50LT5pc1NWR1Jlc291cmNlQ29u
dGFpbmVyKCkpIHsKKyAgICAgICAgICAgIGN1cnJlbnQtPnRvUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIoKS0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50KCk7CisgICAg
fQorfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAkocmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oOjc1MzQ3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdS
ZXNvdXJjZV9oCisjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlX2gKKworI2lmIEVOQUJMRShTVkcp
CisjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKKyNpbmNsdWRlICJTVkdEb2N1bWVu
dEV4dGVuc2lvbnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIFJlbmRlclNWR1Jl
c291cmNlVHlwZSB7CisgICAgTWFza2VyUmVzb3VyY2VUeXBlLAorICAgIE1hcmtlclJlc291cmNl
VHlwZSwKKyAgICBQYXR0ZXJuUmVzb3VyY2VUeXBlLAorICAgIExpbmVhckdyYWRpZW50UmVzb3Vy
Y2VUeXBlLAorICAgIFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBlLAorICAgIFNvbGlkQ29sb3JS
ZXNvdXJjZVR5cGUsCisgICAgRmlsdGVyUmVzb3VyY2VUeXBlLAorICAgIENsaXBwZXJSZXNvdXJj
ZVR5cGUKK307CisKK2VudW0gUmVuZGVyU1ZHUmVzb3VyY2VNb2RlIHsKKyAgICBBcHBseVRvRGVm
YXVsdE1vZGUgPSAxIDw8IDAsIC8vIHVzZWQgZm9yIGFsbCByZXNvdXJjZXMgZXhjZXB0IGdyYWRp
ZW50L3BhdHRlcm4KKyAgICBBcHBseVRvRmlsbE1vZGUgICAgPSAxIDw8IDEsCisgICAgQXBwbHlU
b1N0cm9rZU1vZGUgID0gMSA8PCAyLAorICAgIEFwcGx5VG9UZXh0TW9kZSAgICA9IDEgPDwgMyAv
LyB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggQXBwbHlUb3tGaWxsfFN0cm9rZX1Nb2RlCit9Owor
CitjbGFzcyBDb2xvcjsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsK
K2NsYXNzIFBhdGg7CitjbGFzcyBSZW5kZXJPYmplY3Q7CitjbGFzcyBSZW5kZXJTdHlsZTsKK2Ns
YXNzIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjsKKworY2xhc3MgUmVuZGVyU1ZHUmVzb3Vy
Y2UgeworcHVibGljOgorICAgIFJlbmRlclNWR1Jlc291cmNlKCkgeyB9CisgICAgdmlydHVhbCB+
UmVuZGVyU1ZHUmVzb3VyY2UoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxDbGll
bnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFy
a0ZvckludmFsaWRhdGlvbiA9IHRydWUpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBhcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVu
c2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hv
cnQsIGNvbnN0IFBhdGgqKSB7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5k
aW5nQm94KFJlbmRlck9iamVjdCopID0gMDsKKworICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3Vy
Y2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0ID0gMDsKKworICAgIHRlbXBsYXRlPGNsYXNzIFJl
bmRlcmVyPgorICAgIFJlbmRlcmVyKiBjYXN0KCkKKyAgICB7CisgICAgICAgIGlmIChSZW5kZXJl
cjo6c19yZXNvdXJjZVR5cGUgPT0gcmVzb3VyY2VUeXBlKCkpCisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UmVuZGVyZXIqPih0aGlzKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICAvLyBIZWxwZXIgdXRpbGl0aWVzIHVzZWQgaW4gdGhlIHJlbmRlciB0cmVlIHRvIGFj
Y2VzcyByZXNvdXJjZXMgdXNlZCBmb3IgcGFpbnRpbmcgc2hhcGVzL3RleHQgKGdyYWRpZW50cyAm
IHBhdHRlcm5zICYgc29saWQgY29sb3JzIG9ubHkpCisgICAgc3RhdGljIFJlbmRlclNWR1Jlc291
cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHls
ZSosIENvbG9yJiBmYWxsYmFja0NvbG9yKTsKKyAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2Uq
IHN0cm9rZVBhaW50aW5nUmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUq
LCBDb2xvciYgZmFsbGJhY2tDb2xvcik7CisgICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvciogc2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CisKKyAgICBzdGF0aWMgdm9p
ZCBtYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oUmVuZGVyT2JqZWN0
KiwgYm9vbCBuZWVkc0xheW91dCA9IHRydWUpOworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkocmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOjc1MzQ3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIK
KworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0Lmgi
CisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRl
ICJTVkdDbGlwUGF0aEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVk
ZSAiU1ZHSW1hZ2VCdWZmZXJUb29scy5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1
ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgorI2luY2x1ZGUgIlNWR1VzZUVs
ZW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitSZW5kZXJTVkdSZXNvdXJjZVR5cGUgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpz
X3Jlc291cmNlVHlwZSA9IENsaXBwZXJSZXNvdXJjZVR5cGU7CisKK1JlbmRlclNWR1Jlc291cmNl
Q2xpcHBlcjo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKFNWR0NsaXBQYXRoRWxlbWVudCogbm9k
ZSkKKyAgICA6IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKG5vZGUpCisgICAgLCBtX2ludmFs
aWRhdGlvbkJsb2NrZWQoZmFsc2UpCit7Cit9CisKK1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6
flJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcigpCit7CisgICAgaWYgKG1fY2xpcHBlci5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2NsaXBwZXIpOwor
ICAgIG1fY2xpcHBlci5jbGVhcigpOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
cjo6cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCit7
CisgICAgaWYgKG1faW52YWxpZGF0aW9uQmxvY2tlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jbGlwQm91bmRhcmllcyA9IEZsb2F0UmVjdCgpOworICAgIGlmICghbV9jbGlwcGVyLmlzRW1w
dHkoKSkgeworICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9jbGlwcGVyKTsKKyAgICAgICAgbV9j
bGlwcGVyLmNsZWFyKCk7CisgICAgfQorCisgICAgbWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRp
b24obWFya0ZvckludmFsaWRhdGlvbiA/IExheW91dEFuZEJvdW5kYXJpZXNJbnZhbGlkYXRpb24g
OiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXI6OnJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqIGNsaWVudCwgYm9vbCBt
YXJrRm9ySW52YWxpZGF0aW9uKQoreworICAgIEFTU0VSVChjbGllbnQpOworICAgIGlmIChtX2lu
dmFsaWRhdGlvbkJsb2NrZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NsaXBwZXIu
Y29udGFpbnMoY2xpZW50KSkKKyAgICAgICAgZGVsZXRlIG1fY2xpcHBlci50YWtlKGNsaWVudCk7
CisKKyAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGNsaWVudCwgbWFya0ZvckludmFsaWRh
dGlvbiA/IEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsK
K30KKworYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKQoreworICAgIEFTU0VSVChvYmplY3QpOworICAg
IEFTU0VSVChjb250ZXh0KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKHJlc291cmNlTW9k
ZSA9PSBBcHBseVRvRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVzb3Vy
Y2VNb2RlKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGFwcGx5Q2xpcHBpbmdUb0NvbnRleHQob2Jq
ZWN0LCBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCksIG9iamVjdC0+cmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSwgY29udGV4dCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyOjpwYXRoT25seUNsaXBwaW5nKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCkKK3sKKyAgICAvLyBJZiB0aGUgY3VycmVudCBj
bGlwLXBhdGggZ2V0cyBjbGlwcGVkIGl0c2VsZiwgd2UgaGF2ZSB0byBmYWxsYmFjayB0byBtYXNr
aW5nLgorICAgIGlmICghc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2xpcHBlclJlc291cmNlKCkuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2luZFJ1bGUgY2xpcFJ1bGUgPSBS
VUxFX05PTlpFUk87CisgICAgUGF0aCBjbGlwUGF0aCA9IFBhdGgoKTsKKworICAgIC8vIElmIGNs
aXAtcGF0aCBvbmx5IGNvbnRhaW5zIG9uZSB2aXNpYmxlIHNoYXBlIG9yIHBhdGgsIHdlIGNhbiB1
c2UgcGF0aC1iYXNlZCBjbGlwcGluZy4gSW52aXNpYmxlCisgICAgLy8gc2hhcGVzIGRvbid0IGFm
ZmVjdCB0aGUgY2xpcHBpbmcgYW5kIGNhbiBiZSBpZ25vcmVkLiBJZiBjbGlwLXBhdGggY29udGFp
bnMgbW9yZSB0aGFuIG9uZQorICAgIC8vIHZpc2libGUgc2hhcGUsIHRoZSBhZGRpdGl2ZSBjbGlw
cGluZyBtYXkgbm90IHdvcmssIGNhdXNlZCBieSB0aGUgY2xpcFJ1bGUuIEV2ZW5PZGQKKyAgICAv
LyBhcyB3ZWxsIGFzIE5vblplcm8gY2FuIGNhdXNlIHNlbGYtY2xpcHBpbmcgb2YgdGhlIGVsZW1l
bnRzLgorICAgIC8vIFNlZSBhbHNvIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9wYWludGluZy5o
dG1sI0ZpbGxSdWxlUHJvcGVydHkKKyAgICBmb3IgKE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUoKS0+
Zmlyc3RDaGlsZCgpOyBjaGlsZE5vZGU7IGNoaWxkTm9kZSA9IGNoaWxkTm9kZS0+bmV4dFNpYmxp
bmcoKSkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2RlLT5yZW5k
ZXJlcigpOworICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIC8vIE9ubHkgc2hhcGVzIG9yIHBhdGhzIGFyZSBzdXBwb3J0ZWQgZm9yIGRpcmVjdCBj
bGlwcGluZy4gV2UgbmVlZCB0byBmYWxsYmFjayB0byBtYXNraW5nIGZvciB0ZXh0cy4KKyAgICAg
ICAgaWYgKHJlbmRlcmVyLT5pc1NWR1RleHQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxT
VkdFbGVtZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIHN0
eWxlZCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4oY2hpbGRO
b2RlKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Cisg
ICAgICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52
aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
Y29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CisgICAg
ICAgIC8vIEN1cnJlbnQgc2hhcGUgaW4gY2xpcC1wYXRoIGdldHMgY2xpcHBlZCB0b28uIEZhbGxi
YWNrIHRvIG1hc2tpbmcuCisgICAgICAgIGlmICghc3ZnU3R5bGUtPmNsaXBwZXJSZXNvdXJjZSgp
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gRmFsbGJh
Y2sgdG8gbWFza2luZywgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjbGlwcGluZyBwYXRoLgor
ICAgICAgICBpZiAoY2xpcFBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBzdHlsZWQtPnRv
Q2xpcFBhdGgoY2xpcFBhdGgpOworICAgICAgICAgICAgY2xpcFJ1bGUgPSBzdmdTdHlsZS0+Y2xp
cFJ1bGUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIC8vIE9ubHkgb25lIHZpc2libGUgc2hhcGUvcGF0aCB3YXMgZm91bmQuIERpcmVjdGx5
IGNvbnRpbnVlIGNsaXBwaW5nIGFuZCB0cmFuc2Zvcm0gdGhlIGNvbnRlbnQgdG8gdXNlcnNwYWNl
IGlmIG5lY2Vzc2FyeS4KKyAgICBpZiAoc3RhdGljX2Nhc3Q8U1ZHQ2xpcFBhdGhFbGVtZW50Kj4o
bm9kZSgpKS0+Y2xpcFBhdGhVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9P
QkpFQ1RCT1VORElOR0JPWCkgeworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwor
ICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG9iamVjdEJvdW5kaW5nQm94LngoKSwgb2JqZWN0
Qm91bmRpbmdCb3gueSgpKTsKKyAgICAgICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShvYmpl
Y3RCb3VuZGluZ0JveC53aWR0aCgpLCBvYmplY3RCb3VuZGluZ0JveC5oZWlnaHQoKSk7CisgICAg
ICAgIGNsaXBQYXRoLnRyYW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIH0KKyAgICAvLyBUaGUgU1ZH
IHNwZWNpZmljYXRpb24gd2FudHMgdXMgdG8gY2xpcCBldmVyeXRoaW5nLCBpZiBjbGlwLXBhdGgg
ZG9lc24ndCBoYXZlIGEgY2hpbGQuCisgICAgaWYgKGNsaXBQYXRoLmlzRW1wdHkoKSkKKyAgICAg
ICAgY2xpcFBhdGguYWRkUmVjdChGbG9hdFJlY3QoKSk7CisgICAgY29udGV4dC0+Y2xpcFBhdGgo
Y2xpcFBhdGgsIGNsaXBSdWxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVyT2JqZWN0KiBv
YmplY3QsIGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3Qm
IHJlcGFpbnRSZWN0LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgaWYgKCFtX2Ns
aXBwZXIuY29udGFpbnMob2JqZWN0KSkKKyAgICAgICAgbV9jbGlwcGVyLnNldChvYmplY3QsIG5l
dyBDbGlwcGVyRGF0YSk7CisKKyAgICBib29sIHNob3VsZENyZWF0ZUNsaXBEYXRhID0gZmFsc2U7
CisgICAgQ2xpcHBlckRhdGEqIGNsaXBwZXJEYXRhID0gbV9jbGlwcGVyLmdldChvYmplY3QpOwor
ICAgIGlmICghY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UpIHsKKyAgICAgICAgaWYgKHBhdGhP
bmx5Q2xpcHBpbmcoY29udGV4dCwgb2JqZWN0Qm91bmRpbmdCb3gpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHNob3VsZENyZWF0ZUNsaXBEYXRhID0gdHJ1ZTsKKyAgICB9CisK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm07CisgICAgU1ZHSW1hZ2VCdWZm
ZXJUb29sczo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVT
eXN0ZW0ob2JqZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7CisKKyAgICBGbG9hdFJlY3QgYWJzb2x1
dGVUYXJnZXRSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChyZXBhaW50UmVjdCk7Cisg
ICAgRmxvYXRSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRv
b2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIob2JqZWN0LCBhYnNvbHV0
ZVRhcmdldFJlY3QpOworCisgICAgaWYgKHNob3VsZENyZWF0ZUNsaXBEYXRhICYmICFjbGFtcGVk
QWJzb2x1dGVUYXJnZXRSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoIVNWR0ltYWdlQnVm
ZmVyVG9vbHM6OmNyZWF0ZUltYWdlQnVmZmVyKGFic29sdXRlVGFyZ2V0UmVjdCwgY2xhbXBlZEFi
c29sdXRlVGFyZ2V0UmVjdCwgY2xpcHBlckRhdGEtPmNsaXBNYXNrSW1hZ2UsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEdyYXBoaWNz
Q29udGV4dCogbWFza0NvbnRleHQgPSBjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZS0+Y29udGV4
dCgpOworICAgICAgICBBU1NFUlQobWFza0NvbnRleHQpOworCisgICAgICAgIC8vIFRoZSBzYXZl
L3Jlc3RvcmUgcGFpciBpcyBuZWVkZWQgZm9yIGNsaXBUb0ltYWdlQnVmZmVyIC0gaXQgZG9lc24n
dCB3b3JrIHdpdGhvdXQgaXQgb24gbm9uLUNnIHBsYXRmb3Jtcy4KKyAgICAgICAgbWFza0NvbnRl
eHQtPnNhdmUoKTsKKyAgICAgICAgbWFza0NvbnRleHQtPnRyYW5zbGF0ZSgtY2xhbXBlZEFic29s
dXRlVGFyZ2V0UmVjdC54KCksIC1jbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LnkoKSk7CisgICAg
ICAgIG1hc2tDb250ZXh0LT5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0pOworCisgICAgICAg
IC8vIGNsaXBQYXRoIGNhbiBhbHNvIGJlIGNsaXBwZWQgYnkgYW5vdGhlciBjbGlwUGF0aC4KKyAg
ICAgICAgaWYgKFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNh
Y2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlzKSkgeworICAgICAgICAgICAgaWYgKFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBlciA9IHJlc291cmNlcy0+Y2xpcHBlcigpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFjbGlwcGVyLT5hcHBseUNsaXBwaW5nVG9Db250ZXh0KHRo
aXMsIG9iamVjdEJvdW5kaW5nQm94LCByZXBhaW50UmVjdCwgbWFza0NvbnRleHQpKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1hc2tDb250ZXh0LT5yZXN0b3JlKCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBkcmF3Q29udGVudEludG9NYXNrSW1hZ2UoY2xpcHBlckRhdGEsIG9i
amVjdEJvdW5kaW5nQm94KTsKKyAgICAgICAgbWFza0NvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB9
CisKKyAgICBpZiAoIWNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGlwVG9JbWFnZUJ1ZmZlcihjb250
ZXh0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCwgY2xpcHBl
ckRhdGEtPmNsaXBNYXNrSW1hZ2UpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRl
clNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKENsaXBwZXJEYXRh
KiBjbGlwcGVyRGF0YSwgY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCkKK3sKKyAg
ICBBU1NFUlQoY2xpcHBlckRhdGEpOworICAgIEFTU0VSVChjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJ
bWFnZSk7CisKKyAgICBHcmFwaGljc0NvbnRleHQqIG1hc2tDb250ZXh0ID0gY2xpcHBlckRhdGEt
PmNsaXBNYXNrSW1hZ2UtPmNvbnRleHQoKTsKKyAgICBBU1NFUlQobWFza0NvbnRleHQpOworCisg
ICAgQWZmaW5lVHJhbnNmb3JtIG1hc2tDb250ZW50VHJhbnNmb3JtYXRpb247CisgICAgU1ZHQ2xp
cFBhdGhFbGVtZW50KiBjbGlwUGF0aCA9IHN0YXRpY19jYXN0PFNWR0NsaXBQYXRoRWxlbWVudCo+
KG5vZGUoKSk7CisgICAgaWYgKGNsaXBQYXRoLT5jbGlwUGF0aFVuaXRzKCkgPT0gU1ZHVW5pdFR5
cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7CisgICAgICAgIG1hc2tDb250
ZW50VHJhbnNmb3JtYXRpb24udHJhbnNsYXRlKG9iamVjdEJvdW5kaW5nQm94LngoKSwgb2JqZWN0
Qm91bmRpbmdCb3gueSgpKTsKKyAgICAgICAgbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbi5zY2Fs
ZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdCb3gu
aGVpZ2h0KCkpOworICAgICAgICBtYXNrQ29udGV4dC0+Y29uY2F0Q1RNKG1hc2tDb250ZW50VHJh
bnNmb3JtYXRpb24pOworICAgIH0KKworICAgIC8vIERyYXcgYWxsIGNsaXBQYXRoIGNoaWxkcmVu
IGludG8gYSBnbG9iYWwgbWFzay4KKyAgICBmb3IgKE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUoKS0+
Zmlyc3RDaGlsZCgpOyBjaGlsZE5vZGU7IGNoaWxkTm9kZSA9IGNoaWxkTm9kZS0+bmV4dFNpYmxp
bmcoKSkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGROb2RlLT5yZW5k
ZXJlcigpOworICAgICAgICBpZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRp
Y19jYXN0PFNWR0VsZW1lbnQqPihjaGlsZE5vZGUpLT5pc1N0eWxlZCgpIHx8ICFyZW5kZXJlcikK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5k
ZXJlci0+c3R5bGUoKTsKKyAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+ZGlzcGxheSgpID09
IE5PTkUgfHwgc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgV2luZFJ1bGUgbmV3Q2xpcFJ1bGUgPSBzdHlsZS0+c3ZnU3R5bGUo
KS0+Y2xpcFJ1bGUoKTsKKyAgICAgICAgYm9vbCBpc1VzZUVsZW1lbnQgPSByZW5kZXJlci0+aXNT
VkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcigpOworICAgICAgICBpZiAoaXNVc2VFbGVtZW50KSB7
CisgICAgICAgICAgICBTVkdVc2VFbGVtZW50KiB1c2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
VXNlRWxlbWVudCo+KGNoaWxkTm9kZSk7CisgICAgICAgICAgICByZW5kZXJlciA9IHVzZUVsZW1l
bnQtPnJlbmRlcmVyQ2xpcENoaWxkKCk7CisgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCF1c2VFbGVtZW50LT5oYXNB
dHRyaWJ1dGUoU1ZHTmFtZXM6OmNsaXBfcnVsZUF0dHIpKQorICAgICAgICAgICAgICAgIG5ld0Ns
aXBSdWxlID0gcmVuZGVyZXItPnN0eWxlKCktPnN2Z1N0eWxlKCktPmNsaXBSdWxlKCk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBPbmx5IHNoYXBlcywgcGF0aHMgYW5kIHRleHRzIGFyZSBhbGxv
d2VkIGZvciBjbGlwcGluZy4KKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYg
IXJlbmRlcmVyLT5pc1NWR1RleHQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IC8vIFNhdmUgdGhlIG9sZCBSZW5kZXJTdHlsZSBvZiB0aGUgY3VycmVudCBvYmplY3QgZm9yIHJl
c3RvcmluZyBhZnRlciBkcmF3aW5nCisgICAgICAgIC8vIGl0IHRvIHRoZSBNYXNrSW1hZ2UuIFRo
ZSBuZXcgaW50ZXJtZWRpYXRlIFJlbmRlclN0eWxlIG5lZWRzIHRvIGluaGVyaXQgZnJvbQorICAg
ICAgICAvLyB0aGUgb2xkIG9uZS4KKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvbGRSZW5k
ZXJTdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IG5ld1JlbmRlclN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKG9sZFJlbmRlclN0eWxlLmdldCgp
KTsKKyAgICAgICAgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gbmV3UmVuZGVyU3R5bGUuZ2V0
KCktPmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgICAgIHN2Z1N0eWxlLT5zZXRGaWxsUGFpbnQoU1ZH
UGFpbnQ6OmRlZmF1bHRGaWxsKCkpOworICAgICAgICBzdmdTdHlsZS0+c2V0U3Ryb2tlUGFpbnQo
U1ZHUGFpbnQ6OmRlZmF1bHRTdHJva2UoKSk7CisgICAgICAgIHN2Z1N0eWxlLT5zZXRGaWxsUnVs
ZShuZXdDbGlwUnVsZSk7CisgICAgICAgIG5ld1JlbmRlclN0eWxlLmdldCgpLT5zZXRPcGFjaXR5
KDEuMGYpOworICAgICAgICBzdmdTdHlsZS0+c2V0RmlsbE9wYWNpdHkoMS4wZik7CisgICAgICAg
IHN2Z1N0eWxlLT5zZXRTdHJva2VPcGFjaXR5KDEuMGYpOworICAgICAgICBzdmdTdHlsZS0+c2V0
RmlsdGVyUmVzb3VyY2UoU3RyaW5nKCkpOworICAgICAgICBzdmdTdHlsZS0+c2V0TWFza2VyUmVz
b3VyY2UoU3RyaW5nKCkpOworCisgICAgICAgIC8vIFRoZSBzZXRTdHlsZSgpIGNhbGwgcmVzdWx0
cyBpbiBhIHN0eWxlRGlkQ2hhbmdlKCkgY2FsbCwgd2hpY2ggaW4gdHVybiBpbnZhbGlkYXRpb25z
IHRoZSByZXNvdXJjZXMuCisgICAgICAgIC8vIEFzIHdlJ3JlIG11dGF0aW5nIHRoZSByZXNvdXJj
ZSBvbiBwdXJwb3NlLCBibG9jayB1cGRhdGVzIHVudGlsIHdlJ3ZlIHJlc2V0dGVkIHRoZSBzdHls
ZSBhZ2Fpbi4KKyAgICAgICAgbV9pbnZhbGlkYXRpb25CbG9ja2VkID0gdHJ1ZTsKKyAgICAgICAg
cmVuZGVyZXItPnNldFN0eWxlKG5ld1JlbmRlclN0eWxlLnJlbGVhc2UoKSk7CisKKyAgICAgICAg
Ly8gSW4gdGhlIGNhc2Ugb2YgYSA8dXNlPiBlbGVtZW50LCB3ZSBvYnRhaW5lZCBpdHMgcmVuZGVy
ZXJlIGFib3ZlLCB0byByZXRyaWV2ZSBpdHMgY2xpcFJ1bGUuCisgICAgICAgIC8vIFdlIGhhdmUg
dG8gcGFzcyB0aGUgPHVzZT4gcmVuZGVyZXIgaXRzZWxmIHRvIHJlbmRlclN1YnRyZWVUb0ltYWdl
QnVmZmVyKCkgdG8gYXBwbHkgaXQncyB4L3kvdHJhbnNmb3JtL2V0Yy4gdmFsdWVzIHdoZW4gcmVu
ZGVyaW5nLgorICAgICAgICAvLyBTbyBpZiBpc1VzZUVsZW1lbnQgaXMgdHJ1ZSwgcmVmZXRjaCB0
aGUgY2hpbGROb2RlLT5yZW5kZXJlcigpLCBhcyByZW5kZXJlciBnb3Qgb3ZlcnJpZGVuIGFib3Zl
LgorICAgICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZl
cihjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZS5nZXQoKSwgaXNVc2VFbGVtZW50ID8gY2hpbGRO
b2RlLT5yZW5kZXJlcigpIDogcmVuZGVyZXIsIG1hc2tDb250ZW50VHJhbnNmb3JtYXRpb24pOwor
CisgICAgICAgIHJlbmRlcmVyLT5zZXRTdHlsZShvbGRSZW5kZXJTdHlsZS5yZWxlYXNlKCkpOwor
ICAgICAgICBtX2ludmFsaWRhdGlvbkJsb2NrZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmNhbGN1bGF0ZUNs
aXBDb250ZW50UmVwYWludFJlY3QoKQoreworICAgIC8vIFRoaXMgaXMgYSByb3VnaCBoZXVyaXN0
aWMgdG8gYXBwcmFpc2UgdGhlIGNsaXAgc2l6ZSBhbmQgZG9lc24ndCBjb25zaWRlciBjbGlwIG9u
IGNsaXAuCisgICAgZm9yIChOb2RlKiBjaGlsZE5vZGUgPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsg
Y2hpbGROb2RlOyBjaGlsZE5vZGUgPSBjaGlsZE5vZGUtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKKyAgICAg
ICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVt
ZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNTVkdQYXRoKCkgJiYgIXJlbmRlcmVy
LT5pc1NWR1RleHQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBy
ZW5kZXJlci0+c3R5bGUoKTsKKyAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+ZGlzcGxheSgp
ID09IE5PTkUgfHwgc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBtX2NsaXBCb3VuZGFyaWVzLnVuaXRlKHJlbmRlcmVyLT5sb2Nh
bFRvUGFyZW50VHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSkpOworICAgIH0KK30KKworYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXI6OmhpdFRlc3RDbGlwQ29udGVudChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94
LCBjb25zdCBGbG9hdFBvaW50JiBub2RlQXRQb2ludCkKK3sKKyAgICBGbG9hdFBvaW50IHBvaW50
ID0gbm9kZUF0UG9pbnQ7CisgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBp
bmdBcmVhKHRoaXMsIHBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0
YXRpY19jYXN0PFNWR0NsaXBQYXRoRWxlbWVudCo+KG5vZGUoKSktPmNsaXBQYXRoVW5pdHMoKSA9
PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKKyAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0
ZShvYmplY3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CisgICAgICAg
IHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2Jq
ZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOworICAgICAgICBwb2ludCA9IHRyYW5zZm9ybS5pbnZl
cnNlKCkubWFwUG9pbnQocG9pbnQpOworICAgIH0KKworICAgIGZvciAoTm9kZSogY2hpbGROb2Rl
ID0gbm9kZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkTm9kZTsgY2hpbGROb2RlID0gY2hpbGROb2Rl
LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGls
ZE5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgIGlmICghY2hpbGROb2RlLT5pc1NWR0VsZW1lbnQo
KSB8fCAhc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGNoaWxkTm9kZSktPmlzU3R5bGVkKCkgfHwg
IXJlbmRlcmVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghcmVuZGVyZXIt
PmlzU1ZHUGF0aCgpICYmICFyZW5kZXJlci0+aXNTVkdUZXh0KCkgJiYgIXJlbmRlcmVyLT5pc1NW
R1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgSW50UG9pbnQgaGl0UG9pbnQ7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KGhpdFBv
aW50KTsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2RlQXRGbG9hdFBvaW50KEhpdFRlc3RSZXF1
ZXN0KEhpdFRlc3RSZXF1ZXN0OjpTVkdDbGlwQ29udGVudCksIHJlc3VsdCwgcG9pbnQsIEhpdFRl
c3RGb3JlZ3JvdW5kKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6cmVz
b3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICAvLyBSZXNvdXJj
ZSB3YXMgbm90IGxheW91dGVkIHlldC4gR2l2ZSBiYWNrIHRoZSBib3VuZGluZ0JveCBvZiB0aGUg
b2JqZWN0LgorICAgIGlmIChzZWxmTmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuIG9iamVj
dC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICAKKyAgICBpZiAobV9jbGlwQm91bmRhcmllcy5p
c0VtcHR5KCkpCisgICAgICAgIGNhbGN1bGF0ZUNsaXBDb250ZW50UmVwYWludFJlY3QoKTsKKwor
ICAgIGlmIChzdGF0aWNfY2FzdDxTVkdDbGlwUGF0aEVsZW1lbnQqPihub2RlKCkpLT5jbGlwUGF0
aFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9Y
KSB7CisgICAgICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+b2JqZWN0
Qm91bmRpbmdCb3goKTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICAg
ICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5k
aW5nQm94LnkoKSk7CisgICAgICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91
bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOworICAgICAgICBy
ZXR1cm4gdHJhbnNmb3JtLm1hcFJlY3QobV9jbGlwQm91bmRhcmllcyk7CisgICAgfQorCisgICAg
cmV0dXJuIG1fY2xpcEJvdW5kYXJpZXM7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xp
cHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmgJKHJldmlzaW9uIDc1MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmg6NzUzNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXJfaAorI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXJfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUg
IkludFNpemUuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuaCIKKyNpbmNsdWRlICJTVkdDbGlwUGF0aEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdVbml0VHlwZXMuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBDbGlwcGVyRGF0
YSA6IEZhc3RBbGxvY0Jhc2UgeworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gY2xpcE1hc2tJbWFn
ZTsKK307CisKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciA6IHB1YmxpYyBSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lciB7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyKFNWR0NsaXBQYXRoRWxlbWVudCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlcigpOworCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qg
eyByZXR1cm4gIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciI7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRy
dWUpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0
KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wg
YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4
dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOworICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kik7CisKKyAgICB2aXJ0dWFsIFJlbmRl
clNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCB7IHJldHVybiBDbGlwcGVyUmVz
b3VyY2VUeXBlOyB9CisgICAgCisgICAgYm9vbCBoaXRUZXN0Q2xpcENvbnRlbnQoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYpOworCisgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0
VHlwZSBjbGlwUGF0aFVuaXRzKCkgY29uc3QgeyByZXR1cm4gdG9Vbml0VHlwZShzdGF0aWNfY2Fz
dDxTVkdDbGlwUGF0aEVsZW1lbnQqPihub2RlKCkpLT5jbGlwUGF0aFVuaXRzKCkpOyB9CisKKyAg
ICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBlOworcHJpdmF0ZToK
KyAgICAvLyBjbGlwUGF0aCBjYW4gYmUgY2xpcHBlZCB0b28sIGJ1dCBkb24ndCBoYXZlIGEgYm91
bmRpbmdCb3ggb3IgcmVwYWludFJlY3QuIFNvIHdlIGNhbid0IGNhbGwKKyAgICAvLyBhcHBseVJl
c291cmNlIGRpcmVjdGx5IGFuZCB1c2UgdGhlIHJlY3RzIGZyb20gdGhlIG9iamVjdCwgc2luY2Ug
dGhleSBhcmUgZW1wdHkgZm9yIFJlbmRlclNWR1Jlc291cmNlcworICAgIGJvb2wgYXBwbHlDbGlw
cGluZ1RvQ29udGV4dChSZW5kZXJPYmplY3QqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBHcmFwaGljc0NvbnRleHQqKTsKKyAgICBib29sIHBhdGhPbmx5Q2xpcHBpbmcoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgYm9vbCBkcmF3Q29udGVudElu
dG9NYXNrSW1hZ2UoQ2xpcHBlckRhdGEqLCBjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5n
Qm94KTsKKyAgICB2b2lkIGNhbGN1bGF0ZUNsaXBDb250ZW50UmVwYWludFJlY3QoKTsKKworICAg
IGJvb2wgbV9pbnZhbGlkYXRpb25CbG9ja2VkOworICAgIEZsb2F0UmVjdCBtX2NsaXBCb3VuZGFy
aWVzOworICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQ2xpcHBlckRhdGEqPiBtX2NsaXBwZXI7
Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAko
cmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lci5jcHA6NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgorCisj
aW5jbHVkZSAiUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIuaCIKKyNpbmNsdWRlICJT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBpbmxpbmUgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBzdmdFeHRlbnNpb25zRnJvbU5v
ZGUoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKG5vZGUtPmRv
Y3VtZW50KCkpOworICAgIHJldHVybiBub2RlLT5kb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNp
b25zKCk7Cit9CisKK1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHSGlkZGVu
Q29udGFpbmVyKG5vZGUpCisgICAgLCBtX2lkKG5vZGUtPmhhc0lEKCkgPyBub2RlLT5nZXRJZEF0
dHJpYnV0ZSgpIDogbnVsbEF0b20pCisgICAgLCBtX3JlZ2lzdGVyZWQoZmFsc2UpCit7Cit9CisK
K1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjp+UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIo
KQoreworICAgIGlmIChtX3JlZ2lzdGVyZWQpCisgICAgICAgIHN2Z0V4dGVuc2lvbnNGcm9tTm9k
ZShub2RlKCkpLT5yZW1vdmVSZXNvdXJjZShtX2lkKTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lcjo6bGF5b3V0KCkKK3sKKyAgICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJj
ZXMgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgorICAgIGlmIChtX2V2ZXJIYWRMYXlvdXQgJiYgc2Vs
Zk5lZWRzTGF5b3V0KCkpCisgICAgICAgIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoKTsKKwor
ICAgIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6bGF5b3V0KCk7Cit9CisKK3ZvaWQgUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXI6OmRlc3Ryb3koKQoreworICAgIFNWR1Jlc291cmNlc0NhY2hl
OjpyZXNvdXJjZURlc3Ryb3llZCh0aGlzKTsKKyAgICBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6
OmRlc3Ryb3koKTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6c3R5bGVE
aWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZSkKK3sKKyAgICBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OnN0eWxlRGlkQ2hhbmdlKGRpZmYs
IG9sZFN0eWxlKTsKKworICAgIGlmICghbV9yZWdpc3RlcmVkKSB7CisgICAgICAgIG1fcmVnaXN0
ZXJlZCA9IHRydWU7CisgICAgICAgIHJlZ2lzdGVyUmVzb3VyY2UoKTsKKyAgICB9Cit9CisKK3Zv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OmlkQ2hhbmdlZCgpCit7CisgICAgLy8gSW52
YWxpZGF0ZSBhbGwgb3VyIGN1cnJlbnQgY2xpZW50cy4KKyAgICByZW1vdmVBbGxDbGllbnRzRnJv
bUNhY2hlKCk7CisKKyAgICAvLyBSZW1vdmUgb2xkIGlkLCB0aGF0IGlzIGd1YXJhbnRlZWQgdG8g
YmUgcHJlc2VudCBpbiBjYWNoZS4KKyAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lv
bnMgPSBzdmdFeHRlbnNpb25zRnJvbU5vZGUobm9kZSgpKTsKKyAgICBleHRlbnNpb25zLT5yZW1v
dmVSZXNvdXJjZShtX2lkKTsKKyAgICBtX2lkID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUo
KSktPmdldElkQXR0cmlidXRlKCk7CisKKyAgICByZWdpc3RlclJlc291cmNlKCk7Cit9CisKK3Zv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6Om1hcmtBbGxDbGllbnRzRm9ySW52YWxpZGF0
aW9uKEludmFsaWRhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobV9jbGllbnRzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBuZWVkc0xheW91dCA9IG1vZGUgPT0gTGF5
b3V0QW5kQm91bmRhcmllc0ludmFsaWRhdGlvbjsKKyAgICBib29sIG1hcmtGb3JJbnZhbGlkYXRp
b24gPSBtb2RlICE9IFBhcmVudE9ubHlJbnZhbGlkYXRpb247CisKKyAgICBIYXNoU2V0PFJlbmRl
ck9iamVjdCo+OjppdGVyYXRvciBlbmQgPSBtX2NsaWVudHMuZW5kKCk7CisgICAgZm9yIChIYXNo
U2V0PFJlbmRlck9iamVjdCo+OjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBjbGllbnQgPSAqaXQ7CisgICAg
ICAgIGlmIChjbGllbnQtPmlzU1ZHUmVzb3VyY2VDb250YWluZXIoKSkgeworICAgICAgICAgICAg
Y2xpZW50LT50b1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKCktPnJlbW92ZUFsbENsaWVudHNG
cm9tQ2FjaGUobWFya0ZvckludmFsaWRhdGlvbik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtYXJrRm9ySW52YWxpZGF0aW9uKQorICAgICAgICAgICAg
bWFya0NsaWVudEZvckludmFsaWRhdGlvbihjbGllbnQsIG1vZGUpOworCisgICAgICAgIGlmIChu
ZWVkc0xheW91dCkKKyAgICAgICAgICAgIGNsaWVudC0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CisK
KyAgICAgICAgLy8gSW52YWxpZGF0ZSByZXNvdXJjZXMgaW4gYW5jZXN0b3IgY2hhaW4sIGlmIG5l
ZWRlZC4KKyAgICAgICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gY2xpZW50LT5wYXJlbnQoKTsK
KyAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50LT5pc1NW
R1Jlc291cmNlQ29udGFpbmVyKCkpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50LT50b1JlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyKCktPnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUobWFya0Zv
ckludmFsaWRhdGlvbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnQoKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6bWFya0NsaWVudEZvcklu
dmFsaWRhdGlvbihSZW5kZXJPYmplY3QqIGNsaWVudCwgSW52YWxpZGF0aW9uTW9kZSBtb2RlKQor
eworICAgIEFTU0VSVChjbGllbnQpOworICAgIEFTU0VSVCghbV9jbGllbnRzLmlzRW1wdHkoKSk7
CisKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIExheW91dEFuZEJvdW5kYXJpZXNJbnZh
bGlkYXRpb246CisgICAgY2FzZSBCb3VuZGFyaWVzSW52YWxpZGF0aW9uOgorICAgICAgICBjbGll
bnQtPnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFJlcGFpbnRJbnZhbGlkYXRpb246CisgICAgICAgIGlmIChjbGllbnQtPnZpZXcoKSkKKyAgICAg
ICAgICAgIGNsaWVudC0+cmVwYWludCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhcmVu
dE9ubHlJbnZhbGlkYXRpb246CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6YWRkQ2xpZW50KFJlbmRlck9iamVjdCogY2xpZW50KQor
eworICAgIEFTU0VSVChjbGllbnQpOworICAgIG1fY2xpZW50cy5hZGQoY2xpZW50KTsKK30KKwor
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6cmVtb3ZlQ2xpZW50KFJlbmRlck9iamVj
dCogY2xpZW50KQoreworICAgIEFTU0VSVChjbGllbnQpOworICAgIG1fY2xpZW50cy5yZW1vdmUo
Y2xpZW50KTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6cmVnaXN0ZXJS
ZXNvdXJjZSgpCit7CisgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25zID0gc3Zn
RXh0ZW5zaW9uc0Zyb21Ob2RlKG5vZGUoKSk7CisgICAgaWYgKCFleHRlbnNpb25zLT5pc1BlbmRp
bmdSZXNvdXJjZShtX2lkKSkgeworICAgICAgICBleHRlbnNpb25zLT5hZGRSZXNvdXJjZShtX2lk
LCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE93blB0cjxTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OlNWR1BlbmRpbmdFbGVtZW50cz4gY2xpZW50cyhleHRlbnNpb25zLT5yZW1v
dmVQZW5kaW5nUmVzb3VyY2UobV9pZCkpOworCisgICAgLy8gQ2FjaGUgdXMgd2l0aCB0aGUgbmV3
IGlkLgorICAgIGV4dGVuc2lvbnMtPmFkZFJlc291cmNlKG1faWQsIHRoaXMpOworCisgICAgLy8g
VXBkYXRlIGNhY2hlZCByZXNvdXJjZXMgb2YgcGVuZGluZyBjbGllbnRzLgorICAgIGNvbnN0IFNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6U1ZHUGVuZGluZ0VsZW1lbnRzOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBjbGllbnRzLT5lbmQoKTsKKyAgICBmb3IgKFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6U1ZH
UGVuZGluZ0VsZW1lbnRzOjpjb25zdF9pdGVyYXRvciBpdCA9IGNsaWVudHMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gKCppdCkt
PnJlbmRlcmVyKCk7CisgICAgICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFVwZGF0ZWRGcm9tRWxlbWVudChy
ZW5kZXJlciwgcmVuZGVyZXItPnN0eWxlKCkpOworICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNM
YXlvdXQodHJ1ZSk7CisgICAgfQorfQorCisvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCBiZWxvbmcg
aGVyZS4KK0FmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6dHJhbnNm
b3JtT25Ob25TY2FsaW5nU3Ryb2tlKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHJlc291cmNlVHJhbnNmb3JtKQoreworICAgIGlmICghb2JqZWN0LT5pc1NWR1Bh
dGgoKSkKKyAgICAgICAgcmV0dXJuIHJlc291cmNlVHJhbnNmb3JtOworCisgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCo+KG9iamVjdC0+bm9kZSgpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
dHJhbnNmb3JtID0gcmVzb3VyY2VUcmFuc2Zvcm07CisgICAgdHJhbnNmb3JtLm11bHRpcGx5KGVs
ZW1lbnQtPmdldFNjcmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpKTsK
KyAgICByZXR1cm4gdHJhbnNmb3JtOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuaAkocmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oOjc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXJfaAorI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcl9oCisKKyNp
ZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIgorI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgUmVuZGVy
U1ZHUmVzb3VyY2UgeworcHVibGljOgorICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKFNW
R1N0eWxlZEVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
cigpOworCisgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOworICAgIHZpcnR1YWwgdm9pZCBkZXN0
cm95KCk7CisgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Jl
c291cmNlQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoKSB7
IHJldHVybiB0aGlzOyB9CisKKyAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybU9u
Tm9uU2NhbGluZ1N0cm9rZShSZW5kZXJPYmplY3QqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHJl
c291cmNlVHJhbnNmb3JtKTsKKworICAgIHZvaWQgaWRDaGFuZ2VkKCk7CisKK3Byb3RlY3RlZDoK
KyAgICBlbnVtIEludmFsaWRhdGlvbk1vZGUgeworICAgICAgICBMYXlvdXRBbmRCb3VuZGFyaWVz
SW52YWxpZGF0aW9uLAorICAgICAgICBCb3VuZGFyaWVzSW52YWxpZGF0aW9uLAorICAgICAgICBS
ZXBhaW50SW52YWxpZGF0aW9uLAorICAgICAgICBQYXJlbnRPbmx5SW52YWxpZGF0aW9uCisgICAg
fTsKKworICAgIC8vIFVzZWQgZnJvbSB0aGUgaW52YWxpZGF0ZUNsaWVudC9pbnZhbGlkYXRlQ2xp
ZW50cyBtZXRob2RzIGZyb20gY2xhc3NlcywgaW5oZXJpdGluZyBmcm9tIHVzLgorICAgIHZvaWQg
bWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24oSW52YWxpZGF0aW9uTW9kZSk7CisgICAgdm9p
ZCBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKFJlbmRlck9iamVjdCosIEludmFsaWRhdGlvbk1v
ZGUpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTVkdSZXNvdXJjZXNDYWNoZTsKKyAg
ICB2b2lkIGFkZENsaWVudChSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChS
ZW5kZXJPYmplY3QqKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHJlZ2lzdGVyUmVzb3VyY2UoKTsK
KworICAgIEF0b21pY1N0cmluZyBtX2lkOworICAgIGJvb2wgbV9yZWdpc3RlcmVkOworICAgIEhh
c2hTZXQ8UmVuZGVyT2JqZWN0Kj4gbV9jbGllbnRzOworfTsKKworaW5saW5lIFJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyKiBnZXRSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lckJ5SWQoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkKQoreworICAgIGlmIChpZC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyKiByZW5kZXJSZXNvdXJjZSA9IGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkt
PnJlc291cmNlQnlJZChpZCkpCisgICAgICAgIHJldHVybiByZW5kZXJSZXNvdXJjZTsKKworICAg
IHJldHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZW5kZXJlcj4KK1JlbmRlcmVyKiBn
ZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNT
dHJpbmcmIGlkKQoreworICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogY29udGFp
bmVyID0gZ2V0UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXJCeUlkKGRvY3VtZW50LCBpZCkpCisg
ICAgICAgIHJldHVybiBjb250YWluZXItPmNhc3Q8UmVuZGVyZXI+KCk7CisKKyAgICByZXR1cm4g
MDsKK30KKworfQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHJldmlz
aW9uIDc1MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwOjc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZS5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIu
aCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJUb29s
cy5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5o
IgorI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgorCisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFt
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitzdGF0aWMgY29uc3QgZmxvYXQga01heEZp
bHRlclNpemUgPSA1MDAwLjBmOworCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1JlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6c19yZXNvdXJjZVR5cGUgPSBGaWx0ZXJSZXNvdXJjZVR5cGU7CisKK1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcihTVkdGaWx0ZXJFbGVtZW50KiBub2Rl
KQorICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKK3sKK30KKworUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6On5SZW5kZXJTVkdSZXNvdXJjZUZpbHRlcigpCit7CisgICAgaWYg
KG1fZmlsdGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlQWxsVmFs
dWVzKG1fZmlsdGVyKTsKKyAgICBtX2ZpbHRlci5jbGVhcigpOworfQorCit2b2lkIFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyOjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0Zvcklu
dmFsaWRhdGlvbikKK3sKKyAgICBpZiAoIW1fZmlsdGVyLmlzRW1wdHkoKSkgeworICAgICAgICBk
ZWxldGVBbGxWYWx1ZXMobV9maWx0ZXIpOworICAgICAgICBtX2ZpbHRlci5jbGVhcigpOworICAg
IH0KKworICAgIG1hcmtBbGxDbGllbnRzRm9ySW52YWxpZGF0aW9uKG1hcmtGb3JJbnZhbGlkYXRp
b24gPyBMYXlvdXRBbmRCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFyZW50T25seUludmFsaWRh
dGlvbik7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJlbW92ZUNsaWVudEZy
b21DYWNoZShSZW5kZXJPYmplY3QqIGNsaWVudCwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uKQor
eworICAgIEFTU0VSVChjbGllbnQpOworCisgICAgaWYgKG1fZmlsdGVyLmNvbnRhaW5zKGNsaWVu
dCkpCisgICAgICAgIGRlbGV0ZSBtX2ZpbHRlci50YWtlKGNsaWVudCk7CisKKyAgICBtYXJrQ2xp
ZW50Rm9ySW52YWxpZGF0aW9uKGNsaWVudCwgbWFya0ZvckludmFsaWRhdGlvbiA/IEJvdW5kYXJp
ZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKK30KKworUGFzc1JlZlB0
cjxTVkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRp
dmVzKEZpbHRlciogZmlsdGVyKQoreworICAgIFNWR0ZpbHRlckVsZW1lbnQqIGZpbHRlckVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBib29sIHBy
aW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9IGZpbHRlckVsZW1lbnQtPnByaW1pdGl2ZVVuaXRzKCkg
PT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOworCisgICAg
Ly8gQWRkIGVmZmVjdHMgdG8gdGhlIGJ1aWxkZXIKKyAgICBSZWZQdHI8U1ZHRmlsdGVyQnVpbGRl
cj4gYnVpbGRlciA9IFNWR0ZpbHRlckJ1aWxkZXI6OmNyZWF0ZShmaWx0ZXIpOworICAgIGZvciAo
Tm9kZSogbm9kZSA9IGZpbHRlckVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5v
ZGUtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5pc1NWR0VsZW1lbnQoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSk7CisgICAgICAgIGlmICghZWxlbWVudC0+aXNG
aWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyogZWZmZWN0RWxlbWVudCA9IHN0YXRpY19jYXN0
PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyo+KGVsZW1lbnQpOworICAgICAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LT5idWlsZChidWls
ZGVyLmdldCgpLCBmaWx0ZXIpOworICAgICAgICBpZiAoIWVmZmVjdCkgeworICAgICAgICAgICAg
YnVpbGRlci0+Y2xlYXJFZmZlY3RzKCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0
KTsKKyAgICAgICAgZWZmZWN0RWxlbWVudC0+c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKHByaW1pdGl2
ZUJvdW5kaW5nQm94TW9kZSwgZWZmZWN0LmdldCgpKTsKKyAgICAgICAgYnVpbGRlci0+YWRkKGVm
ZmVjdEVsZW1lbnQtPnJlc3VsdCgpLCBlZmZlY3QpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRl
ci5yZWxlYXNlKCk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmZpdHNJbk1h
eGltdW1JbWFnZVNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBGbG9hdFNpemUmIHNjYWxlKQor
eworICAgIGJvb2wgbWF0Y2hlc0ZpbHRlclNpemUgPSB0cnVlOworICAgIGlmIChzaXplLndpZHRo
KCkgPiBrTWF4RmlsdGVyU2l6ZSkgeworICAgICAgICBzY2FsZS5zZXRXaWR0aChzY2FsZS53aWR0
aCgpICoga01heEZpbHRlclNpemUgLyBzaXplLndpZHRoKCkpOworICAgICAgICBtYXRjaGVzRmls
dGVyU2l6ZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoc2l6ZS5oZWlnaHQoKSA+IGtNYXhGaWx0
ZXJTaXplKSB7CisgICAgICAgIHNjYWxlLnNldEhlaWdodChzY2FsZS5oZWlnaHQoKSAqIGtNYXhG
aWx0ZXJTaXplIC8gc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1hdGNoZXNGaWx0ZXJTaXplID0g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIG1hdGNoZXNGaWx0ZXJTaXplOworfQorCitib29s
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNo
b3J0IHJlc291cmNlTW9kZSkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQoY29u
dGV4dCk7CisjaWZuZGVmIE5ERUJVRworICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgPT0gQXBwbHlU
b0RlZmF1bHRNb2RlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlc291cmNlTW9kZSk7Cisj
ZW5kaWYKKworICAgIC8vIFJldHVybmluZyBmYWxzZSBoZXJlLCB0byBhdm9pZCBkcmF3aW5ncyBv
bnRvIHRoZSBjb250ZXh0LiBXZSBqdXN0IHdhbnQgdG8KKyAgICAvLyBkcmF3IHRoZSBzdG9yZWQg
ZmlsdGVyIG91dHB1dCwgbm90IHRoZSB1bmZpbHRlcmVkIG9iamVjdCBhcyB3ZWxsLgorICAgIGlm
IChtX2ZpbHRlci5jb250YWlucyhvYmplY3QpKSB7CisgICAgICAgIEZpbHRlckRhdGEqIGZpbHRl
ckRhdGEgPSBtX2ZpbHRlci5nZXQob2JqZWN0KTsKKyAgICAgICAgaWYgKGZpbHRlckRhdGEtPmJ1
aWxkZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZGVsZXRlIG1fZmls
dGVyLnRha2Uob2JqZWN0KTsgLy8gT29wcywgaGF2ZSB0byByZWJ1aWxkLCBnbyB0aHJvdWdoIG5v
cm1hbCBjb2RlIHBhdGgKKyAgICB9CisKKyAgICBPd25QdHI8RmlsdGVyRGF0YT4gZmlsdGVyRGF0
YShuZXcgRmlsdGVyRGF0YSk7CisgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gb2Jq
ZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOworCisgICAgU1ZHRmlsdGVyRWxlbWVudCogZmlsdGVy
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQqPihub2RlKCkpOworICAgIGZp
bHRlckRhdGEtPmJvdW5kYXJpZXMgPSBmaWx0ZXJFbGVtZW50LT5maWx0ZXJCb3VuZGluZ0JveCh0
YXJnZXRCb3VuZGluZ0JveCk7CisgICAgaWYgKGZpbHRlckRhdGEtPmJvdW5kYXJpZXMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUg
dHJhbnNmb3JtYXRpb24gbWF0cml4IGZvciBmaWx0ZXIuIAorICAgIEFmZmluZVRyYW5zZm9ybSBh
YnNvbHV0ZVRyYW5zZm9ybTsKKyAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVUcmFu
c2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbShvYmplY3QsIGFic29sdXRl
VHJhbnNmb3JtKTsKKyAgICBpZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBFbGltaW5hdGUgc2hlYXIgb2YgdGhlIGFi
c29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgdG8gYmUgYWJsZSB0byBwcm9kdWNlIHVuc2hl
YXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxlLgorICAgIGZpbHRlckRhdGEtPnNoZWFyRnJlZUFi
c29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtLnhTY2Fs
ZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSwgYWJzb2x1dGVUcmFuc2Zvcm0u
ZSgpLCBhYnNvbHV0ZVRyYW5zZm9ybS5mKCkpOworCisgICAgLy8gRGV0ZXJtaW5lIGFic29sdXRl
IGJvdW5kYXJpZXMgb2YgdGhlIGZpbHRlciBhbmQgdGhlIGRyYXdpbmcgcmVnaW9uLgorICAgIEZs
b2F0UmVjdCBhYnNvbHV0ZUZpbHRlckJvdW5kYXJpZXMgPSBmaWx0ZXJEYXRhLT5zaGVhckZyZWVB
YnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOworICAgIEZs
b2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gb2JqZWN0LT5zdHJva2VCb3VuZGluZ0JveCgpOworICAg
IGRyYXdpbmdSZWdpb24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOworICAgIEZs
b2F0UmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNv
bHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGRyYXdpbmdSZWdpb24pOworCisgICAgLy8gQ3JlYXRlIHRo
ZSBTVkdGaWx0ZXIgb2JqZWN0LgorICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0g
ZmlsdGVyRWxlbWVudC0+cHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklU
X1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CisgICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmls
dGVyOjpjcmVhdGUoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0sIGFic29s
dXRlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlckRhdGEtPmJvdW5kYXJp
ZXMsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSk7CisKKyAgICAvLyBDcmVhdGUgYWxsIHJlbGV2
YW50IGZpbHRlciBwcmltaXRpdmVzLgorICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBidWlsZFBy
aW1pdGl2ZXMoZmlsdGVyRGF0YS0+ZmlsdGVyLmdldCgpKTsKKyAgICBpZiAoIWZpbHRlckRhdGEt
PmJ1aWxkZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUg
c2NhbGUgZmFjdG9yIGZvciB0aGUgdXNlIG9mIGZpbHRlclJlcy4KKyAgICAvLyBBbHNvIHNlZSBo
dHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI0ZpbHRlckVmZmVjdHNSZWdpb24K
KyAgICBGbG9hdFNpemUgc2NhbGUoMSwgMSk7CisgICAgaWYgKGZpbHRlckVsZW1lbnQtPmhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6ZmlsdGVyUmVzQXR0cikpIHsKKyAgICAgICAgc2NhbGUuc2V0V2lk
dGgoZmlsdGVyRWxlbWVudC0+ZmlsdGVyUmVzWCgpIC8gYWJzb2x1dGVGaWx0ZXJCb3VuZGFyaWVz
LndpZHRoKCkpOworICAgICAgICBzY2FsZS5zZXRIZWlnaHQoZmlsdGVyRWxlbWVudC0+ZmlsdGVy
UmVzWSgpIC8gYWJzb2x1dGVGaWx0ZXJCb3VuZGFyaWVzLmhlaWdodCgpKTsKKyAgICB9CisKKyAg
ICBpZiAoc2NhbGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBE
ZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIuIFRoZSBzaXplIG9mIGludGVybWVkaWF0
ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dlciB0aGFuIGtNYXhGaWx0ZXJTaXplLgor
ICAgIEZsb2F0UmVjdCB0ZW1wU291cmNlUmVjdCA9IGFic29sdXRlRHJhd2luZ1JlZ2lvbjsKKyAg
ICB0ZW1wU291cmNlUmVjdC5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Cisg
ICAgZml0c0luTWF4aW11bUltYWdlU2l6ZSh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxlKTsK
KworICAgIC8vIFNldCB0aGUgc2NhbGUgbGV2ZWwgaW4gU1ZHRmlsdGVyLgorICAgIGZpbHRlckRh
dGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7CisKKyAgICBGaWx0ZXJFZmZl
Y3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCk7CisgICAg
aWYgKCFsYXN0RWZmZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlclByaW1pdGl2ZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KGxhc3RFZmZlY3QsIGZpbHRlckRhdGEtPmZpbHRlci5nZXQoKSk7CisgICAgRmxvYXRSZWN0IHN1
YlJlZ2lvbiA9IGxhc3RFZmZlY3QtPm1heEVmZmVjdFJlY3QoKTsKKyAgICAvLyBBdCBsZWFzdCBv
bmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKKyAgICAvLyByZWNhbGN1
bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCisgICAgaWYgKCFm
aXRzSW5NYXhpbXVtSW1hZ2VTaXplKHN1YlJlZ2lvbi5zaXplKCksIHNjYWxlKSkgeworICAgICAg
ICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOworICAgICAg
ICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKGxhc3RFZmZlY3QsIGZpbHRlckRhdGEtPmZpbHRlci5nZXQoKSk7CisgICAg
fQorCisgICAgLy8gSWYgdGhlIGRyYXdpbmdSZWdpb24gaXMgZW1wdHksIHdlIGhhdmUgc29tZXRo
aW5nIGxpa2UgPGcgZmlsdGVyPSIuLiIvPi4KKyAgICAvLyBFdmVuIGlmIHRoZSB0YXJnZXQgb2Jq
ZWN0Qm91bmRpbmdCb3goKSBpcyBlbXB0eSwgd2Ugc3RpbGwgaGF2ZSB0byBkcmF3IHRoZSBsYXN0
IGVmZmVjdCByZXN1bHQgaW1hZ2UgaW4gcG9zdEFwcGx5UmVzb3VyY2UuCisgICAgaWYgKGRyYXdp
bmdSZWdpb24uaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVCghbV9maWx0ZXIuY29udGFpbnMo
b2JqZWN0KSk7CisgICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9IGNvbnRleHQ7Cisg
ICAgICAgIG1fZmlsdGVyLnNldChvYmplY3QsIGZpbHRlckRhdGEubGVha1B0cigpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGFic29sdXRlRHJhd2luZ1JlZ2lvbi5zY2Fs
ZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CisKKyAgICBPd25QdHI8SW1hZ2VCdWZm
ZXI+IHNvdXJjZUdyYXBoaWM7CisgICAgaWYgKCFTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJ
bWFnZUJ1ZmZlcihhYnNvbHV0ZURyYXdpbmdSZWdpb24sIGFic29sdXRlRHJhd2luZ1JlZ2lvbiwg
c291cmNlR3JhcGhpYywgQ29sb3JTcGFjZUxpbmVhclJHQikpIHsKKyAgICAgICAgQVNTRVJUKCFt
X2ZpbHRlci5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250
ZXh0ID0gY29udGV4dDsKKyAgICAgICAgbV9maWx0ZXIuc2V0KG9iamVjdCwgZmlsdGVyRGF0YS5s
ZWFrUHRyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIEdyYXBo
aWNzQ29udGV4dCogc291cmNlR3JhcGhpY0NvbnRleHQgPSBzb3VyY2VHcmFwaGljLT5jb250ZXh0
KCk7CisgICAgQVNTRVJUKHNvdXJjZUdyYXBoaWNDb250ZXh0KTsKKyAgCisgICAgc291cmNlR3Jh
cGhpY0NvbnRleHQtPnRyYW5zbGF0ZSgtYWJzb2x1dGVEcmF3aW5nUmVnaW9uLngoKSwgLWFic29s
dXRlRHJhd2luZ1JlZ2lvbi55KCkpOworICAgIGlmIChzY2FsZS53aWR0aCgpICE9IDEgfHwgc2Nh
bGUuaGVpZ2h0KCkgIT0gMSkKKyAgICAgICAgc291cmNlR3JhcGhpY0NvbnRleHQtPnNjYWxlKHNj
YWxlKTsKKworICAgIHNvdXJjZUdyYXBoaWNDb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS0+
c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOworICAgIHNvdXJjZUdyYXBoaWNDb250ZXh0LT5j
bGVhclJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNp
emUoKSkpOworICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBzb3VyY2VHcmFw
aGljLnJlbGVhc2UoKTsKKyAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0Owor
CisgICAgY29udGV4dCA9IHNvdXJjZUdyYXBoaWNDb250ZXh0OworCisgICAgQVNTRVJUKCFtX2Zp
bHRlci5jb250YWlucyhvYmplY3QpKTsKKyAgICBtX2ZpbHRlci5zZXQob2JqZWN0LCBmaWx0ZXJE
YXRhLmxlYWtQdHIoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdy
YXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29u
c3QgUGF0aCopCit7CisgICAgQVNTRVJUKG9iamVjdCk7CisgICAgQVNTRVJUKGNvbnRleHQpOwor
I2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQocmVzb3VyY2VNb2RlID09IEFwcGx5VG9EZWZhdWx0
TW9kZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXNvdXJjZU1vZGUpOworI2VuZGlmCisK
KyAgICBpZiAoIW1fZmlsdGVyLmNvbnRhaW5zKG9iamVjdCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEZpbHRlckRhdGEqIGZpbHRlckRhdGEgPSBtX2ZpbHRlci5nZXQob2JqZWN0KTsKKyAgICBp
ZiAoIWZpbHRlckRhdGEtPmJ1aWxkZWQpIHsKKyAgICAgICAgaWYgKCFmaWx0ZXJEYXRhLT5zYXZl
ZENvbnRleHQpIHsKKyAgICAgICAgICAgIHJlbW92ZUNsaWVudEZyb21DYWNoZShvYmplY3QpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29udGV4dCA9IGZpbHRl
ckRhdGEtPnNhdmVkQ29udGV4dDsKKyAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0g
MDsKKyNpZiAhUExBVEZPUk0oQ0cpCisgICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zb3VyY2VHcmFw
aGljQnVmZmVyKQorICAgICAgICAgICAgZmlsdGVyRGF0YS0+c291cmNlR3JhcGhpY0J1ZmZlci0+
dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlRGV2aWNlUkdCLCBDb2xvclNwYWNlTGluZWFy
UkdCKTsKKyNlbmRpZgorICAgIH0KKworICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGZp
bHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKKyAgICAKKyAgICBpZiAobGFzdEVmZmVj
dCAmJiAhZmlsdGVyRGF0YS0+Ym91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxhc3RFZmZlY3QtPmZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBUaGlzIGlz
IHRoZSByZWFsIGZpbHRlcmluZyBvZiB0aGUgb2JqZWN0LiBJdCBqdXN0IG5lZWRzIHRvIGJlIGNh
bGxlZCBvbiB0aGUKKyAgICAgICAgLy8gaW5pdGlhbCBmaWx0ZXJpbmcgcHJvY2Vzcy4gV2UganVz
dCB0YWtlIHRoZSBzdG9yZWQgZmlsdGVyIHJlc3VsdCBvbiBhCisgICAgICAgIC8vIHNlY29uZCBk
cmF3aW5nLgorICAgICAgICBpZiAoIWZpbHRlckRhdGEtPmJ1aWxkZWQpIHsKKyAgICAgICAgICAg
IGZpbHRlckRhdGEtPmZpbHRlci0+c2V0U291cmNlSW1hZ2UoZmlsdGVyRGF0YS0+c291cmNlR3Jh
cGhpY0J1ZmZlci5yZWxlYXNlKCkpOworICAgICAgICAgICAgbGFzdEVmZmVjdC0+YXBwbHkoKTsK
KyNpZiAhUExBVEZPUk0oQ0cpCisgICAgICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2Ug
PSBsYXN0RWZmZWN0LT5hc0ltYWdlQnVmZmVyKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0SW1h
Z2UpCisgICAgICAgICAgICAgICAgcmVzdWx0SW1hZ2UtPnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29s
b3JTcGFjZUxpbmVhclJHQiwgQ29sb3JTcGFjZURldmljZVJHQik7CisjZW5kaWYKKyAgICAgICAg
ICAgIGZpbHRlckRhdGEtPmJ1aWxkZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFzdEVmZmVjdC0+YXNJbWFnZUJ1ZmZlcigpOworICAg
ICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShm
aWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5pbnZlcnNlKCkpOworCisgICAg
ICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEtPmZpbHRlci0+
ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIDEgLyBmaWx0ZXJEYXRhLT5maWx0ZXItPmZpbHRl
clJlc29sdXRpb24oKS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4dC0+Y2xpcChsYXN0
RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCkpOworICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdl
QnVmZmVyKHJlc3VsdEltYWdlLCBvYmplY3QtPnN0eWxlKCktPmNvbG9yU3BhY2UoKSwgbGFzdEVm
ZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShm
aWx0ZXJEYXRhLT5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7CisKKyAgICAgICAgICAgIGNv
bnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgZmlsdGVyRGF0YS0+c291cmNlR3JhcGhpY0J1ZmZlci5j
bGVhcigpOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJlc291cmNl
Qm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKFNWR0ZpbHRlckVs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKSkK
KyAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmZpbHRlckJvdW5kaW5nQm94KG9iamVjdC0+b2JqZWN0
Qm91bmRpbmdCb3goKSk7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK30KKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuaAkocmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOjc1MzQ3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyX2gKKyNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXJfaAorCisjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCisjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgorI2luY2x1ZGUg
IlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCisjaW5j
bHVkZSAiU1ZHVW5pdFR5cGVzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RydWN0IEZpbHRlckRhdGEgeworICAgIEZpbHRlckRhdGEoKQorICAg
ICAgICA6IHNhdmVkQ29udGV4dCgwKQorICAgICAgICAsIGJ1aWxkZWQoZmFsc2UpCisgICAgewor
ICAgIH0KKworICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKKyAgICBSZWZQdHI8U1ZHRmls
dGVyQnVpbGRlcj4gYnVpbGRlcjsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBo
aWNCdWZmZXI7CisgICAgR3JhcGhpY3NDb250ZXh0KiBzYXZlZENvbnRleHQ7CisgICAgQWZmaW5l
VHJhbnNmb3JtIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtOworICAgIEZsb2F0UmVjdCBib3Vu
ZGFyaWVzOworICAgIEZsb2F0U2l6ZSBzY2FsZTsKKyAgICBib29sIGJ1aWxkZWQ7Cit9OworCitj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyIDog
cHVibGljIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcihTVkdGaWx0ZXJFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIoKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciI7IH0KKworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRh
dGlvbiA9IHRydWUpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBo
aWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOworICAgIHZpcnR1YWwg
dm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CisKKyAgICB2aXJ0dWFs
IEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopOworCisgICAgUGFz
c1JlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZFByaW1pdGl2ZXMoRmlsdGVyKik7CisKKyAg
ICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIGZpbHRlclVuaXRzKCkgY29uc3QgeyByZXR1cm4g
dG9Vbml0VHlwZShzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKS0+ZmlsdGVy
VW5pdHMoKSk7IH0KKyAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRz
KCkgY29uc3QgeyByZXR1cm4gdG9Vbml0VHlwZShzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50
Kj4obm9kZSgpKS0+cHJpbWl0aXZlVW5pdHMoKSk7IH0KKworICAgIHZpcnR1YWwgUmVuZGVyU1ZH
UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBl
OyB9CisgICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKKwor
cHJpdmF0ZToKKyAgICBib29sIGZpdHNJbk1heGltdW1JbWFnZVNpemUoY29uc3QgRmxvYXRTaXpl
JiwgRmxvYXRTaXplJik7CisKKyAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEZpbHRlckRhdGEq
PiBtX2ZpbHRlcjsKK307CisKK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuY3BwCShyZXZpc2lvbiA3NTM0NykJKGZyb20gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcDo3NTM0NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgWm9sdGFuIEhlcmN6ZWcKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoU1ZHKSAmJiBFTkFCTEUoRklMVEVSUykKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlclByaW1pdGl2ZS5oIgorCisjaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZTo6
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlckVmZmVjdCogZWZmZWN0LCBT
VkdGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBGbG9hdFJlY3QgdW5pdGVSZWN0OworICAgIEZsb2F0
UmVjdCBzdWJyZWdpb25Cb3VuZGluZ0JveCA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRhcmllcygpOwor
ICAgIEZsb2F0UmVjdCBzdWJyZWdpb24gPSBzdWJyZWdpb25Cb3VuZGluZ0JveDsKKworICAgIGlm
IChlZmZlY3QtPmZpbHRlckVmZmVjdFR5cGUoKSAhPSBGaWx0ZXJFZmZlY3RUeXBlVGlsZSkgewor
ICAgICAgICAvLyBGRVR1cmJ1bGVuY2UsIEZFSW1hZ2UgYW5kIEZFRmxvb2QgZG9uJ3QgaGF2ZSBp
bnB1dCBlZmZlY3RzLCB0YWtlIHRoZSBmaWx0ZXIgcmVnaW9uIGFzIHVuaXRlIHJlY3QuCisgICAg
ICAgIGlmICh1bnNpZ25lZCBudW1iZXJPZklucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZl
Y3RzKCkuc2l6ZSgpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZJbnB1dEVmZmVjdHM7ICsraSkKKyAgICAgICAgICAgICAgICB1bml0ZVJlY3QudW5pdGUo
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGVmZmVjdC0+aW5wdXRFZmZlY3QoaSks
IGZpbHRlcikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHVuaXRlUmVjdCA9IGZpbHRl
ci0+ZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZWZmZWN0LT5pbnB1dEVmZmVjdCgwKSwgZmls
dGVyKTsKKyAgICAgICAgdW5pdGVSZWN0ID0gZmlsdGVyLT5maWx0ZXJSZWdpb25JblVzZXJTcGFj
ZSgpOworICAgIH0KKworICAgIGlmIChmaWx0ZXItPmVmZmVjdEJvdW5kaW5nQm94TW9kZSgpKSB7
CisgICAgICAgIHN1YnJlZ2lvbiA9IHVuaXRlUmVjdDsKKyAgICAgICAgLy8gQXZvaWQgdGhlIGNh
bGxpbmcgb2YgYSB2aXJ0dWFsIG1ldGhvZCBzZXZlcmFsIHRpbWVzLgorICAgICAgICBGbG9hdFJl
Y3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXItPnRhcmdldEJvdW5kaW5nQm94KCk7CisKKyAg
ICAgICAgaWYgKGVmZmVjdC0+aGFzWCgpKQorICAgICAgICAgICAgc3VicmVnaW9uLnNldFgodGFy
Z2V0Qm91bmRpbmdCb3gueCgpICsgc3VicmVnaW9uQm91bmRpbmdCb3gueCgpICogdGFyZ2V0Qm91
bmRpbmdCb3gud2lkdGgoKSk7CisKKyAgICAgICAgaWYgKGVmZmVjdC0+aGFzWSgpKQorICAgICAg
ICAgICAgc3VicmVnaW9uLnNldFkodGFyZ2V0Qm91bmRpbmdCb3gueSgpICsgc3VicmVnaW9uQm91
bmRpbmdCb3gueSgpICogdGFyZ2V0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOworCisgICAgICAgIGlm
IChlZmZlY3QtPmhhc1dpZHRoKCkpCisgICAgICAgICAgICBzdWJyZWdpb24uc2V0V2lkdGgoc3Vi
cmVnaW9uQm91bmRpbmdCb3gud2lkdGgoKSAqIHRhcmdldEJvdW5kaW5nQm94LndpZHRoKCkpOwor
CisgICAgICAgIGlmIChlZmZlY3QtPmhhc0hlaWdodCgpKQorICAgICAgICAgICAgc3VicmVnaW9u
LnNldEhlaWdodChzdWJyZWdpb25Cb3VuZGluZ0JveC5oZWlnaHQoKSAqIHRhcmdldEJvdW5kaW5n
Qm94LmhlaWdodCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWVmZmVjdC0+aGFzWCgp
KQorICAgICAgICAgICAgc3VicmVnaW9uLnNldFgodW5pdGVSZWN0LngoKSk7CisKKyAgICAgICAg
aWYgKCFlZmZlY3QtPmhhc1koKSkKKyAgICAgICAgICAgIHN1YnJlZ2lvbi5zZXRZKHVuaXRlUmVj
dC55KCkpOworCisgICAgICAgIGlmICghZWZmZWN0LT5oYXNXaWR0aCgpKQorICAgICAgICAgICAg
c3VicmVnaW9uLnNldFdpZHRoKHVuaXRlUmVjdC53aWR0aCgpKTsKKworICAgICAgICBpZiAoIWVm
ZmVjdC0+aGFzSGVpZ2h0KCkpCisgICAgICAgICAgICBzdWJyZWdpb24uc2V0SGVpZ2h0KHVuaXRl
UmVjdC5oZWlnaHQoKSk7CisgICAgfQorCisgICAgZWZmZWN0LT5zZXRGaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oc3VicmVnaW9uKTsKKworICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVN1YnJlZ2lvbiA9
IGZpbHRlci0+bWFwTG9jYWxSZWN0VG9BYnNvbHV0ZVJlY3Qoc3VicmVnaW9uKTsKKyAgICBGbG9h
dFNpemUgZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpOworICAg
IGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24ud2lkdGgoKSwgZmlsdGVy
UmVzb2x1dGlvbi5oZWlnaHQoKSk7CisKKyAgICAvLyBGRUltYWdlIG5lZWRzIHRoZSB1bmNsaXBw
ZWQgc3VicmVnaW9uIGluIGFic29sdXRlIGNvb3JkaW5hdGVzIHRvIGRldGVybWluZSB0aGUgY29y
cmVjdAorICAgIC8vIGRlc3RpbmF0aW9uIHJlY3QgaW4gY29tYmluYXRpb24gd2l0aCBwcmVzZXJ2
ZUFzcGVjdFJhdGlvLgorICAgIGlmIChlZmZlY3QtPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0
ZXJFZmZlY3RUeXBlSW1hZ2UpCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8RkVJbWFnZSo+KGVm
ZmVjdCktPnNldEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9uKTsKKworICAgIC8v
IENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVyIHJlZ2lvbi4KKyAgICBGbG9h
dFJlY3QgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24gPSBmaWx0ZXItPmZpbHRlclJlZ2lvbigp
OworICAgIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24u
d2lkdGgoKSwgZmlsdGVyUmVzb2x1dGlvbi5oZWlnaHQoKSk7CisgICAgYWJzb2x1dGVTdWJyZWdp
b24uaW50ZXJzZWN0KGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uKTsKKworICAgIGVmZmVjdC0+
c2V0TWF4RWZmZWN0UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlU3VicmVnaW9uKSk7Cisg
ICAgcmV0dXJuIHN1YnJlZ2lvbjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlclByaW1pdGl2ZS5oCShyZXZpc2lvbiA3NTM0NykJKGZyb20gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmg6NzUzNDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBI
ZXJjemVnCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklW
RVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZF
UlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZV9o
CisjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlX2gKKworI2lmIEVOQUJM
RShTVkcpICYmIEVOQUJMRShGSUxURVJTKQorCisjaW5jbHVkZSAiUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUgOiBwdWJsaWMgUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyIHsKK3B1YmxpYzoKKworICAgIGV4cGxpY2l0IFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyUHJpbWl0aXZlKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyogZmls
dGVyUHJpbWl0aXZlRWxlbWVudCkKKyAgICAgICAgOiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIo
ZmlsdGVyUHJpbWl0aXZlRWxlbWVudCkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhleSBkZXBl
bmQgb24gdGhlIFJlbmRlck9iamVjdCBhcmd1bWVudCBvZiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6YXBwbHlSZXNvdXJjZS4KKyAgICBzdGF0aWMgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXJFZmZlY3QqLCBTVkdGaWx0ZXIqKTsKKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUiOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
RklMVEVSUykKKworI2VuZGlmIC8vIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAkocmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDo3NTM0NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50LmgiCisKKyNpbmNsdWRlICJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCisj
aW5jbHVkZSAiU1ZHSW1hZ2VCdWZmZXJUb29scy5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBv
cnQuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
KFNWR0dyYWRpZW50RWxlbWVudCogbm9kZSkKKyAgICA6IFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyKG5vZGUpCisgICAgLCBtX3Nob3VsZENvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXModHJ1ZSkK
KyNpZiBQTEFURk9STShDRykKKyAgICAsIG1fc2F2ZWRDb250ZXh0KDApCisjZW5kaWYKK3sKK30K
KworUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6flJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQo
KQoreworICAgIGlmIChtX2dyYWRpZW50LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZGVsZXRlQWxsVmFsdWVzKG1fZ3JhZGllbnQpOworICAgIG1fZ3JhZGllbnQuY2xlYXIoKTsK
K30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjpyZW1vdmVBbGxDbGllbnRzRnJv
bUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbikKK3sKKyAgICBpZiAoIW1fZ3JhZGllbnQu
aXNFbXB0eSgpKSB7CisgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2dyYWRpZW50KTsKKyAgICAg
ICAgbV9ncmFkaWVudC5jbGVhcigpOworICAgIH0KKworICAgIG1fc2hvdWxkQ29sbGVjdEdyYWRp
ZW50QXR0cmlidXRlcyA9IHRydWU7CisgICAgbWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24o
bWFya0ZvckludmFsaWRhdGlvbiA/IFJlcGFpbnRJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52
YWxpZGF0aW9uKTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjpyZW1vdmVD
bGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiBjbGllbnQsIGJvb2wgbWFya0ZvckludmFsaWRh
dGlvbikKK3sKKyAgICBBU1NFUlQoY2xpZW50KTsKKworICAgIGlmIChtX2dyYWRpZW50LmNvbnRh
aW5zKGNsaWVudCkpCisgICAgICAgIGRlbGV0ZSBtX2dyYWRpZW50LnRha2UoY2xpZW50KTsKKwor
ICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9u
ID8gUmVwYWludEludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOworfQorCisj
aWYgUExBVEZPUk0oQ0cpCitzdGF0aWMgaW5saW5lIGJvb2wgY3JlYXRlTWFza0FuZFN3YXBDb250
ZXh0Rm9yVGV4dEdyYWRpZW50KEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNz
Q29udGV4dComIHNhdmVkQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZm
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIFJlbmRlck9iamVjdCogdGV4dFJv
b3RCbG9jayA9IFJlbmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3RvcihvYmpl
Y3QpOworICAgIEFTU0VSVCh0ZXh0Um9vdEJsb2NrKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBh
YnNvbHV0ZVRyYW5zZm9ybTsKKyAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVUcmFu
c2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbSh0ZXh0Um9vdEJsb2NrLCBh
YnNvbHV0ZVRyYW5zZm9ybSk7CisKKyAgICBGbG9hdFJlY3QgYWJzb2x1dGVUYXJnZXRSZWN0ID0g
YWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdCh0ZXh0Um9vdEJsb2NrLT5yZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpKTsKKyAgICBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVj
dCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5k
ZXJlcih0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRhcmdldFJlY3QpOworICAgIGlmIChjbGFtcGVk
QWJzb2x1dGVUYXJnZXRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2U7CisgICAgaWYgKCFTVkdJbWFnZUJ1ZmZl
clRvb2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihhYnNvbHV0ZVRhcmdldFJlY3QsIGNsYW1wZWRBYnNv
bHV0ZVRhcmdldFJlY3QsIG1hc2tJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9
IG1hc2tJbWFnZS0+Y29udGV4dCgpOworICAgIEFTU0VSVChtYXNrSW1hZ2VDb250ZXh0KTsKKwor
ICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVj
dC54KCksIC1jbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LnkoKSk7CisgICAgbWFza0ltYWdlQ29u
dGV4dC0+Y29uY2F0Q1RNKGFic29sdXRlVHJhbnNmb3JtKTsKKworICAgIEFTU0VSVChtYXNrSW1h
Z2UpOworICAgIHNhdmVkQ29udGV4dCA9IGNvbnRleHQ7CisgICAgY29udGV4dCA9IG1hc2tJbWFn
ZUNvbnRleHQ7CisgICAgaW1hZ2VCdWZmZXIgPSBtYXNrSW1hZ2UucmVsZWFzZSgpOworICAgIHJl
dHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSBjbGlwVG9UZXh0
TWFzayhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVjdCYgdGFy
Z2V0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl
bmRlck9iamVjdCogb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBib3VuZGluZ0JveE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50VHJhbnNm
b3JtKQoreworICAgIFJlbmRlck9iamVjdCogdGV4dFJvb3RCbG9jayA9IFJlbmRlclNWR1RleHQ6
OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3RvcihvYmplY3QpOworICAgIEFTU0VSVCh0ZXh0Um9v
dEJsb2NrKTsKKworICAgIHRhcmdldFJlY3QgPSB0ZXh0Um9vdEJsb2NrLT5yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNm
b3JtOworICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9P
dXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKHRleHRSb290QmxvY2ssIGFic29sdXRlVHJhbnNm
b3JtKTsKKworICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5z
Zm9ybS5tYXBSZWN0KHRhcmdldFJlY3QpOworICAgIEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1dGVU
YXJnZXRSZWN0ID0gU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVj
dEZvclJlbmRlcmVyKHRleHRSb290QmxvY2ssIGFic29sdXRlVGFyZ2V0UmVjdCk7CisKKyAgICBT
VkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGlwVG9JbWFnZUJ1ZmZlcihjb250ZXh0LCBhYnNvbHV0ZVRy
YW5zZm9ybSwgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCwgaW1hZ2VCdWZmZXIpOworCisgICAg
QWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKKyAgICBpZiAoYm91bmRpbmdCb3hNb2RlKSB7CisgICAg
ICAgIEZsb2F0UmVjdCBtYXNrQm91bmRpbmdCb3ggPSB0ZXh0Um9vdEJsb2NrLT5vYmplY3RCb3Vu
ZGluZ0JveCgpOworICAgICAgICBtYXRyaXgudHJhbnNsYXRlKG1hc2tCb3VuZGluZ0JveC54KCks
IG1hc2tCb3VuZGluZ0JveC55KCkpOworICAgICAgICBtYXRyaXguc2NhbGVOb25Vbmlmb3JtKG1h
c2tCb3VuZGluZ0JveC53aWR0aCgpLCBtYXNrQm91bmRpbmdCb3guaGVpZ2h0KCkpOworICAgIH0K
KyAgICBtYXRyaXgubXVsdExlZnQoZ3JhZGllbnRUcmFuc2Zvcm0pOworICAgIHJldHVybiBtYXRy
aXg7Cit9CisjZW5kaWYKKworYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSogc3R5bGUsIEdyYXBoaWNz
Q29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkKK3sKKyAgICBB
U1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQoc3R5bGUpOworICAgIEFTU0VSVChjb250ZXh0KTsK
KyAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CisKKyAgICAv
LyBCZSBzdXJlIHRvIHN5bmNocm9uaXplIGFsbCBTVkcgcHJvcGVydGllcyBvbiB0aGUgZ3JhZGll
bnRFbGVtZW50IF9iZWZvcmVfIHByb2Nlc3NpbmcgYW55IGZ1cnRoZXIuCisgICAgLy8gT3RoZXJ3
aGlzZSB0aGUgY2FsbCB0byBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKCkgaW4gY3JlYXRlVGls
ZUltYWdlKCksIG1heSBjYXVzZSB0aGUgU1ZHIERPTSBwcm9wZXJ0eQorICAgIC8vIHN5bmNocm9u
aXphdGlvbiB0byBraWNrIGluLCB3aGljaCBjYXVzZXMgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNo
ZSgpIHRvIGJlIGNhbGxlZCwgd2hpY2ggaW4gdHVybiBkZWxldGVzIG91cgorICAgIC8vIEdyYWRp
ZW50RGF0YSBvYmplY3QhIExlYXZpbmcgb3V0IHRoZSBsaW5lIGJlbG93IHdpbGwgY2F1c2Ugc3Zn
L2R5bmFtaWMtdXBkYXRlcy9TVkcqR3JhZGllbnRFbGVtZW50LXN2Z2RvbSogdG8gY3Jhc2guCisg
ICAgU1ZHR3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdH
cmFkaWVudEVsZW1lbnQqPihub2RlKCkpOworICAgIGlmICghZ3JhZGllbnRFbGVtZW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9zaG91bGRDb2xsZWN0R3JhZGllbnRBdHRy
aWJ1dGVzKSB7CisgICAgICAgIGdyYWRpZW50RWxlbWVudC0+dXBkYXRlQW5pbWF0ZWRTVkdBdHRy
aWJ1dGUoYW55UU5hbWUoKSk7CisgICAgICAgIGNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMoZ3Jh
ZGllbnRFbGVtZW50KTsKKyAgICAgICAgbV9zaG91bGRDb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVz
ID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gU3BlYzogV2hlbiB0aGUgZ2VvbWV0cnkgb2YgdGhl
IGFwcGxpY2FibGUgZWxlbWVudCBoYXMgbm8gd2lkdGggb3IgaGVpZ2h0IGFuZCBvYmplY3RCb3Vu
ZGluZ0JveCBpcyBzcGVjaWZpZWQsCisgICAgLy8gdGhlbiB0aGUgZ2l2ZW4gZWZmZWN0IChlLmcu
IGEgZ3JhZGllbnQgb3IgYSBmaWx0ZXIpIHdpbGwgYmUgaWdub3JlZC4KKyAgICBGbG9hdFJlY3Qg
b2JqZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgaWYg
KGJvdW5kaW5nQm94TW9kZSgpICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX2dyYWRpZW50LmNvbnRhaW5zKG9iamVjdCkp
CisgICAgICAgIG1fZ3JhZGllbnQuc2V0KG9iamVjdCwgbmV3IEdyYWRpZW50RGF0YSk7CisKKyAg
ICBHcmFkaWVudERhdGEqIGdyYWRpZW50RGF0YSA9IG1fZ3JhZGllbnQuZ2V0KG9iamVjdCk7Cisg
ICAgYm9vbCBpc1BhaW50aW5nVGV4dCA9IHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZTsK
KworICAgIC8vIENyZWF0ZSBncmFkaWVudCBvYmplY3QKKyAgICBpZiAoIWdyYWRpZW50RGF0YS0+
Z3JhZGllbnQpIHsKKyAgICAgICAgYnVpbGRHcmFkaWVudChncmFkaWVudERhdGEsIGdyYWRpZW50
RWxlbWVudCk7CisKKyAgICAgICAgLy8gQ0cgcGxhdGZvcm1zIHdpbGwgaGFuZGxlIHRoZSBncmFk
aWVudCBzcGFjZSB0cmFuc2Zvcm0gZm9yIHRleHQgYWZ0ZXIgYXBwbHlpbmcgdGhlCisgICAgICAg
IC8vIHJlc291cmNlLCBzbyBkb24ndCBhcHBseSBpdCBoZXJlLiBGb3Igbm9uLUNHIHBsYXRmb3Jt
cywgd2Ugd2FudCB0aGUgdGV4dCBib3VuZGluZworICAgICAgICAvLyBib3ggYXBwbGllZCB0byB0
aGUgZ3JhZGllbnQgc3BhY2UgdHJhbnNmb3JtIG5vdywgc28gdGhlIGdyYWRpZW50IHNoYWRlciBj
YW4gdXNlIGl0LgorI2lmIFBMQVRGT1JNKENHKQorICAgICAgICBpZiAoYm91bmRpbmdCb3hNb2Rl
KCkgJiYgIW9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSAmJiAhaXNQYWludGluZ1RleHQpIHsK
KyNlbHNlCisgICAgICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSAmJiAhb2JqZWN0Qm91bmRpbmdC
b3guaXNFbXB0eSgpKSB7CisjZW5kaWYKKyAgICAgICAgICAgIGdyYWRpZW50RGF0YS0+dXNlcnNw
YWNlVHJhbnNmb3JtLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5k
aW5nQm94LnkoKSk7CisgICAgICAgICAgICBncmFkaWVudERhdGEtPnVzZXJzcGFjZVRyYW5zZm9y
bS5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRp
bmdCb3guaGVpZ2h0KCkpOworICAgICAgICB9CisKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdy
YWRpZW50VHJhbnNmb3JtOworICAgICAgICBjYWxjdWxhdGVHcmFkaWVudFRyYW5zZm9ybShncmFk
aWVudFRyYW5zZm9ybSk7CisKKyAgICAgICAgZ3JhZGllbnREYXRhLT51c2Vyc3BhY2VUcmFuc2Zv
cm0ubXVsdExlZnQoZ3JhZGllbnRUcmFuc2Zvcm0pOworICAgICAgICBncmFkaWVudERhdGEtPmdy
YWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGdyYWRpZW50RGF0YS0+dXNlcnNwYWNl
VHJhbnNmb3JtKTsKKyAgICB9CisKKyAgICBpZiAoIWdyYWRpZW50RGF0YS0+Z3JhZGllbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIERyYXcgZ3JhZGllbnQKKyAgICBjb250ZXh0
LT5zYXZlKCk7CisKKyAgICBpZiAoaXNQYWludGluZ1RleHQpIHsKKyNpZiBQTEFURk9STShDRykK
KyAgICAgICAgaWYgKCFjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRGb3JUZXh0R3JhZGllbnQoY29u
dGV4dCwgbV9zYXZlZENvbnRleHQsIG1faW1hZ2VCdWZmZXIsIG9iamVjdCkpIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorI2VuZGlmCisKKyAgICAgICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKHJlc291
cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSA/IFRleHRNb2RlRmlsbCA6IFRleHRNb2RlU3Ryb2tl
KTsKKyAgICB9CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+
c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3ZnU3R5bGUpOworCisgICAgaWYgKHJlc291cmNlTW9k
ZSAmIEFwcGx5VG9GaWxsTW9kZSkgeworICAgICAgICBjb250ZXh0LT5zZXRBbHBoYShzdmdTdHls
ZS0+ZmlsbE9wYWNpdHkoKSk7CisgICAgICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChncmFk
aWVudERhdGEtPmdyYWRpZW50KTsKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUoc3ZnU3R5
bGUtPmZpbGxSdWxlKCkpOworICAgIH0gZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0
cm9rZU1vZGUpIHsKKyAgICAgICAgaWYgKHN2Z1N0eWxlLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9O
T05fU0NBTElOR19TVFJPS0UpCisgICAgICAgICAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5z
ZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKHRyYW5zZm9ybU9uTm9uU2NhbGluZ1N0cm9rZShvYmpl
Y3QsIGdyYWRpZW50RGF0YS0+dXNlcnNwYWNlVHJhbnNmb3JtKSk7CisgICAgICAgIGNvbnRleHQt
PnNldEFscGhhKHN2Z1N0eWxlLT5zdHJva2VPcGFjaXR5KCkpOworICAgICAgICBjb250ZXh0LT5z
ZXRTdHJva2VHcmFkaWVudChncmFkaWVudERhdGEtPmdyYWRpZW50KTsKKyAgICAgICAgU1ZHUmVu
ZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwgb2Jq
ZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3Jh
cGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25z
dCBQYXRoKiBwYXRoKQoreworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBBU1NFUlQocmVzb3Vy
Y2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CisKKyAgICBpZiAocmVzb3VyY2VNb2RlICYg
QXBwbHlUb1RleHRNb2RlKSB7CisjaWYgUExBVEZPUk0oQ0cpCisgICAgICAgIC8vIENHIHJlcXVp
cmVzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGdyYWRpZW50IG9uIHRleHQKKyAgICAgICAgaWYgKG1f
c2F2ZWRDb250ZXh0ICYmIG1fZ3JhZGllbnQuY29udGFpbnMob2JqZWN0KSkgeworICAgICAgICAg
ICAgR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEgPSBtX2dyYWRpZW50LmdldChvYmplY3QpOwor
CisgICAgICAgICAgICAvLyBSZXN0b3JlIG9uLXNjcmVlbiBkcmF3aW5nIGNvbnRleHQKKyAgICAg
ICAgICAgIGNvbnRleHQgPSBtX3NhdmVkQ29udGV4dDsKKyAgICAgICAgICAgIG1fc2F2ZWRDb250
ZXh0ID0gMDsKKworICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50VHJhbnNmb3Jt
OworICAgICAgICAgICAgY2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zvcm0oZ3JhZGllbnRUcmFuc2Zv
cm0pOworCisgICAgICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdDsKKyAgICAgICAgICAgIGdy
YWRpZW50RGF0YS0+Z3JhZGllbnQtPnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY2xpcFRvVGV4
dE1hc2soY29udGV4dCwgbV9pbWFnZUJ1ZmZlciwgdGFyZ2V0UmVjdCwgb2JqZWN0LCBib3VuZGlu
Z0JveE1vZGUoKSwgZ3JhZGllbnRUcmFuc2Zvcm0pKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dEZpbGxHcmFkaWVudChncmFkaWVudERhdGEtPmdyYWRpZW50KTsKKworICAgICAgICAgICAgY29u
dGV4dC0+ZmlsbFJlY3QodGFyZ2V0UmVjdCk7CisgICAgICAgICAgICBtX2ltYWdlQnVmZmVyLmNs
ZWFyKCk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwor
I2VuZGlmCisgICAgfSBlbHNlIGlmIChwYXRoKSB7CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUg
JiBBcHBseVRvRmlsbE1vZGUpCisgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7
CisgICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQorICAg
ICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7CisgICAgfQorCisgICAgY29udGV4
dC0+cmVzdG9yZSgpOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFkZFN0
b3BzKEdyYWRpZW50RGF0YSogZ3JhZGllbnREYXRhLCBjb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNv
bG9yU3RvcD4mIHN0b3BzKSBjb25zdAoreworICAgIEFTU0VSVChncmFkaWVudERhdGEtPmdyYWRp
ZW50KTsKKworICAgIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gc3RvcHMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8R3JhZGllbnQ6OkNvbG9y
U3RvcD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RvcHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5hZGRDb2xvclN0b3AoKml0KTsKK30K
KworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCShyZXZpc2lvbiA3NTM0NykJKGZy
b20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaDo3
NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50X2gKKyNkZWZpbmUgUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudF9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYWRpZW50
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgorCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgR3JhZGll
bnREYXRhIHsKKyAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50OworICAgIEFmZmluZVRyYW5z
Zm9ybSB1c2Vyc3BhY2VUcmFuc2Zvcm07Cit9OworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisK
K2NsYXNzIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQgOiBwdWJsaWMgUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIgeworcHVibGljOgorICAgIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQoU1ZH
R3JhZGllbnRFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dCgpOworCisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9vbCBt
YXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVu
dEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVl
KTsKKworICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRl
clN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7
CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBo
aWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsK
KyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCop
IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGFkZFN0b3Bz
KEdyYWRpZW50RGF0YSosIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiYpIGNvbnN0
OworCisgICAgdmlydHVhbCBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgY2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtJikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKFNWR0dyYWRp
ZW50RWxlbWVudCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFkaWVudChHcmFkaWVu
dERhdGEqLCBTVkdHcmFkaWVudEVsZW1lbnQqKSBjb25zdCA9IDA7CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBtX3Nob3VsZENvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMgOiAxOworICAgIEhhc2hNYXA8
UmVuZGVyT2JqZWN0KiwgR3JhZGllbnREYXRhKj4gbV9ncmFkaWVudDsKKworI2lmIFBMQVRGT1JN
KENHKQorICAgIEdyYXBoaWNzQ29udGV4dCogbV9zYXZlZENvbnRleHQ7CisgICAgT3duUHRyPElt
YWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworI2VuZGlmCit9OworCit9CisKKyNlbmRpZgorI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
TGluZWFyR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAJKHJldmlzaW9uIDc1MzQ3
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJH
cmFkaWVudC5jcHA6NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5o
IgorCisjaW5jbHVkZSAiTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVy
U1ZHUmVzb3VyY2VUeXBlIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OnNfcmVzb3Vy
Y2VUeXBlID0gTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGU7CisKK1JlbmRlclNWR1Jlc291cmNl
TGluZWFyR3JhZGllbnQ6OlJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQoU1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudChu
b2RlKQoreworfQorCitSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50Ojp+UmVuZGVyU1ZH
UmVzb3VyY2VMaW5lYXJHcmFkaWVudCgpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VM
aW5lYXJHcmFkaWVudDo6Y29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhTVkdHcmFkaWVudEVsZW1l
bnQqIGdyYWRpZW50RWxlbWVudCkKK3sKKyAgICBtX2F0dHJpYnV0ZXMgPSBMaW5lYXJHcmFkaWVu
dEF0dHJpYnV0ZXMoKTsKKyAgICBzdGF0aWNfY2FzdDxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQq
PihncmFkaWVudEVsZW1lbnQpLT5jb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKG1fYXR0cmlidXRl
cyk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudDo6YnVpbGRHcmFk
aWVudChHcmFkaWVudERhdGEqIGdyYWRpZW50RGF0YSwgU1ZHR3JhZGllbnRFbGVtZW50KiBncmFk
aWVudEVsZW1lbnQpIGNvbnN0Cit7CisgICAgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KiBsaW5l
YXJHcmFkaWVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQq
PihncmFkaWVudEVsZW1lbnQpOworCisgICAgLy8gRGV0ZXJtaW5lIGdyYWRpZW50IHN0YXJ0L2Vu
ZCBwb2ludHMKKyAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQ7CisgICAgRmxvYXRQb2ludCBlbmRQ
b2ludDsKKyAgICBsaW5lYXJHcmFkaWVudEVsZW1lbnQtPmNhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRz
KG1fYXR0cmlidXRlcywgc3RhcnRQb2ludCwgZW5kUG9pbnQpOworCisgICAgZ3JhZGllbnREYXRh
LT5ncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoc3RhcnRQb2ludCwgZW5kUG9pbnQpOworICAg
IGdyYWRpZW50RGF0YS0+Z3JhZGllbnQtPnNldFNwcmVhZE1ldGhvZChtX2F0dHJpYnV0ZXMuc3By
ZWFkTWV0aG9kKCkpOworCisgICAgLy8gQWRkIHN0b3BzCisgICAgYWRkU3RvcHMoZ3JhZGllbnRE
YXRhLCBtX2F0dHJpYnV0ZXMuc3RvcHMoKSk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlTGluZWFyR3JhZGllbnQuaAkocmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50Lmg6NzUzNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3Jh
ZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnRfaAorI2RlZmlu
ZSBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50X2gKKworI2lmIEVOQUJMRShTVkcpCisj
aW5jbHVkZSAiTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0xp
bmVhckdyYWRpZW50RWxlbWVudDsKKworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFk
aWVudCA6IHB1YmxpYyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50IHsKK3B1YmxpYzoKKyAgICBS
ZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50KFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCop
OworICAgIHZpcnR1YWwgflJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQoKTsKKworICAg
IHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJT
VkdSZXNvdXJjZUxpbmVhckdyYWRpZW50IjsgfQorCisgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0K
KyAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBlOworCisgICAg
dmlydHVhbCBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
cy5ib3VuZGluZ0JveE1vZGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVHcmFkaWVu
dFRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyB0cmFuc2Zvcm0gPSBtX2F0
dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0
R3JhZGllbnRBdHRyaWJ1dGVzKFNWR0dyYWRpZW50RWxlbWVudCopOworICAgIHZpcnR1YWwgdm9p
ZCBidWlsZEdyYWRpZW50KEdyYWRpZW50RGF0YSosIFNWR0dyYWRpZW50RWxlbWVudCopIGNvbnN0
OworCitwcml2YXRlOgorICAgIExpbmVhckdyYWRpZW50QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7
Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAkocmV2aXNp
b24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlci5jcHA6NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJTVkdNYXJrZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9y
dC5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclNW
R1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6c19yZXNvdXJjZVR5cGUgPSBN
YXJrZXJSZXNvdXJjZVR5cGU7CisKK1JlbmRlclNWR1Jlc291cmNlTWFya2VyOjpSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlcihTVkdNYXJrZXJFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIobm9kZSkKK3sKK30KKworUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6On5S
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlcigpCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXI6OmxheW91dCgpCit7CisgICAgLy8gSW52YWxpZGF0ZSBhbGwgcmVzb3VyY2VzIGlmIG91
ciBsYXlvdXQgY2hhbmdlZC4KKyAgICBpZiAobV9ldmVySGFkTGF5b3V0ICYmIHNlbGZOZWVkc0xh
eW91dCgpKQorICAgICAgICByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7CisKKyAgICAvLyBS
ZW5kZXJTVkdIaWRkZW5Db250YWluZXIgb3ZlcndyaXRlcyBsYXlvdXQoKS4gV2UgbmVlZCB0aGUK
KyAgICAvLyBsYXlvdXRpbmcgb2YgUmVuZGVyU1ZHQ29udGFpbmVyIGZvciBjYWxjdWxhdGluZyAg
bG9jYWwKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbnMgYW5kIHJlcGFpbnQuCisgICAgUmVuZGVyU1ZH
Q29udGFpbmVyOjpsYXlvdXQoKTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6
cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCit7Cisg
ICAgbWFya0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IExh
eW91dEFuZEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsK
K30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hl
KFJlbmRlck9iamVjdCogY2xpZW50LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCit7CisgICAg
QVNTRVJUKGNsaWVudCk7CisgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihjbGllbnQsIG1h
cmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFyZW50T25seUlu
dmFsaWRhdGlvbik7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmFwcGx5Vmll
d3BvcnRDbGlwKFBhaW50SW5mbyYgcGFpbnRJbmZvKQoreworICAgIGlmIChTVkdSZW5kZXJTdXBw
b3J0Ojppc092ZXJmbG93SGlkZGVuKHRoaXMpKQorICAgICAgICBwYWludEluZm8uY29udGV4dC0+
Y2xpcChtX3ZpZXdwb3J0KTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlTWFya2Vy
OjptYXJrZXJCb3VuZGFyaWVzKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWFya2VyVHJhbnNmb3Jt
YXRpb24pIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IGNvb3JkaW5hdGVzID0gUmVuZGVyU1ZHQ29u
dGFpbmVyOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworCisgICAgLy8gTWFwIHJl
cGFpbnQgcmVjdCBpbnRvIHBhcmVudCBjb29yZGluYXRlIHNwYWNlLCBpbiB3aGljaCB0aGUgbWFy
a2VyIGJvdW5kYXJpZXMgaGF2ZSB0byBiZSBldmFsdWF0ZWQKKyAgICBjb29yZGluYXRlcyA9IGxv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KGNvb3JkaW5hdGVzKTsKKworICAgIHJldHVy
biBtYXJrZXJUcmFuc2Zvcm1hdGlvbi5tYXBSZWN0KGNvb3JkaW5hdGVzKTsKK30KKworY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdwb3J0VHJhbnNsYXRp
b24odmlld3BvcnRUcmFuc2Zvcm0oKSk7CisgICAgbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtID0g
dmlld3BvcnRUcmFuc2xhdGlvbi50cmFuc2xhdGVSaWdodChtX3ZpZXdwb3J0LngoKSwgbV92aWV3
cG9ydC55KCkpOworICAgIHJldHVybiBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07CisgICAgLy8g
SWYgdGhpcyBjbGFzcyB3ZXJlIGV2ZXIgZ2l2ZW4gYSBsb2NhbFRyYW5zZm9ybSgpLCB0aGVuIHRo
ZSBhYm92ZSB3b3VsZCByZWFkOgorICAgIC8vIHJldHVybiB2aWV3cG9ydFRyYW5zZm9ybSgpICog
bG9jYWxUcmFuc2Zvcm0oKSAqIHZpZXdwb3J0VHJhbnNsYXRpb247Cit9CisKK0Zsb2F0UG9pbnQg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OnJlZmVyZW5jZVBvaW50KCkgY29uc3QKK3sKKyAgICBT
VkdNYXJrZXJFbGVtZW50KiBtYXJrZXIgPSBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4o
bm9kZSgpKTsKKyAgICBBU1NFUlQobWFya2VyKTsKKworICAgIHJldHVybiBGbG9hdFBvaW50KG1h
cmtlci0+cmVmWCgpLnZhbHVlKG1hcmtlciksIG1hcmtlci0+cmVmWSgpLnZhbHVlKG1hcmtlcikp
OworfQorCitmbG9hdCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6YW5nbGUoKSBjb25zdAorewor
ICAgIFNWR01hcmtlckVsZW1lbnQqIG1hcmtlciA9IHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1l
bnQqPihub2RlKCkpOworICAgIEFTU0VSVChtYXJrZXIpOworCisgICAgZmxvYXQgYW5nbGUgPSAt
MTsKKyAgICBpZiAobWFya2VyLT5vcmllbnRUeXBlKCkgPT0gU1ZHTWFya2VyRWxlbWVudDo6U1ZH
X01BUktFUl9PUklFTlRfQU5HTEUpCisgICAgICAgIGFuZ2xlID0gbWFya2VyLT5vcmllbnRBbmds
ZSgpLnZhbHVlKCk7CisKKyAgICByZXR1cm4gYW5nbGU7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bWFya2VyVHJhbnNmb3JtYXRpb24oY29uc3QgRmxvYXRQ
b2ludCYgb3JpZ2luLCBmbG9hdCBhdXRvQW5nbGUsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAor
eworICAgIFNWR01hcmtlckVsZW1lbnQqIG1hcmtlciA9IHN0YXRpY19jYXN0PFNWR01hcmtlckVs
ZW1lbnQqPihub2RlKCkpOworICAgIEFTU0VSVChtYXJrZXIpOworCisgICAgZmxvYXQgbWFya2Vy
QW5nbGUgPSBhbmdsZSgpOworICAgIGJvb2wgdXNlU3Ryb2tlV2lkdGggPSAobWFya2VyLT5tYXJr
ZXJVbml0cygpID09IFNWR01hcmtlckVsZW1lbnQ6OlNWR19NQVJLRVJVTklUU19TVFJPS0VXSURU
SCk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgIHRyYW5zZm9ybS50cmFu
c2xhdGUob3JpZ2luLngoKSwgb3JpZ2luLnkoKSk7CisgICAgdHJhbnNmb3JtLnJvdGF0ZShtYXJr
ZXJBbmdsZSA9PSAtMSA/IGF1dG9BbmdsZSA6IG1hcmtlckFuZ2xlKTsKKyAgICB0cmFuc2Zvcm0g
PSBtYXJrZXJDb250ZW50VHJhbnNmb3JtYXRpb24odHJhbnNmb3JtLCByZWZlcmVuY2VQb2ludCgp
LCB1c2VTdHJva2VXaWR0aCA/IHN0cm9rZVdpZHRoIDogLTEpOworICAgIHJldHVybiB0cmFuc2Zv
cm07Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmRyYXcoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIFBhaW50
SW5mbyBpbmZvKHBhaW50SW5mbyk7CisgICAgaW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgaW5m
by5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFp
bnQoaW5mbywgMCwgMCk7CisgICAgaW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK0FmZmlu
ZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bWFya2VyQ29udGVudFRyYW5zZm9y
bWF0aW9uKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY29udGVudFRyYW5zZm9ybWF0aW9uLCBjb25z
dCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAoreworICAgIC8v
IFRoZSAnb3JpZ2luJyBjb29yZGluYXRlIG1hcHMgdG8gU1ZHcyByZWZYL3JlZlksIGdpdmVuIGlu
IGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydCBlc3RhYmxpc2hlZCBieSB0aGUg
bWFya2VyCisgICAgRmxvYXRQb2ludCBtYXBwZWRPcmlnaW4gPSB2aWV3cG9ydFRyYW5zZm9ybSgp
Lm1hcFBvaW50KG9yaWdpbik7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtYXRpb24g
PSBjb250ZW50VHJhbnNmb3JtYXRpb247CisgICAgaWYgKHN0cm9rZVdpZHRoICE9IC0xKQorICAg
ICAgICB0cmFuc2Zvcm1hdGlvbi5zY2FsZU5vblVuaWZvcm0oc3Ryb2tlV2lkdGgsIHN0cm9rZVdp
ZHRoKTsKKworICAgIHRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZSgtbWFwcGVkT3JpZ2luLngoKSwg
LW1hcHBlZE9yaWdpbi55KCkpOworICAgIHJldHVybiB0cmFuc2Zvcm1hdGlvbjsKK30KKworQWZm
aW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjp2aWV3cG9ydFRyYW5zZm9ybSgp
IGNvbnN0Cit7CisgICAgU1ZHTWFya2VyRWxlbWVudCogbWFya2VyID0gc3RhdGljX2Nhc3Q8U1ZH
TWFya2VyRWxlbWVudCo+KG5vZGUoKSk7CisgICAgQVNTRVJUKG1hcmtlcik7CisKKyAgICByZXR1
cm4gbWFya2VyLT52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKG1fdmlld3BvcnQud2lkdGgoKSwgbV92
aWV3cG9ydC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmNh
bGNWaWV3cG9ydCgpCit7CisgICAgaWYgKCFzZWxmTmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgU1ZHTWFya2VyRWxlbWVudCogbWFya2VyID0gc3RhdGljX2Nhc3Q8U1ZHTWFy
a2VyRWxlbWVudCo+KG5vZGUoKSk7CisgICAgQVNTRVJUKG1hcmtlcik7CisKKyAgICBmbG9hdCB3
ID0gbWFya2VyLT5tYXJrZXJXaWR0aCgpLnZhbHVlKG1hcmtlcik7CisgICAgZmxvYXQgaCA9IG1h
cmtlci0+bWFya2VySGVpZ2h0KCkudmFsdWUobWFya2VyKTsKKyAgICBtX3ZpZXdwb3J0ID0gRmxv
YXRSZWN0KDAsIDAsIHcsIGgpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIuaAkocmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oOjc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlcl9oCisjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlTWFya2VyX2gKKworI2lm
IEVOQUJMRShTVkcpCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKKyNpbmNsdWRl
ICJTVkdNYXJrZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgorCisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBB
ZmZpbmVUcmFuc2Zvcm07CisKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlTWFya2VyIDogcHVibGlj
IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdSZXNv
dXJjZU1hcmtlcihTVkdNYXJrZXJFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIoKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNv
bnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciI7IH0KKworICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9
IHRydWUpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2Jq
ZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CisKKyAgICB2b2lkIGRyYXco
UGFpbnRJbmZvJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisKKyAgICAvLyBDYWxjdWxhdGVz
IG1hcmtlciBib3VuZGFyaWVzLCBtYXBwZWQgdG8gdGhlIHRhcmdldCBlbGVtZW50J3MgY29vcmRp
bmF0ZSBzcGFjZQorICAgIEZsb2F0UmVjdCBtYXJrZXJCb3VuZGFyaWVzKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgbWFya2VyVHJhbnNmb3JtYXRpb24pIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lk
IGFwcGx5Vmlld3BvcnRDbGlwKFBhaW50SW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ZpZXdwb3J0KCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0OworICAgIEFm
ZmluZVRyYW5zZm9ybSBtYXJrZXJUcmFuc2Zvcm1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvcmln
aW4sIGZsb2F0IGFuZ2xlLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNz
Q29udGV4dComLCB1bnNpZ25lZCBzaG9ydCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZs
b2F0UmVjdCgpOyB9CisKKyAgICBGbG9hdFBvaW50IHJlZmVyZW5jZVBvaW50KCkgY29uc3Q7Cisg
ICAgZmxvYXQgYW5nbGUoKSBjb25zdDsKKyAgICBTVkdNYXJrZXJFbGVtZW50OjpTVkdNYXJrZXJV
bml0c1R5cGUgbWFya2VyVW5pdHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTVkdNYXJr
ZXJFbGVtZW50OjpTVkdNYXJrZXJVbml0c1R5cGU+KHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1l
bnQqPihub2RlKCkpLT5tYXJrZXJVbml0cygpKTsgfQorCisgICAgdmlydHVhbCBSZW5kZXJTVkdS
ZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7
IH0KKyAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBlOworCitw
cml2YXRlOgorICAgIC8vIEdlbmVyYXRlcyBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB1c2FibGUg
dG8gcmVuZGVyIG1hcmtlciBjb250ZW50LiBIYW5kbGVzIHNjYWxpbmcgdGhlIG1hcmtlciBjb250
ZW50CisgICAgLy8gYWNvcmRpbmcgdG8gU1ZHcyBtYXJrZXJVbml0cz0ic3Ryb2tlV2lkdGgiIGNv
bmNlcHQsIHdoZW4gYSBzdHJva2VXaWR0aCB2YWx1ZSAhPSAtMSBpcyBwYXNzZWQgaW4uCisgICAg
QWZmaW5lVHJhbnNmb3JtIG1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgb3JpZ2lu
LCBmbG9hdCBzdHJva2VXaWR0aCA9IC0xKSBjb25zdDsKKworICAgIEFmZmluZVRyYW5zZm9ybSB2
aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0OworCisgICAgbXV0YWJsZSBBZmZpbmVUcmFuc2Zvcm0g
bV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOworICAgIEZsb2F0UmVjdCBtX3ZpZXdwb3J0OworfTsK
KworfQorI2VuZGlmCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHJldmlzaW9uIDc1
MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXIuY3BwOjc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykK
KyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIgorCisjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiU1ZH
RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKKyNpbmNsdWRlICJT
VkdNYXNrRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdVbml0VHlwZXMuaCIKKworI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KKyNpbmNsdWRl
IDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIFJlbmRlclNWR1Jlc291cmNlTWFz
a2VyOjpzX3Jlc291cmNlVHlwZSA9IE1hc2tlclJlc291cmNlVHlwZTsKKworUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXI6OlJlbmRlclNWR1Jlc291cmNlTWFza2VyKFNWR01hc2tFbGVtZW50KiBub2Rl
KQorICAgIDogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIobm9kZSkKK3sKK30KKworUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXI6On5SZW5kZXJTVkdSZXNvdXJjZU1hc2tlcigpCit7CisgICAgaWYg
KG1fbWFza2VyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlQWxsVmFs
dWVzKG1fbWFza2VyKTsKKyAgICBtX21hc2tlci5jbGVhcigpOworfQorCit2b2lkIFJlbmRlclNW
R1Jlc291cmNlTWFza2VyOjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0Zvcklu
dmFsaWRhdGlvbikKK3sKKyAgICBtX21hc2tDb250ZW50Qm91bmRhcmllcyA9IEZsb2F0UmVjdCgp
OworICAgIGlmICghbV9tYXNrZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIGRlbGV0ZUFsbFZhbHVl
cyhtX21hc2tlcik7CisgICAgICAgIG1fbWFza2VyLmNsZWFyKCk7CisgICAgfQorCisgICAgbWFy
a0FsbENsaWVudHNGb3JJbnZhbGlkYXRpb24obWFya0ZvckludmFsaWRhdGlvbiA/IExheW91dEFu
ZEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKK30KKwor
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRl
ck9iamVjdCogY2xpZW50LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCit7CisgICAgQVNTRVJU
KGNsaWVudCk7CisKKyAgICBpZiAobV9tYXNrZXIuY29udGFpbnMoY2xpZW50KSkKKyAgICAgICAg
ZGVsZXRlIG1fbWFza2VyLnRha2UoY2xpZW50KTsKKworICAgIG1hcmtDbGllbnRGb3JJbnZhbGlk
YXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRhdGlv
biA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOworfQorCitib29sIFJlbmRlclNWR1Jlc291cmNl
TWFza2VyOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSos
IEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkK
K3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisjaWZuZGVmIE5E
RUJVRworICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgPT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHJlc291cmNlTW9kZSk7CisjZW5kaWYKKworICAgIGlmICgh
bV9tYXNrZXIuY29udGFpbnMob2JqZWN0KSkKKyAgICAgICAgbV9tYXNrZXIuc2V0KG9iamVjdCwg
bmV3IE1hc2tlckRhdGEpOworCisgICAgTWFza2VyRGF0YSogbWFza2VyRGF0YSA9IG1fbWFza2Vy
LmdldChvYmplY3QpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwor
ICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1v
c3RTVkdDb29yZGluYXRlU3lzdGVtKG9iamVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0pOworCisgICAg
RmxvYXRSZWN0IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3Qo
b2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBGbG9hdFJlY3Qg
Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRB
YnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcihvYmplY3QsIGFic29sdXRlVGFyZ2V0UmVjdCk7
CisKKyAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSAmJiAhY2xhbXBlZEFic29sdXRlVGFy
Z2V0UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgU1ZHTWFza0VsZW1lbnQqIG1hc2tFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpOworICAgICAgICBpZiAoIW1h
c2tFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghU1ZH
SW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVUYXJnZXRSZWN0LCBj
bGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UsIENvbG9yU3Bh
Y2VMaW5lYXJSR0IpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEdyYXBo
aWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Y29u
dGV4dCgpOworICAgICAgICBBU1NFUlQobWFza0ltYWdlQ29udGV4dCk7CisKKyAgICAgICAgLy8g
VGhlIHNhdmUvcmVzdG9yZSBwYWlyIGlzIG5lZWRlZCBmb3IgY2xpcFRvSW1hZ2VCdWZmZXIgLSBp
dCBkb2Vzbid0IHdvcmsgd2l0aG91dCBpdCBvbiBub24tQ2cgcGxhdGZvcm1zLgorICAgICAgICBt
YXNrSW1hZ2VDb250ZXh0LT5zYXZlKCk7CisgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPnRyYW5z
bGF0ZSgtY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC54KCksIC1jbGFtcGVkQWJzb2x1dGVUYXJn
ZXRSZWN0LnkoKSk7CisgICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmNvbmNhdENUTShhYnNvbHV0
ZVRyYW5zZm9ybSk7CisKKyAgICAgICAgZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKG1hc2tlckRh
dGEsIG1hc2tFbGVtZW50LCBvYmplY3QpOworICAgIH0KKworICAgIGlmICghbWFza2VyRGF0YS0+
bWFza0ltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTVkdJbWFnZUJ1ZmZlclRv
b2xzOjpjbGlwVG9JbWFnZUJ1ZmZlcihjb250ZXh0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY2xhbXBl
ZEFic29sdXRlVGFyZ2V0UmVjdCwgbWFza2VyRGF0YS0+bWFza0ltYWdlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6ZHJhd0NvbnRlbnRJbnRv
TWFza0ltYWdlKE1hc2tlckRhdGEqIG1hc2tlckRhdGEsIGNvbnN0IFNWR01hc2tFbGVtZW50KiBt
YXNrRWxlbWVudCwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgR3JhcGhpY3NDb250ZXh0
KiBtYXNrSW1hZ2VDb250ZXh0ID0gbWFza2VyRGF0YS0+bWFza0ltYWdlLT5jb250ZXh0KCk7Cisg
ICAgQVNTRVJUKG1hc2tJbWFnZUNvbnRleHQpOworCisgICAgLy8gRXZlbnR1YWxseSBhZGp1c3Qg
dGhlIG1hc2sgaW1hZ2UgY29udGV4dCBhY2NvcmRpbmcgdG8gdGhlIHRhcmdldCBvYmplY3RCb3Vu
ZGluZ0JveC4KKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbjsK
KyAgICBpZiAobWFza0VsZW1lbnQtPm1hc2tDb250ZW50VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6
OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKKyAgICAgICAgRmxvYXRSZWN0IG9i
amVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOworICAgICAgICBt
YXNrQ29udGVudFRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54KCks
IG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CisgICAgICAgIG1hc2tDb250ZW50VHJhbnNmb3JtYXRp
b24uc2NhbGVOb25Vbmlmb3JtKG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJvdW5k
aW5nQm94LmhlaWdodCgpKTsKKyAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RNKG1h
c2tDb250ZW50VHJhbnNmb3JtYXRpb24pOworICAgIH0KKworICAgIC8vIERyYXcgdGhlIGNvbnRl
bnQgaW50byB0aGUgSW1hZ2VCdWZmZXIuCisgICAgZm9yIChOb2RlKiBub2RlID0gbWFza0VsZW1l
bnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAg
IGlmICghbm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihu
b2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgICAgIGlm
ICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNpYmlsaXR5
KCkgIT0gVklTSUJMRSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBTVkdJbWFnZUJ1
ZmZlclRvb2xzOjpyZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihtYXNrZXJEYXRhLT5tYXNrSW1h
Z2UuZ2V0KCksIHJlbmRlcmVyLCBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uKTsKKyAgICB9CisK
KyAgICBtYXNrSW1hZ2VDb250ZXh0LT5yZXN0b3JlKCk7CisKKyNpZiAhUExBVEZPUk0oQ0cpCisg
ICAgbWFza2VyRGF0YS0+bWFza0ltYWdlLT50cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2VE
ZXZpY2VSR0IsIENvbG9yU3BhY2VMaW5lYXJSR0IpOworI2VuZGlmCisKKyAgICAvLyBDcmVhdGUg
dGhlIGx1bWluYW5jZSBtYXNrLgorICAgIEludFJlY3QgbWFza0ltYWdlUmVjdChJbnRQb2ludCgp
LCBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UtPnNpemUoKSk7CisgICAgUmVmUHRyPEJ5dGVBcnJheT4g
c3JjUGl4ZWxBcnJheSA9IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKG1hc2tJbWFnZVJlY3QpOworCisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9
IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQg
PSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsK
KyAgICAgICAgdW5zaWduZWQgY2hhciBhID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsT2Zmc2V0
ICsgMyk7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1
bnNpZ25lZCBjaGFyIHIgPSBzcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxPZmZzZXQpOworICAgICAg
ICB1bnNpZ25lZCBjaGFyIGcgPSBzcmNQaXhlbEFycmF5LT5nZXQocGl4ZWxPZmZzZXQgKyAxKTsK
KyAgICAgICAgdW5zaWduZWQgY2hhciBiID0gc3JjUGl4ZWxBcnJheS0+Z2V0KHBpeGVsT2Zmc2V0
ICsgMik7CisKKyAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQg
KyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7CisgICAgICAgIHNyY1BpeGVsQXJy
YXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgIH0KKworICAgIG1hc2tlckRhdGEt
Pm1hc2tJbWFnZS0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY1BpeGVsQXJyYXkuZ2V0KCks
IG1hc2tJbWFnZVJlY3Quc2l6ZSgpLCBtYXNrSW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKK30KKwor
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6Y2FsY3VsYXRlTWFza0NvbnRlbnRSZXBhaW50
UmVjdCgpCit7CisgICAgZm9yIChOb2RlKiBjaGlsZE5vZGUgPSBub2RlKCktPmZpcnN0Q2hpbGQo
KTsgY2hpbGROb2RlOyBjaGlsZE5vZGUgPSBjaGlsZE5vZGUtPm5leHRTaWJsaW5nKCkpIHsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKKyAg
ICAgICAgaWYgKCFjaGlsZE5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4oY2hpbGROb2RlKS0+aXNTdHlsZWQoKSB8fCAhcmVuZGVyZXIpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxl
KCk7CisgICAgICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FIHx8IHN0
eWxlLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgbV9tYXNrQ29udGVudEJvdW5kYXJpZXMudW5pdGUocmVuZGVyZXItPmxvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpKSk7CisgICAgfQorfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6
OnJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgU1ZHTWFz
a0VsZW1lbnQqIG1hc2tFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2Rl
KCkpOworICAgIEFTU0VSVChtYXNrRWxlbWVudCk7CisKKyAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91
bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgRmxvYXRSZWN0IG1h
c2tCb3VuZGFyaWVzID0gbWFza0VsZW1lbnQtPm1hc2tCb3VuZGluZ0JveChvYmplY3RCb3VuZGlu
Z0JveCk7CisKKyAgICAvLyBSZXNvdXJjZSB3YXMgbm90IGxheW91dGVkIHlldC4gR2l2ZSBiYWNr
IGNsaXBwaW5nIHJlY3Qgb2YgdGhlIG1hc2suCisgICAgaWYgKHNlbGZOZWVkc0xheW91dCgpKQor
ICAgICAgICByZXR1cm4gbWFza0JvdW5kYXJpZXM7CisKKyAgICBpZiAobV9tYXNrQ29udGVudEJv
dW5kYXJpZXMuaXNFbXB0eSgpKQorICAgICAgICBjYWxjdWxhdGVNYXNrQ29udGVudFJlcGFpbnRS
ZWN0KCk7CisKKyAgICBGbG9hdFJlY3QgbWFza1JlY3QgPSBtX21hc2tDb250ZW50Qm91bmRhcmll
czsKKyAgICBpZiAobWFza0VsZW1lbnQtPm1hc2tDb250ZW50VW5pdHMoKSA9PSBTVkdVbml0VHlw
ZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKKyAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybTsKKyAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShvYmplY3RCb3Vu
ZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CisgICAgICAgIHRyYW5zZm9ybS5z
Y2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdC
b3guaGVpZ2h0KCkpOworICAgICAgICBtYXNrUmVjdCA9IHRyYW5zZm9ybS5tYXBSZWN0KG1hc2tS
ZWN0KTsKKyAgICB9CisKKyAgICBtYXNrUmVjdC5pbnRlcnNlY3QobWFza0JvdW5kYXJpZXMpOwor
ICAgIHJldHVybiBtYXNrUmVjdDsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlTWFza2VyLmgJKHJldmlzaW9uIDc1MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaDo3NTM0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgUmVuZGVyU1ZH
UmVzb3VyY2VNYXNrZXJfaAorI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcl9oCisKKyNp
ZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5o
IgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiU1ZH
TWFza0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKKworI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0cnVjdCBNYXNrZXJEYXRhIHsKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJ
bWFnZTsKK307CisKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlTWFza2VyIDogcHVibGljIFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1h
c2tlcihTVkdNYXNrRWxlbWVudCopOworICAgIHZpcnR1YWwgflJlbmRlclNWR1Jlc291cmNlTWFz
a2VyKCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJl
dHVybiAiUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJv
b2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOworICAgIHZpcnR1YWwgYm9vbCBhcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVu
c2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7CisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3Vy
Y2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKTsKKworICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5p
dFR5cGUgbWFza1VuaXRzKCkgY29uc3QgeyByZXR1cm4gdG9Vbml0VHlwZShzdGF0aWNfY2FzdDxT
VkdNYXNrRWxlbWVudCo+KG5vZGUoKSktPm1hc2tVbml0cygpKTsgfQorICAgIFNWR1VuaXRUeXBl
czo6U1ZHVW5pdFR5cGUgbWFza0NvbnRlbnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIHRvVW5pdFR5
cGUoc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpLT5tYXNrQ29udGVudFVuaXRz
KCkpOyB9CisKKyAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUo
KSBjb25zdCB7IHJldHVybiBzX3Jlc291cmNlVHlwZTsgfQorICAgIHN0YXRpYyBSZW5kZXJTVkdS
ZXNvdXJjZVR5cGUgc19yZXNvdXJjZVR5cGU7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkcmF3Q29u
dGVudEludG9NYXNrSW1hZ2UoTWFza2VyRGF0YSosIGNvbnN0IFNWR01hc2tFbGVtZW50KiwgUmVu
ZGVyT2JqZWN0Kik7CisgICAgdm9pZCBjYWxjdWxhdGVNYXNrQ29udGVudFJlcGFpbnRSZWN0KCk7
CisKKyAgICBGbG9hdFJlY3QgbV9tYXNrQ29udGVudEJvdW5kYXJpZXM7CisgICAgSGFzaE1hcDxS
ZW5kZXJPYmplY3QqLCBNYXNrZXJEYXRhKj4gbV9tYXNrZXI7Cit9OworCit9CisKKyNlbmRpZgor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlUGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShyZXZpc2lvbiA3NTM0NykJKGZyb20gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6NzUzNDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgiCisKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuQXR0cmlidXRlcy5o
IgorI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRv
b2xzLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1JlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnNf
cmVzb3VyY2VUeXBlID0gUGF0dGVyblJlc291cmNlVHlwZTsKKworUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuOjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4oU1ZHUGF0dGVybkVsZW1lbnQqIG5vZGUp
CisgICAgOiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcihub2RlKQorICAgICwgbV9zaG91bGRD
b2xsZWN0UGF0dGVybkF0dHJpYnV0ZXModHJ1ZSkKK3sKK30KKworUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuOjp+UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuKCkKK3sKKyAgICBpZiAobV9wYXR0ZXJu
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlQWxsVmFsdWVzKG1fcGF0
dGVybik7CisgICAgbV9wYXR0ZXJuLmNsZWFyKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuOjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRh
dGlvbikKK3sKKyAgICBpZiAoIW1fcGF0dGVybi5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRl
QWxsVmFsdWVzKG1fcGF0dGVybik7CisgICAgICAgIG1fcGF0dGVybi5jbGVhcigpOworICAgIH0K
KworICAgIG1fc2hvdWxkQ29sbGVjdFBhdHRlcm5BdHRyaWJ1dGVzID0gdHJ1ZTsKKyAgICBtYXJr
QWxsQ2xpZW50c0ZvckludmFsaWRhdGlvbihtYXJrRm9ySW52YWxpZGF0aW9uID8gUmVwYWludElu
dmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOworfQorCit2b2lkIFJlbmRlclNW
R1Jlc291cmNlUGF0dGVybjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCogY2xp
ZW50LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24pCit7CisgICAgQVNTRVJUKGNsaWVudCk7CisK
KyAgICBpZiAobV9wYXR0ZXJuLmNvbnRhaW5zKGNsaWVudCkpCisgICAgICAgIGRlbGV0ZSBtX3Bh
dHRlcm4udGFrZShjbGllbnQpOworCisgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihjbGll
bnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBSZXBhaW50SW52YWxpZGF0aW9uIDogUGFyZW50T25s
eUludmFsaWRhdGlvbik7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBs
eVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSogc3R5bGUsIEdyYXBo
aWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkKK3sKKyAg
ICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQoc3R5bGUpOworICAgIEFTU0VSVChjb250ZXh0
KTsKKyAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CisKKyAg
ICAvLyBCZSBzdXJlIHRvIHN5bmNocm9uaXplIGFsbCBTVkcgcHJvcGVydGllcyBvbiB0aGUgcGF0
dGVybkVsZW1lbnQgX2JlZm9yZV8gcHJvY2Vzc2luZyBhbnkgZnVydGhlci4KKyAgICAvLyBPdGhl
cndoaXNlIHRoZSBjYWxsIHRvIGNvbGxlY3RQYXR0ZXJuQXR0cmlidXRlcygpIGJlbG93LCBtYXkg
Y2F1c2UgdGhlIFNWRyBET00gcHJvcGVydHkKKyAgICAvLyBzeW5jaHJvbml6YXRpb24gdG8ga2lj
ayBpbiwgd2hpY2ggY2F1c2VzIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoKSB0byBiZSBjYWxs
ZWQsIHdoaWNoIGluIHR1cm4gZGVsZXRlcyBvdXIKKyAgICAvLyBQYXR0ZXJuRGF0YSBvYmplY3Qh
IExlYXZpbmcgb3V0IHRoZSBsaW5lIGJlbG93IHdpbGwgY2F1c2Ugc3ZnL2R5bmFtaWMtdXBkYXRl
cy9TVkdQYXR0ZXJuRWxlbWVudC1zdmdkb20qIHRvIGNyYXNoLgorICAgIFNWR1BhdHRlcm5FbGVt
ZW50KiBwYXR0ZXJuRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1BhdHRlcm5FbGVtZW50Kj4obm9k
ZSgpKTsKKyAgICBpZiAoIXBhdHRlcm5FbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAobV9zaG91bGRDb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMpIHsKKyAgICAgICAgcGF0
dGVybkVsZW1lbnQtPnVwZGF0ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGFueVFOYW1lKCkpOworCisg
ICAgICAgIG1fYXR0cmlidXRlcyA9IFBhdHRlcm5BdHRyaWJ1dGVzKCk7CisgICAgICAgIHBhdHRl
cm5FbGVtZW50LT5jb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMobV9hdHRyaWJ1dGVzKTsKKyAgICAg
ICAgbV9zaG91bGRDb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMgPSBmYWxzZTsKKyAgICB9CisKKyAg
ICAvLyBTcGVjOiBXaGVuIHRoZSBnZW9tZXRyeSBvZiB0aGUgYXBwbGljYWJsZSBlbGVtZW50IGhh
cyBubyB3aWR0aCBvciBoZWlnaHQgYW5kIG9iamVjdEJvdW5kaW5nQm94IGlzIHNwZWNpZmllZCwK
KyAgICAvLyB0aGVuIHRoZSBnaXZlbiBlZmZlY3QgKGUuZy4gYSBncmFkaWVudCBvciBhIGZpbHRl
cikgd2lsbCBiZSBpZ25vcmVkLgorICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9i
amVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmJvdW5kaW5n
Qm94TW9kZSgpICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFtX3BhdHRlcm4uY29udGFpbnMob2JqZWN0KSkKKyAgICAgICAg
bV9wYXR0ZXJuLnNldChvYmplY3QsIG5ldyBQYXR0ZXJuRGF0YSk7CisKKyAgICBQYXR0ZXJuRGF0
YSogcGF0dGVybkRhdGEgPSBtX3BhdHRlcm4uZ2V0KG9iamVjdCk7CisgICAgaWYgKCFwYXR0ZXJu
RGF0YS0+cGF0dGVybikgeworICAgICAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZXRlcm1pbmUgdGhl
IHBhdHRlcm4gY29udGVudCBlbGVtZW50IHJvb3QsIHN0b3AgaGVyZS4KKyAgICAgICAgaWYgKCFt
X2F0dHJpYnV0ZXMucGF0dGVybkNvbnRlbnRFbGVtZW50KCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgLy8gQ29tcHV0ZSBhbGwgbmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9u
cyB0byBidWlsZCB0aGUgdGlsZSBpbWFnZSAmIHRoZSBwYXR0ZXJuLgorICAgICAgICBGbG9hdFJl
Y3QgdGlsZUJvdW5kYXJpZXM7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0aWxlSW1hZ2VUcmFu
c2Zvcm07CisgICAgICAgIGlmICghYnVpbGRUaWxlSW1hZ2VUcmFuc2Zvcm0ob2JqZWN0LCBtX2F0
dHJpYnV0ZXMsIHBhdHRlcm5FbGVtZW50LCB0aWxlQm91bmRhcmllcywgdGlsZUltYWdlVHJhbnNm
b3JtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gYWJzb2x1dGVUcmFuc2Zvcm07CisgICAgICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1
bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKG9iamVjdCwg
YWJzb2x1dGVUcmFuc2Zvcm0pOworCisgICAgICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRpbGVCb3Vu
ZGFyaWVzID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdCh0aWxlQm91bmRhcmllcyk7CisKKyAg
ICAgICAgLy8gQnVpbGQgdGlsZSBpbWFnZS4KKyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiB0
aWxlSW1hZ2UgPSBjcmVhdGVUaWxlSW1hZ2Uob2JqZWN0LCBtX2F0dHJpYnV0ZXMsIHRpbGVCb3Vu
ZGFyaWVzLCBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCB0aWxlSW1hZ2VUcmFuc2Zvcm0pOworICAg
ICAgICBpZiAoIXRpbGVJbWFnZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBSZWZQdHI8SW1hZ2U+IGNvcGllZEltYWdlID0gdGlsZUltYWdlLT5jb3B5SW1hZ2UoKTsKKyAg
ICAgICAgaWYgKCFjb3BpZWRJbWFnZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAvLyBCdWlsZCBwYXR0ZXJuLgorICAgICAgICBwYXR0ZXJuRGF0YS0+cGF0dGVybiA9IFBh
dHRlcm46OmNyZWF0ZShjb3BpZWRJbWFnZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIGlmICghcGF0
dGVybkRhdGEtPnBhdHRlcm4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
Ly8gQ29tcHV0ZSBwYXR0ZXJuIHNwYWNlIHRyYW5zZm9ybWF0aW9uLgorICAgICAgICBwYXR0ZXJu
RGF0YS0+dHJhbnNmb3JtLnRyYW5zbGF0ZSh0aWxlQm91bmRhcmllcy54KCksIHRpbGVCb3VuZGFy
aWVzLnkoKSk7CisgICAgICAgIHBhdHRlcm5EYXRhLT50cmFuc2Zvcm0uc2NhbGUodGlsZUJvdW5k
YXJpZXMud2lkdGgoKSAvIGFic29sdXRlVGlsZUJvdW5kYXJpZXMud2lkdGgoKSwgdGlsZUJvdW5k
YXJpZXMuaGVpZ2h0KCkgLyBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLmhlaWdodCgpKTsKKworICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybSA9IG1fYXR0cmlidXRlcy5wYXR0
ZXJuVHJhbnNmb3JtKCk7CisgICAgICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5pc0lkZW50aXR5
KCkpCisgICAgICAgICAgICBwYXR0ZXJuRGF0YS0+dHJhbnNmb3JtLm11bHRpcGx5KHBhdHRlcm5U
cmFuc2Zvcm0pOworCisgICAgICAgIHBhdHRlcm5EYXRhLT5wYXR0ZXJuLT5zZXRQYXR0ZXJuU3Bh
Y2VUcmFuc2Zvcm0ocGF0dGVybkRhdGEtPnRyYW5zZm9ybSk7CisgICAgfQorCisgICAgLy8gRHJh
dyBwYXR0ZXJuCisgICAgY29udGV4dC0+c2F2ZSgpOworCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5
bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CisgICAgQVNTRVJUKHN2Z1N0eWxlKTsK
KworICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsKKyAgICAgICAgY29u
dGV4dC0+c2V0QWxwaGEoc3ZnU3R5bGUtPmZpbGxPcGFjaXR5KCkpOworICAgICAgICBjb250ZXh0
LT5zZXRGaWxsUGF0dGVybihwYXR0ZXJuRGF0YS0+cGF0dGVybik7CisgICAgICAgIGNvbnRleHQt
PnNldEZpbGxSdWxlKHN2Z1N0eWxlLT5maWxsUnVsZSgpKTsKKyAgICB9IGVsc2UgaWYgKHJlc291
cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKSB7CisgICAgICAgIGlmIChzdmdTdHlsZS0+dmVj
dG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFKQorICAgICAgICAgICAgcGF0dGVy
bkRhdGEtPnBhdHRlcm4tPnNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybSh0cmFuc2Zvcm1Pbk5vblNj
YWxpbmdTdHJva2Uob2JqZWN0LCBwYXR0ZXJuRGF0YS0+dHJhbnNmb3JtKSk7CisgICAgICAgIGNv
bnRleHQtPnNldEFscGhhKHN2Z1N0eWxlLT5zdHJva2VPcGFjaXR5KCkpOworICAgICAgICBjb250
ZXh0LT5zZXRTdHJva2VQYXR0ZXJuKHBhdHRlcm5EYXRhLT5wYXR0ZXJuKTsKKyAgICAgICAgU1ZH
UmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwg
b2JqZWN0KTsKKyAgICB9CisKKyAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2Rl
KSB7CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShUZXh0TW9kZUZpbGwpOworCisjaWYg
UExBVEZPUk0oQ0cpCisgICAgICAgICAgICBjb250ZXh0LT5hcHBseUZpbGxQYXR0ZXJuKCk7Cisj
ZW5kaWYKKyAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9k
ZSkgeworICAgICAgICAgICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKFRleHRNb2RlU3Ry
b2tlKTsKKworI2lmIFBMQVRGT1JNKENHKQorICAgICAgICAgICAgY29udGV4dC0+YXBwbHlTdHJv
a2VQYXR0ZXJuKCk7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2Uo
UmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQg
cmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQoreworICAgIEFTU0VSVChjb250ZXh0KTsK
KyAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CisKKyAgICBp
ZiAocGF0aCAmJiAhKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKKyAgICAgICAg
aWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKKyAgICAgICAgICAgIGNvbnRleHQt
PmZpbGxQYXRoKCpwYXRoKTsKKyAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlU
b1N0cm9rZU1vZGUpCisgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAg
ICB9CisKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRS
ZWN0IGNhbGN1bGF0ZVBhdHRlcm5Cb3VuZGFyaWVzKGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiBh
dHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNWR1BhdHRlcm5FbGVt
ZW50KiBwYXR0ZXJuRWxlbWVudCkKK3sKKyAgICBBU1NFUlQocGF0dGVybkVsZW1lbnQpOworCisg
ICAgaWYgKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpCisgICAgICAgIHJldHVybiBGbG9h
dFJlY3QoYXR0cmlidXRlcy54KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5kaW5n
Qm94LndpZHRoKCkgKyBvYmplY3RCb3VuZGluZ0JveC54KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgYXR0cmlidXRlcy55KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5kaW5n
Qm94LmhlaWdodCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZXMud2lkdGgoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91
bmRpbmdCb3gud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLmhl
aWdodCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC5oZWlnaHQoKSk7
CisKKyAgICByZXR1cm4gRmxvYXRSZWN0KGF0dHJpYnV0ZXMueCgpLnZhbHVlKHBhdHRlcm5FbGVt
ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMueSgpLnZhbHVlKHBhdHRlcm5F
bGVtZW50KSwKKyAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMud2lkdGgoKS52YWx1ZShw
YXR0ZXJuRWxlbWVudCksCisgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLmhlaWdodCgp
LnZhbHVlKHBhdHRlcm5FbGVtZW50KSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuOjpidWlsZFRpbGVJbWFnZVRyYW5zZm9ybShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFBhdHRlcm5BdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiBw
YXR0ZXJuRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGbG9hdFJlY3QmIHBhdHRlcm5Cb3VuZGFyaWVzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9y
bSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdAoreworICAgIEFTU0VSVChyZW5kZXJlcik7Cisg
ICAgQVNTRVJUKHBhdHRlcm5FbGVtZW50KTsKKworICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGlu
Z0JveCA9IHJlbmRlcmVyLT5vYmplY3RCb3VuZGluZ0JveCgpOworICAgIHBhdHRlcm5Cb3VuZGFy
aWVzID0gY2FsY3VsYXRlUGF0dGVybkJvdW5kYXJpZXMoYXR0cmlidXRlcywgb2JqZWN0Qm91bmRp
bmdCb3gsIHBhdHRlcm5FbGVtZW50KTsgCisgICAgaWYgKHBhdHRlcm5Cb3VuZGFyaWVzLndpZHRo
KCkgPD0gMCB8fCBwYXR0ZXJuQm91bmRhcmllcy5oZWlnaHQoKSA8PSAwKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdmlld0JveENUTSA9IHBhdHRlcm5FbGVt
ZW50LT52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHBhdHRlcm5FbGVtZW50LT52aWV3Qm94KCksIHBh
dHRlcm5FbGVtZW50LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCksIHBhdHRlcm5Cb3VuZGFyaWVzLndp
ZHRoKCksIHBhdHRlcm5Cb3VuZGFyaWVzLmhlaWdodCgpKTsKKworICAgIC8vIEFwcGx5IHZpZXdC
b3gvb2JqZWN0Qm91bmRpbmdCb3ggdHJhbnNmb3JtYXRpb25zLgorICAgIGlmICghdmlld0JveENU
TS5pc0lkZW50aXR5KCkpCisgICAgICAgIHRpbGVJbWFnZVRyYW5zZm9ybSA9IHZpZXdCb3hDVE07
CisgICAgZWxzZSBpZiAoYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGVDb250ZW50KCkpIHsKKyAg
ICAgICAgdGlsZUltYWdlVHJhbnNmb3JtLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54KCks
IG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CisgICAgICAgIHRpbGVJbWFnZVRyYW5zZm9ybS5zY2Fs
ZShvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpLCBvYmplY3RCb3VuZGluZ0JveC5oZWlnaHQoKSk7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NPd25QdHI8SW1hZ2VCdWZmZXI+
IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6Y3JlYXRlVGlsZUltYWdlKFJlbmRlck9iamVjdCog
b2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHRpbGVCb3VuZGFyaWVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0aWxlSW1hZ2VUcmFuc2Zvcm0pIGNvbnN0Cit7CisgICAgQVNTRVJUKG9iamVj
dCk7CisKKyAgICAvLyBDbGFtcCB0aWxlIGltYWdlIHNpemUgYWdhaW5zdCBTVkcgdmlld3BvcnQg
c2l6ZSwgYXMgbGFzdCByZXNvcnQsIHRvIGF2b2lkIGFsbG9jYXRpbmcgaHVnZSBpbWFnZSBidWZm
ZXJzLgorICAgIEZsb2F0UmVjdCBjb250ZW50Qm94UmVjdCA9IFNWR1JlbmRlclN1cHBvcnQ6OmZp
bmRUcmVlUm9vdE9iamVjdChvYmplY3QpLT5jb250ZW50Qm94UmVjdCgpOworCisgICAgRmxvYXRS
ZWN0IGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzID0gYWJzb2x1dGVUaWxlQm91bmRhcmll
czsKKyAgICBpZiAoY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMud2lkdGgoKSA+IGNvbnRl
bnRCb3hSZWN0LndpZHRoKCkpCisgICAgICAgIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVz
LnNldFdpZHRoKGNvbnRlbnRCb3hSZWN0LndpZHRoKCkpOworCisgICAgaWYgKGNsYW1wZWRBYnNv
bHV0ZVRpbGVCb3VuZGFyaWVzLmhlaWdodCgpID4gY29udGVudEJveFJlY3QuaGVpZ2h0KCkpCisg
ICAgICAgIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLnNldEhlaWdodChjb250ZW50Qm94
UmVjdC5oZWlnaHQoKSk7CisKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZTsKKwor
ICAgIGlmICghU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVU
aWxlQm91bmRhcmllcywgY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMsIHRpbGVJbWFnZSwg
Q29sb3JTcGFjZURldmljZVJHQikpCisgICAgICAgIHJldHVybiBQYXNzT3duUHRyPEltYWdlQnVm
ZmVyPigpOworCisgICAgR3JhcGhpY3NDb250ZXh0KiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUlt
YWdlLT5jb250ZXh0KCk7CisgICAgQVNTRVJUKHRpbGVJbWFnZUNvbnRleHQpOworCisgICAgLy8g
VGhlIGltYWdlIGJ1ZmZlciByZXByZXNlbnRzIHRoZSBmaW5hbCByZW5kZXJlZCBzaXplLCBzbyB0
aGUgY29udGVudCBoYXMgdG8gYmUgc2NhbGVkICh0byBhdm9pZCBwaXhlbGF0aW9uKS4KKyAgICB0
aWxlSW1hZ2VDb250ZXh0LT5zY2FsZShGbG9hdFNpemUoYWJzb2x1dGVUaWxlQm91bmRhcmllcy53
aWR0aCgpIC8gdGlsZUJvdW5kYXJpZXMud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWJzb2x1dGVUaWxlQm91bmRhcmllcy5oZWlnaHQoKSAvIHRpbGVCb3Vu
ZGFyaWVzLmhlaWdodCgpKSk7CisKKyAgICAvLyBBcHBseSB0aWxlIGltYWdlIHRyYW5zZm9ybWF0
aW9ucy4KKyAgICBpZiAoIXRpbGVJbWFnZVRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAg
IHRpbGVJbWFnZUNvbnRleHQtPmNvbmNhdENUTSh0aWxlSW1hZ2VUcmFuc2Zvcm0pOworCisgICAg
QWZmaW5lVHJhbnNmb3JtIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKKworICAgIC8vIERyYXcgdGhl
IGNvbnRlbnQgaW50byB0aGUgSW1hZ2VCdWZmZXIuCisgICAgZm9yIChOb2RlKiBub2RlID0gYXR0
cmlidXRlcy5wYXR0ZXJuQ29udGVudEVsZW1lbnQoKS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2Rl
ID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoIW5vZGUtPmlzU1ZHRWxlbWVu
dCgpIHx8ICFzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSktPmlzU3R5bGVkKCkgfHwgIW5v
ZGUtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgU1ZHSW1hZ2VC
dWZmZXJUb29sczo6cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIodGlsZUltYWdlLmdldCgpLCBu
b2RlLT5yZW5kZXJlcigpLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOworICAgIH0KKworICAgIHJl
dHVybiB0aWxlSW1hZ2UucmVsZWFzZSgpOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0
dGVybi5oCShyZXZpc2lvbiA3NTM0NykJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlUGF0dGVybi5oOjc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1Jlc291
cmNlUGF0dGVybl9oCisjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybl9oCisKKyNpZiBF
TkFCTEUoU1ZHKQorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgor
I2luY2x1ZGUgIlBhdHRlcm5BdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuaCIKKyNpbmNsdWRlICJTVkdQYXR0ZXJuRWxlbWVudC5oIgorI2luY2x1ZGUg
IlNWR1VuaXRUeXBlcy5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFBhdHRlcm5EYXRh
IHsKKyAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybjsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtOworfTsKKworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuIDogcHVibGljIFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm4oU1ZHUGF0dGVybkVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm4oKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNv
bnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4iOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZhbGlkYXRpb24g
PSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9i
amVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOworCisgICAgdmlydHVhbCBi
b29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0Nv
bnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2ln
bmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOworICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0
KCk7IH0KKworICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CisgICAgc3RhdGljIFJlbmRlclNWR1Jl
c291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKKworcHJpdmF0ZToKKyAgICBib29sIGJ1aWxkVGls
ZUltYWdlVHJhbnNmb3JtKFJlbmRlck9iamVjdCosIGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiwg
Y29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqLCBGbG9hdFJlY3QmIHBhdHRlcm5Cb3VuZGFyaWVzLCBB
ZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSkgY29uc3Q7CisKKyAgICBQYXNzT3du
UHRyPEltYWdlQnVmZmVyPiBjcmVhdGVUaWxlSW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGF0
dGVybkF0dHJpYnV0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVCb3VuZGFyaWVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIGFi
c29sdXRlVGlsZUJvdW5kYXJpZXMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJh
bnNmb3JtKSBjb25zdDsKKworICAgIGJvb2wgbV9zaG91bGRDb2xsZWN0UGF0dGVybkF0dHJpYnV0
ZXMgOiAxOworICAgIFBhdHRlcm5BdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKyAgICBIYXNoTWFw
PFJlbmRlck9iamVjdCosIFBhdHRlcm5EYXRhKj4gbV9wYXR0ZXJuOworfTsKKworfQorCisjZW5k
aWYKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwCShyZXZpc2lv
biA3NTM0NykJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
UmFkaWFsR3JhZGllbnQuY3BwOjc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3Jh
ZGllbnQuaCIKKworI2luY2x1ZGUgIlJhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5oIgorI2luY2x1
ZGUgIlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1JlbmRlclNWR1Jlc291cmNlVHlwZSBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Ojpz
X3Jlc291cmNlVHlwZSA9IFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBlOworCitSZW5kZXJTVkdS
ZXNvdXJjZVJhZGlhbEdyYWRpZW50OjpSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50KFNW
R1JhZGlhbEdyYWRpZW50RWxlbWVudCogbm9kZSkKKyAgICA6IFJlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQobm9kZSkKK3sKK30KKworUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudDo6flJl
bmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQoKQoreworfQorCit2b2lkIFJlbmRlclNWR1Jl
c291cmNlUmFkaWFsR3JhZGllbnQ6OmNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMoU1ZHR3JhZGll
bnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQpCit7CisgICAgbV9hdHRyaWJ1dGVzID0gUmFkaWFs
R3JhZGllbnRBdHRyaWJ1dGVzKCk7CisgICAgc3RhdGljX2Nhc3Q8U1ZHUmFkaWFsR3JhZGllbnRF
bGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KS0+Y29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhtX2F0
dHJpYnV0ZXMpOworfQorCit2b2lkIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQ6OmJ1
aWxkR3JhZGllbnQoR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEsIFNWR0dyYWRpZW50RWxlbWVu
dCogZ3JhZGllbnRFbGVtZW50KSBjb25zdAoreworICAgIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVu
dCogcmFkaWFsR3JhZGllbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUmFkaWFsR3JhZGllbnRF
bGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KTsKKworICAgIC8vIERldGVybWluZSBncmFkaWVudCBm
b2NhbC9jZW50ZXIgcG9pbnRzIGFuZCByYWRpdXMKKyAgICBGbG9hdFBvaW50IGZvY2FsUG9pbnQ7
CisgICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludDsKKyAgICBmbG9hdCByYWRpdXM7CisgICAgcmFk
aWFsR3JhZGllbnRFbGVtZW50LT5jYWxjdWxhdGVGb2NhbENlbnRlclBvaW50c0FuZFJhZGl1cyht
X2F0dHJpYnV0ZXMsIGZvY2FsUG9pbnQsIGNlbnRlclBvaW50LCByYWRpdXMpOworCisgICAgZ3Jh
ZGllbnREYXRhLT5ncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoZm9jYWxQb2ludCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvLyBTVkcgZG9lcyBu
b3Qgc3VwcG9ydCBhICJmb2N1cyByYWRpdXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2VudGVyUG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmFkaXVzKTsKKworICAgIGdyYWRpZW50RGF0YS0+Z3JhZGll
bnQtPnNldFNwcmVhZE1ldGhvZChtX2F0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCkpOworCisgICAg
Ly8gQWRkIHN0b3BzCisgICAgYWRkU3RvcHMoZ3JhZGllbnREYXRhLCBtX2F0dHJpYnV0ZXMuc3Rv
cHMoKSk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQu
aAkocmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Lmg6NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRl
clNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnRfaAorI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZVJh
ZGlhbEdyYWRpZW50X2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmFkaWFsR3JhZGll
bnRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDsK
KworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudCA6IHB1YmxpYyBSZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50IHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdSZXNvdXJjZVJhZGlh
bEdyYWRpZW50KFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCopOworICAgIHZpcnR1YWwgflJlbmRl
clNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQoKTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciog
cmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50IjsgfQorCisgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBl
KCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KKyAgICBzdGF0aWMgUmVuZGVyU1ZH
UmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBlOworCisgICAgdmlydHVhbCBib29sIGJvdW5kaW5n
Qm94TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVHcmFkaWVudFRyYW5zZm9ybShBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkgeyB0cmFuc2Zvcm0gPSBtX2F0dHJpYnV0ZXMuZ3JhZGllbnRUcmFu
c2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKFNW
R0dyYWRpZW50RWxlbWVudCopOworICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KEdyYWRp
ZW50RGF0YSosIFNWR0dyYWRpZW50RWxlbWVudCopIGNvbnN0OworCitwcml2YXRlOgorICAgIFJh
ZGlhbEdyYWRpZW50QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Cit9OworCit9CisKKyNlbmRpZgor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCShyZXZpc2lvbiA3NTM0NykJKGZy
b20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5j
cHA6NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVy
U3VwcG9ydC5oIgorCisjaWYgUExBVEZPUk0oU0tJQSkKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRTa2lhLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdSZXNv
dXJjZVR5cGUgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpzX3Jlc291cmNlVHlwZSA9IFNv
bGlkQ29sb3JSZXNvdXJjZVR5cGU7CisKK1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6UmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKCkKK3sKK30KKworUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yOjp+UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKCkKK3sKK30KKworYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIFJlbmRlclN0eWxlKiBzdHlsZSwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWdu
ZWQgc2hvcnQgcmVzb3VyY2VNb2RlKQoreworICAgIC8vIFdlIGFyZSBOT1QgYWxsb3dlZCB0byBB
U1NFUlQob2JqZWN0KSBoZXJlLCB1bmxpa2UgYWxsIG90aGVyIHJlc291cmNlcy4KKyAgICAvLyBS
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IgaXMgdGhlIG9ubHkgcmVzb3VyY2Ugd2hpY2ggbWF5
IGJlIHVzZWQgZnJvbSBIVE1MLCB3aGVuIHJlbmRlcmluZworICAgIC8vIFNWRyBGb250cyBmb3Ig
YSBIVE1MIGRvY3VtZW50LiBUaGlzIHdpbGwgYmUgaW5kaWNhdGVkIGJ5IGEgbnVsbCBSZW5kZXJP
YmplY3QgcG9pbnRlci4KKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgQVNTRVJUKHJlc291cmNl
TW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOworCisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN2Z1N0eWxlID0gc3R5bGUgPyBzdHlsZS0+c3ZnU3R5bGUoKSA6IDA7CisgICAgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlID0gc3R5bGUgPyBzdHlsZS0+Y29sb3JTcGFjZSgpIDogQ29sb3JTcGFjZURl
dmljZVJHQjsKKworICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpIHsKKyAg
ICAgICAgY29udGV4dC0+c2V0QWxwaGEoc3ZnU3R5bGUgPyBzdmdTdHlsZS0+ZmlsbE9wYWNpdHko
KSA6IDEuMGYpOworICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IobV9jb2xvciwgY29sb3JT
cGFjZSk7CisgICAgICAgIGNvbnRleHQtPnNldEZpbGxSdWxlKHN2Z1N0eWxlID8gc3ZnU3R5bGUt
PmZpbGxSdWxlKCkgOiBSVUxFX05PTlpFUk8pOworCisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUg
JiBBcHBseVRvVGV4dE1vZGUpCisgICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01v
ZGUoVGV4dE1vZGVGaWxsKTsKKyAgICB9IGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9T
dHJva2VNb2RlKSB7CisgICAgICAgIGNvbnRleHQtPnNldEFscGhhKHN2Z1N0eWxlID8gc3ZnU3R5
bGUtPnN0cm9rZU9wYWNpdHkoKSA6IDEuMGYpOworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VD
b2xvcihtX2NvbG9yLCBjb2xvclNwYWNlKTsKKworICAgICAgICBpZiAoc3R5bGUpCisgICAgICAg
ICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQs
IHN0eWxlLCBvYmplY3QpOworCisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4
dE1vZGUpCisgICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoVGV4dE1vZGVT
dHJva2UpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQ
YXRoKiBwYXRoKQoreworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBBU1NFUlQocmVzb3VyY2VN
b2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CisKKyAgICBpZiAocGF0aCAmJiAhKHJlc291cmNl
TW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKKyAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFw
cGx5VG9GaWxsTW9kZSkKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKKyAg
ICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCisgICAgICAg
ICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKKyAgICB9Cit9CisKK30KKworI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgJKHJldmlzaW9uIDc1MzQ3KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmg6NzUzNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yX2gKKyNkZWZpbmUgUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiQ29sb3IuaCIK
KyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ciA6IHB1YmxpYyBSZW5kZXJTVkdSZXNvdXJjZSB7CitwdWJsaWM6CisgICAgUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yKCk7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29s
ID0gdHJ1ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5k
ZXJPYmplY3QqLCBib29sID0gdHJ1ZSkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNp
Z25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVz
b3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VC
b3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorCisgICAg
dmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1
cm4gc19yZXNvdXJjZVR5cGU7IH0KKyAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNf
cmVzb3VyY2VUeXBlOworCisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9jb2xvcjsgfQorICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fY29s
b3IgPSBjb2xvcjsgfQorCitwcml2YXRlOgorICAgIENvbG9yIG1fY29sb3I7Cit9OworCit9CisK
KyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9uIDc1MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHA6NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA3LCAyMDA4LCAyMDA5IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNp
bmNsdWRlICJSZW5kZXJTVkdSb290LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5o
IgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUu
aCIKKworI2lmIEVOQUJMRShGSUxURVJTKQorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmls
dGVyLmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitSZW5kZXJTVkdSb290OjpSZW5kZXJTVkdSb290KFNWR1N0eWxlZEVsZW1lbnQqIG5v
ZGUpCisgICAgOiBSZW5kZXJCb3gobm9kZSkKKyAgICAsIG1faXNMYXlvdXRTaXplQ2hhbmdlZChm
YWxzZSkKKyAgICAsIG1fbmVlZHNCb3VuZGFyaWVzT3JUcmFuc2Zvcm1VcGRhdGUodHJ1ZSkKK3sK
KyAgICBzZXRSZXBsYWNlZCh0cnVlKTsKK30KKworUmVuZGVyU1ZHUm9vdDo6flJlbmRlclNWR1Jv
b3QoKQoreworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKCkKK3sKKyAgICBBU1NFUlQocHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpOwor
CisgICAgaW50IGJvcmRlckFuZFBhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsKKyAg
ICBpbnQgd2lkdGggPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoZmFsc2UpICsgYm9yZGVy
QW5kUGFkZGluZzsKKworICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBz
dHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKQorICAgICAgICB3
aWR0aCA9IG1pbih3aWR0aCwgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICsgKHN0eWxlKCkt
PmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gYm9yZGVyQW5kUGFkZGluZyA6IDApKTsKKwor
ICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpIHx8IChzdHlsZSgpLT53aWR0aCgp
LmlzQXV0bygpICYmIHN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSkgeworICAgICAgICBt
X21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IDA7CisgICAgICAgIG1fbWF4UHJlZmVycmVkTG9n
aWNhbFdpZHRoID0gd2lkdGg7CisgICAgfSBlbHNlCisgICAgICAgIG1fbWluUHJlZmVycmVkTG9n
aWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSB3aWR0aDsKKworICAgIHNl
dFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7Cit9CisKK2ludCBSZW5kZXJTVkdS
b290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNv
bnN0Cit7CisgICAgaW50IHJlcGxhY2VkV2lkdGggPSBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNl
ZExvZ2ljYWxXaWR0aChpbmNsdWRlTWF4V2lkdGgpOworICAgIGlmICghc3R5bGUoKS0+bG9naWNh
bFdpZHRoKCkuaXNQZXJjZW50KCkpCisgICAgICAgIHJldHVybiByZXBsYWNlZFdpZHRoOworCisg
ICAgLy8gRklYTUU6IEludmVzdGlnYXRlIGluIHNpemUgcm91bmRpbmcgaXNzdWVzCisgICAgU1ZH
U1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5vZGUoKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocm91bmRmKHJlcGxhY2VkV2lkdGggKiBzdmctPmN1
cnJlbnRTY2FsZSgpKSk7Cit9CisKK2ludCBSZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRM
b2dpY2FsSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBpbnQgcmVwbGFjZWRIZWlnaHQgPSBSZW5kZXJC
b3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKTsKKyAgICBpZiAoIXN0eWxlKCktPmxv
Z2ljYWxIZWlnaHQoKS5pc1BlcmNlbnQoKSkKKyAgICAgICAgcmV0dXJuIHJlcGxhY2VkSGVpZ2h0
OworCisgICAgLy8gRklYTUU6IEludmVzdGlnYXRlIGluIHNpemUgcm91bmRpbmcgaXNzdWVzCisg
ICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5vZGUo
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocm91bmRmKHJlcGxhY2VkSGVpZ2h0ICog
c3ZnLT5jdXJyZW50U2NhbGUoKSkpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OmxheW91dCgp
Cit7CisgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOworCisgICAgLy8gQXJiaXRyYXJ5IGFmZmlu
ZSB0cmFuc2Zvcm1zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBMYXlvdXRTdGF0ZS4KKyAgICB2aWV3
KCktPmRpc2FibGVMYXlvdXRTdGF0ZSgpOworCisgICAgYm9vbCBuZWVkc0xheW91dCA9IHNlbGZO
ZWVkc0xheW91dCgpOworICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNr
Rm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIG5lZWRzTGF5b3V0KTsKKworICAgIEludFNpemUg
b2xkU2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgY29tcHV0ZUxvZ2ljYWxXaWR0aCgpOwor
ICAgIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7CisgICAgY2FsY1ZpZXdwb3J0KCk7CisKKyAgICBT
VkdTVkdFbGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4obm9kZSgpKTsK
KyAgICBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgPSBzdmctPmhhc1JlbGF0aXZlTGVuZ3RocygpICYm
IG9sZFNpemUgIT0gc2l6ZSgpOworCisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRy
ZW4odGhpcywgbmVlZHNMYXlvdXQpOworICAgIG1faXNMYXlvdXRTaXplQ2hhbmdlZCA9IGZhbHNl
OworCisgICAgLy8gQXQgdGhpcyBwb2ludCBMYXlvdXRSZXBhaW50ZXIgYWxyZWFkeSBncmFiYmVk
IHRoZSBvbGQgYm91bmRzLAorICAgIC8vIHJlY2FsY3VsYXRlIHRoZW0gbm93IHNvIHJlcGFpbnRB
ZnRlckxheW91dCgpIHVzZXMgdGhlIG5ldyBib3VuZHMuCisgICAgaWYgKG1fbmVlZHNCb3VuZGFy
aWVzT3JUcmFuc2Zvcm1VcGRhdGUpIHsKKyAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygp
OworICAgICAgICBtX25lZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRlID0gZmFsc2U7Cisg
ICAgfQorCisgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOworCisgICAgdmlldygp
LT5lbmFibGVMYXlvdXRTdGF0ZSgpOworICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKK30KKwor
Ym9vbCBSZW5kZXJTVkdSb290OjpzZWxmV2lsbFBhaW50KCkKK3sKKyNpZiBFTkFCTEUoRklMVEVS
UykKKyAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNo
ZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhpcyk7CisgICAgcmV0dXJuIHJlc291cmNlcyAm
JiByZXNvdXJjZXMtPmZpbHRlcigpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYK
K30KKwordm9pZCBSZW5kZXJTVkdSb290OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHBhcmVudFgsIGludCBwYXJlbnRZKQoreworICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGlzVmlzaWJsZSA9
IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFOworICAgIEludFBvaW50IHBhcmVudE9y
aWdpbkluQ29udGFpbmVyKHBhcmVudFgsIHBhcmVudFkpOworICAgIEludFBvaW50IGJvcmRlckJv
eE9yaWdpbkluQ29udGFpbmVyID0gcGFyZW50T3JpZ2luSW5Db250YWluZXIgKyBwYXJlbnRPcmln
aW5Ub0JvcmRlckJveCgpOworCisgICAgaWYgKGhhc0JveERlY29yYXRpb25zKCkgJiYgKHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGlzVmlzaWJsZSkKKyAgICAg
ICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIGJvcmRlckJveE9yaWdpbkluQ29udGFp
bmVyLngoKSwgYm9yZGVyQm94T3JpZ2luSW5Db250YWluZXIueSgpKTsKKworICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gQW4gZW1wdHkgdmlld3BvcnQgZGlzYWJsZXMgcmVuZGVyaW5nLiAgRklYTUU6
IFNob3VsZCB3ZSBzdGlsbCByZW5kZXIgZmlsdGVycz8KKyAgICBpZiAobV92aWV3cG9ydFNpemUu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBEb24ndCBwYWludCBpZiB3ZSBk
b24ndCBoYXZlIGtpZHMsIGV4Y2VwdCBpZiB3ZSBoYXZlIGZpbHRlcnMgd2Ugc2hvdWxkIHBhaW50
IHRob3NlLgorICAgIGlmICghZmlyc3RDaGlsZCgpICYmICFzZWxmV2lsbFBhaW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBQYWludEluZm8gYmVjYXVz
ZSBhcHBseVRyYW5zZm9ybSB3aWxsIG1vZGlmeSB0aGUgZGFtYWdlIHJlY3QuCisgICAgUGFpbnRJ
bmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7CisgICAgY2hpbGRQYWludEluZm8uY29udGV4
dC0+c2F2ZSgpOworCisgICAgLy8gQXBwbHkgaW5pdGlhbCB2aWV3cG9ydCBjbGlwIC0gbm90IGFm
ZmVjdGVkIGJ5IG92ZXJmbG93IGhhbmRsaW5nCisgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+
Y2xpcChvdmVyZmxvd0NsaXBSZWN0KGJvcmRlckJveE9yaWdpbkluQ29udGFpbmVyLngoKSwgYm9y
ZGVyQm94T3JpZ2luSW5Db250YWluZXIueSgpKSk7CisKKyAgICAvLyBDb252ZXJ0IGZyb20gY29u
dGFpbmVyIG9mZnNldHMgKGh0bWwgcmVuZGVyZXJzKSB0byBhIHJlbGF0aXZlIHRyYW5zZm9ybSAo
c3ZnIHJlbmRlcmVycykuCisgICAgLy8gVHJhbnNmb3JtIGZyb20gb3VyIHBhaW50IGNvbnRhaW5l
cidzIGNvb3JkaW5hdGUgc3lzdGVtIHRvIG91ciBsb2NhbCBjb29yZHMuCisgICAgY2hpbGRQYWlu
dEluZm8uYXBwbHlUcmFuc2Zvcm0obG9jYWxUb1JlcGFpbnRDb250YWluZXJUcmFuc2Zvcm0ocGFy
ZW50T3JpZ2luSW5Db250YWluZXIpKTsKKworICAgIGJvb2wgY29udGludWVSZW5kZXJpbmcgPSB0
cnVlOworICAgIGlmIChjaGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCkKKyAgICAgICAgY29udGludWVSZW5kZXJpbmcgPSBTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJl
VG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKTsKKworICAgIGlmIChjb250
aW51ZVJlbmRlcmluZykKKyAgICAgICAgUmVuZGVyQm94OjpwYWludChjaGlsZFBhaW50SW5mbywg
MCwgMCk7CisKKyAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVn
cm91bmQpCisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQo
dGhpcywgY2hpbGRQYWludEluZm8sIHBhaW50SW5mby5jb250ZXh0KTsKKworICAgIGNoaWxkUGFp
bnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKworICAgIGlmICgocGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2VPdXRsaW5lIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91
dGxpbmUpICYmIHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIGlzVmlzaWJsZSkKKyAgICAgICAg
cGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCBib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5l
ci54KCksIGJvcmRlckJveE9yaWdpbkluQ29udGFpbmVyLnkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkp
OworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OmRlc3Ryb3koKQoreworICAgIFNWR1Jlc291cmNl
c0NhY2hlOjpjbGllbnREZXN0cm95ZWQodGhpcyk7CisgICAgUmVuZGVyQm94OjpkZXN0cm95KCk7
Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCit7CisgICAgaWYgKGRpZmYgPT0g
U3R5bGVEaWZmZXJlbmNlTGF5b3V0KQorICAgICAgICBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUo
KTsKKyAgICBSZW5kZXJCb3g6OnN0eWxlV2lsbENoYW5nZShkaWZmLCBuZXdTdHlsZSk7Cit9CisK
K3ZvaWQgUmVuZGVyU1ZHUm9vdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3sKKyAgICBSZW5kZXJCb3g6OnN0eWxlRGlk
Q2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5
bGVDaGFuZ2VkKHRoaXMsIGRpZmYsIHN0eWxlKCkpOworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6
OnVwZGF0ZUZyb21FbGVtZW50KCkKK3sKKyAgICBSZW5kZXJCb3g6OnVwZGF0ZUZyb21FbGVtZW50
KCk7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFVwZGF0ZWRGcm9tRWxlbWVudCh0aGlz
LCBzdHlsZSgpKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjpjYWxjVmlld3BvcnQoKQorewor
ICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2Rl
KCkpOworCisgICAgaWYgKCFzdmctPmhhc1NldENvbnRhaW5lclNpemUoKSkgeworICAgICAgICAv
LyBJbiB0aGUgbm9ybWFsIGNhc2Ugb2YgPHN2Zz4gYmVpbmcgc3RhbmQtYWxvbmUgb3IgaW4gYSBD
U1NCb3hNb2RlbCBvYmplY3Qgd2UgdXNlCisgICAgICAgIC8vIFJlbmRlckJveDo6d2lkdGgoKS9o
ZWlnaHQoKSAod2hpY2ggcHVsbHMgZGF0YSBmcm9tIFJlbmRlclN0eWxlKQorICAgICAgICBtX3Zp
ZXdwb3J0U2l6ZSA9IEZsb2F0U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBJbiB0aGUgU1ZHSW1hZ2UgY2FzZSBncmFiIHRoZSBTVkdMZW5n
dGggdmFsdWVzIG9mZiBvZiBTVkdTVkdFbGVtZW50IGFuZCB1c2UKKyAgICAvLyB0aGUgc3BlY2lh
bCByZWxhdGl2ZVdpZHRoVmFsdWUgYWNjZXNzb3JzIHdoaWNoIHJlc3BlY3QgdGhlIHNwZWNpZmll
ZCBjb250YWluZXJTaXplCisgICAgLy8gRklYTUU6IENoZWNrIGhvdyBTVkdJbWFnZSArIHpvb21p
bmcgaXMgc3VwcG9zZWQgdG8gYmUgaGFuZGxlZD8KKyAgICBTVkdMZW5ndGggd2lkdGggPSBzdmct
PndpZHRoKCk7CisgICAgU1ZHTGVuZ3RoIGhlaWdodCA9IHN2Zy0+aGVpZ2h0KCk7CisgICAgbV92
aWV3cG9ydFNpemUgPSBGbG9hdFNpemUod2lkdGgudW5pdFR5cGUoKSA9PSBMZW5ndGhUeXBlUGVy
Y2VudGFnZSA/IHN2Zy0+cmVsYXRpdmVXaWR0aFZhbHVlKCkgOiB3aWR0aC52YWx1ZShzdmcpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodC51bml0VHlwZSgpID09IExlbmd0
aFR5cGVQZXJjZW50YWdlID8gc3ZnLT5yZWxhdGl2ZUhlaWdodFZhbHVlKCkgOiBoZWlnaHQudmFs
dWUoc3ZnKSk7Cit9CisKKy8vIFJlbmRlckJveCBtZXRob2RzIHdpbGwgZXhwZWN0IGNvb3JkaW5h
dGVzIHcvbyBhbnkgdHJhbnNmb3JtcyBpbiBjb29yZGluYXRlcworLy8gcmVsYXRpdmUgdG8gb3Vy
IGJvcmRlckJveCBvcmlnaW4uICBUaGlzIG1ldGhvZCBnaXZlcyB1cyBleGFjdGx5IHRoYXQuCitB
ZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUm9vdDo6bG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgp
IGNvbnN0Cit7CisgICAgSW50U2l6ZSBib3JkZXJBbmRQYWRkaW5nID0gYm9yZGVyT3JpZ2luVG9D
b250ZW50Qm94KCk7CisgICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZH
RWxlbWVudCo+KG5vZGUoKSk7CisgICAgZmxvYXQgc2NhbGUgPSBzdmctPmN1cnJlbnRTY2FsZSgp
OworICAgIEZsb2F0UG9pbnQgdHJhbnNsYXRlID0gc3ZnLT5jdXJyZW50VHJhbnNsYXRlKCk7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIGN0bShzY2FsZSwgMCwgMCwgc2NhbGUsIGJvcmRlckFuZFBhZGRp
bmcud2lkdGgoKSArIHRyYW5zbGF0ZS54KCksIGJvcmRlckFuZFBhZGRpbmcuaGVpZ2h0KCkgKyB0
cmFuc2xhdGUueSgpKTsKKyAgICByZXR1cm4gc3ZnLT52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdp
ZHRoKCkgLyBzY2FsZSwgaGVpZ2h0KCkgLyBzY2FsZSkgKiBjdG07Cit9CisKK0ludFNpemUgUmVu
ZGVyU1ZHUm9vdDo6cGFyZW50T3JpZ2luVG9Cb3JkZXJCb3goKSBjb25zdAoreworICAgIHJldHVy
biBJbnRTaXplKHgoKSwgeSgpKTsKK30KKworSW50U2l6ZSBSZW5kZXJTVkdSb290Ojpib3JkZXJP
cmlnaW5Ub0NvbnRlbnRCb3goKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKGJvcmRlckxl
ZnQoKSArIHBhZGRpbmdMZWZ0KCksIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKTsKK30KKwor
QWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jvb3Q6OmxvY2FsVG9SZXBhaW50Q29udGFpbmVyVHJh
bnNmb3JtKGNvbnN0IEludFBvaW50JiBwYXJlbnRPcmlnaW5JbkNvbnRhaW5lcikgY29uc3QKK3sK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gcGFyZW50VG9Db250YWluZXIobG9jYWxUb1BhcmVudFRyYW5z
Zm9ybSgpKTsKKyAgICByZXR1cm4gcGFyZW50VG9Db250YWluZXIudHJhbnNsYXRlUmlnaHQocGFy
ZW50T3JpZ2luSW5Db250YWluZXIueCgpLCBwYXJlbnRPcmlnaW5JbkNvbnRhaW5lci55KCkpOwor
fQorCitjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlbmRlclNWR1Jvb3Q6OmxvY2FsVG9QYXJlbnRU
cmFuc2Zvcm0oKSBjb25zdAoreworICAgIEludFNpemUgcGFyZW50VG9Cb3JkZXJCb3hPZmZzZXQg
PSBwYXJlbnRPcmlnaW5Ub0JvcmRlckJveCgpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGJvcmRl
ckJveE9yaWdpblRvUGFyZW50T3JpZ2luKGxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSk7Cisg
ICAgYm9yZGVyQm94T3JpZ2luVG9QYXJlbnRPcmlnaW4udHJhbnNsYXRlUmlnaHQocGFyZW50VG9C
b3JkZXJCb3hPZmZzZXQud2lkdGgoKSwgcGFyZW50VG9Cb3JkZXJCb3hPZmZzZXQuaGVpZ2h0KCkp
OworCisgICAgbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtID0gYm9yZGVyQm94T3JpZ2luVG9QYXJl
bnRPcmlnaW47CisgICAgcmV0dXJuIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKK30KKworSW50
UmVjdCBSZW5kZXJTVkdSb290OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikKK3sKKyAgICByZXR1cm4gU1ZHUmVuZGVy
U3VwcG9ydDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWludENvbnRh
aW5lcik7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJl
bmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiByZXBhaW50UmVj
dCwgYm9vbCBmaXhlZCkKK3sKKyAgICAvLyBBcHBseSBvdXIgbG9jYWwgdHJhbnNmb3JtcyAoZXhj
ZXB0IGZvciB4L3kgdHJhbnNsYXRpb24pLCB0aGVuIG91ciBzaGFkb3csIAorICAgIC8vIGFuZCB0
aGVuIGNhbGwgUmVuZGVyQm94J3MgbWV0aG9kIHRvIGhhbmRsZSBhbGwgdGhlIG5vcm1hbCBDU1Mg
Qm94IG1vZGVsIGJpdHMKKyAgICByZXBhaW50UmVjdCA9IGxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zv
cm0oKS5tYXBSZWN0KHJlcGFpbnRSZWN0KTsKKworICAgIC8vIEFwcGx5IGluaXRpYWwgdmlld3Bv
cnQgY2xpcCAtIG5vdCBhZmZlY3RlZCBieSBvdmVyZmxvdyBzZXR0aW5ncyAgICAKKyAgICByZXBh
aW50UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBtX3ZpZXdwb3J0U2l6ZSkpKTsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHls
ZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgaWYgKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRv
dyA9IHN2Z1N0eWxlLT5zaGFkb3coKSkKKyAgICAgICAgc2hhZG93LT5hZGp1c3RSZWN0Rm9yU2hh
ZG93KHJlcGFpbnRSZWN0KTsKKworICAgIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50
KHJlcGFpbnRDb250YWluZXIsIHJlcGFpbnRSZWN0LCBmaXhlZCk7Cit9CisKK3ZvaWQgUmVuZGVy
U1ZHUm9vdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgYm9vbCBmaXhlZCAsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3Rh
dGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAoreworICAgIEFTU0VSVCghZml4ZWQpOyAvLyBXZSBz
aG91bGQgaGF2ZSBubyBmaXhlZCBjb250ZW50IGluIHRoZSBTVkcgcmVuZGVyaW5nIHRyZWUuCisg
ICAgQVNTRVJUKHVzZVRyYW5zZm9ybXMpOyAvLyBtYXBwaW5nIGEgcG9pbnQgdGhyb3VnaCBTVkcg
dy9vIHJlc3BlY3RpbmcgdHJhc25mb3JtcyBpcyB1c2VsZXNzLgorCisgICAgLy8gVHJhbnNmb3Jt
IHRvIG91ciBib3JkZXIgYm94IGFuZCBsZXQgUmVuZGVyQm94IHRyYW5zZm9ybSB0aGUgcmVzdCBv
ZiB0aGUgd2F5LgorICAgIHRyYW5zZm9ybVN0YXRlLmFwcGx5VHJhbnNmb3JtKGxvY2FsVG9Cb3Jk
ZXJCb3hUcmFuc2Zvcm0oKSk7CisgICAgUmVuZGVyQm94OjptYXBMb2NhbFRvQ29udGFpbmVyKHJl
cGFpbnRDb250YWluZXIsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0ZSk7Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCit7CisgICAg
bV9vYmplY3RCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIG1fc3Ryb2tlQm91bmRpbmdC
b3ggPSBGbG9hdFJlY3QoKTsKKyAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgp
OworCisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMo
dGhpcywgbV9vYmplY3RCb3VuZGluZ0JveCwgbV9zdHJva2VCb3VuZGluZ0JveCwgbV9yZXBhaW50
Qm91bmRpbmdCb3gpOworICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0
V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CisgICAgbV9yZXBhaW50
Qm91bmRpbmdCb3guaW5mbGF0ZShib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7Cit9CisKK2Jvb2wg
UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0
VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAgIEludFBvaW50IHBvaW50SW5Db250YWlu
ZXIoeCwgeSk7CisgICAgSW50U2l6ZSBjb250YWluZXJUb1BhcmVudE9mZnNldCh0eCwgdHkpOwor
CisgICAgSW50UG9pbnQgcG9pbnRJblBhcmVudCA9IHBvaW50SW5Db250YWluZXIgLSBjb250YWlu
ZXJUb1BhcmVudE9mZnNldDsKKyAgICBJbnRQb2ludCBwb2ludEluQm9yZGVyQm94ID0gcG9pbnRJ
blBhcmVudCAtIHBhcmVudE9yaWdpblRvQm9yZGVyQm94KCk7CisKKyAgICAvLyBOb3RlOiBGb3Ig
bm93LCB3ZSdyZSBpZ25vcmluZyBoaXRzIHRvIGJvcmRlciBhbmQgcGFkZGluZyBmb3IgPHN2Zz4K
KyAgICBJbnRQb2ludCBwb2ludEluQ29udGVudEJveCA9IHBvaW50SW5Cb3JkZXJCb3ggLSBib3Jk
ZXJPcmlnaW5Ub0NvbnRlbnRCb3goKTsKKyAgICBpZiAoIWNvbnRlbnRCb3hSZWN0KCkuY29udGFp
bnMocG9pbnRJbkNvbnRlbnRCb3gpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnRQ
b2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQ
b2ludChwb2ludEluUGFyZW50KTsKKworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxh
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAg
ICAgICAgaWYgKGNoaWxkLT5ub2RlQXRGbG9hdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxQ
b2ludCwgaGl0VGVzdEFjdGlvbikpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDU1MvSFRNTCBh
c3N1bWVzIHRoZSBsb2NhbCBwb2ludCBpcyByZWxhdGl2ZSB0byB0aGUgYm9yZGVyIGJveCwgcmln
aHQ/CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkJvcmRl
ckJveCk7CisgICAgICAgICAgICAvLyBGSVhNRTogbm9kZUF0RmxvYXRQb2ludCgpIGRvZXNuJ3Qg
aGFuZGxlIHJlY3QtYmFzZWQgaGl0IHRlc3RzIHlldC4KKyAgICAgICAgICAgIHJlc3VsdC5hZGRO
b2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KGNoaWxkLT5ub2RlKCksIHgsIHkpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB3ZSBkaWRuJ3Qg
ZWFybHkgZXhpdCBhYm92ZSwgd2UndmUganVzdCBoaXQgdGhlIGNvbnRhaW5lciA8c3ZnPiBlbGVt
ZW50LiBVbmxpa2UgU1ZHIDEuMSwgMm5kIEVkaXRpb24gYWxsb3dzIGNvbnRhaW5lciBlbGVtZW50
cyB0byBiZSBoaXQuCisgICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dy
b3VuZCkgeworICAgICAgICAvLyBPbmx5IHJldHVybiB0cnVlIGhlcmUsIGlmIHRoZSBsYXN0IGhp
dCB0ZXN0aW5nIHBoYXNlICdCbG9ja0JhY2tncm91bmQnIGlzIGV4ZWN1dGVkLiBJZiB3ZSdkIHJl
dHVybiB0cnVlIGluIHRoZSAnRm9yZWdyb3VuZCcgcGhhc2UsCisgICAgICAgIC8vIGhpdCB0ZXN0
aW5nIHdvdWxkIHN0b3AgaW1tZWRpYXRlbHkuIEZvciBTVkcgb25seSB0cmVlcyB0aGlzIGRvZXNu
J3QgbWF0dGVyLiBUaG91Z2ggd2hlbiB3ZSBoYXZlIGEgPGZvcmVpZ25PYmplY3Q+IHN1YnRyZWUg
d2UgbmVlZAorICAgICAgICAvLyB0byBiZSBhYmxlIHRvIGRldGVjdCBoaXRzIG9uIHRoZSBiYWNr
Z3JvdW5kIG9mIGEgPGRpdj4gZWxlbWVudC4gSWYgd2UnZCByZXR1cm4gdHJ1ZSBoZXJlIGluIHRo
ZSAnRm9yZWdyb3VuZCcgcGhhc2UsIHdlIGFyZSBub3QgYWJsZSAKKyAgICAgICAgLy8gdG8gZGV0
ZWN0IHRoZXNlIGhpdHMgYW55bW9yZS4KKyAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1
bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhbFBvaW50KSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNW
RykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5o
CShyZXZpc2lvbiA3NTM0NykJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jvb3QuaDo3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Um9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBSZW5kZXJTVkdSb290X2gKKyNkZWZpbmUgUmVuZGVyU1ZHUm9vdF9oCisK
KyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRl
ckJveC5oIgorCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFNWR1N0eWxlZEVsZW1lbnQ7CitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07
CisKK2NsYXNzIFJlbmRlclNWR1Jvb3QgOiBwdWJsaWMgUmVuZGVyQm94IHsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBSZW5kZXJTVkdSb290KFNWR1N0eWxlZEVsZW1lbnQqKTsKKyAgICB2aXJ0dWFs
IH5SZW5kZXJTVkdSb290KCk7CisKKyAgICBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNo
aWxkcmVuKCkgY29uc3QgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KKyAgICBSZW5kZXJPYmplY3RD
aGlsZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KKworICAgIGJvb2wg
aXNMYXlvdXRTaXplQ2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNMYXlvdXRTaXplQ2hhbmdl
ZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVl
ZHNCb3VuZGFyaWVzT3JUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgeyBtX25lZWRzQm91bmRhcmllc09yVHJhbnNmb3Jt
VXBkYXRlID0gdHJ1ZTsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSB7IHJldHVybiBjaGlsZHJlbigpOyB9CisgICAgdmly
dHVhbCBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIGNvbnN0
IHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Jvb3QoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1l
KCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1Jvb3QiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKKyAgICB2aXJ0dWFsIGludCBjb21wdXRl
UmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludElu
Zm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOworCisgICAgdmlydHVhbCB2b2lkIGRlc3Ry
b3koKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOworCisgICAgdmlydHVhbCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdDsKKworICAgIGJv
b2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBib29sIHN0cm9r
ZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKworICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0Jv
eDsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRp
bmdCb3g7IH0KKworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRU
ZXN0QWN0aW9uKTsKKworICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9y
UmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7CisgICAgdmly
dHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpOworCisgICAg
dmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNmb3Jt
U3RhdGUmKSBjb25zdDsKKworICAgIHZvaWQgY2FsY1ZpZXdwb3J0KCk7CisKKyAgICBib29sIHNl
bGZXaWxsUGFpbnQoKTsKKyAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKKworICAg
IEludFNpemUgcGFyZW50T3JpZ2luVG9Cb3JkZXJCb3goKSBjb25zdDsKKyAgICBJbnRTaXplIGJv
cmRlck9yaWdpblRvQ29udGVudEJveCgpIGNvbnN0OworICAgIEFmZmluZVRyYW5zZm9ybSBsb2Nh
bFRvUmVwYWludENvbnRhaW5lclRyYW5zZm9ybShjb25zdCBJbnRQb2ludCYgcGFyZW50T3JpZ2lu
SW5Db250YWluZXIpIGNvbnN0OworICAgIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRvQm9yZGVyQm94
VHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJl
bjsKKyAgICBGbG9hdFNpemUgbV92aWV3cG9ydFNpemU7CisgICAgRmxvYXRSZWN0IG1fb2JqZWN0
Qm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1fc3Ryb2tlQm91bmRpbmdCb3g7CisgICAgRmxv
YXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OworICAgIG11dGFibGUgQWZmaW5lVHJhbnNmb3Jt
IG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKKyAgICBib29sIG1faXNMYXlvdXRTaXplQ2hhbmdl
ZCA6IDE7CisgICAgYm9vbCBtX25lZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRlIDogMTsK
K307CisKK2lubGluZSBSZW5kZXJTVkdSb290KiB0b1JlbmRlclNWR1Jvb3QoUmVuZGVyT2JqZWN0
KiBvYmplY3QpCit7IAorICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdSb290KCkp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSb290Kj4ob2JqZWN0KTsKK30KKwor
aW5saW5lIGNvbnN0IFJlbmRlclNWR1Jvb3QqIHRvUmVuZGVyU1ZHUm9vdChjb25zdCBSZW5kZXJP
YmplY3QqIG9iamVjdCkKK3sgCisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1Jv
b3QoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1Jvb3QqPihvYmpl
Y3QpOworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5
IGNhc3QuCit2b2lkIHRvUmVuZGVyU1ZHUm9vdChjb25zdCBSZW5kZXJTVkdSb290Kik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8g
UmVuZGVyU1ZHUm9vdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcAko
cmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdT
aGFkb3dUcmVlUm9vdENvbnRhaW5lci5jcHA6NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFkb3dUcmVlUm9v
dENvbnRhaW5lci5oIgorCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlNWR1No
YWRvd1RyZWVFbGVtZW50cy5oIgorI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcjo6UmVuZGVy
U1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXIoU1ZHVXNlRWxlbWVudCogbm9kZSkKKyAgICA6IFJl
bmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIobm9kZSkKKyAgICAsIG1fcmVjcmVhdGVUcmVl
KGZhbHNlKQoreworfQorCitSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcjo6flJlbmRl
clNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyKCkKK3sKKyAgICBpZiAobV9zaGFkb3dSb290ICYm
IG1fc2hhZG93Um9vdC0+YXR0YWNoZWQoKSkgeworICAgICAgICBtX3NoYWRvd1Jvb3QtPmRldGFj
aCgpOworICAgICAgICBtX3NoYWRvd1Jvb3QtPmNsZWFyU2hhZG93SG9zdCgpOworICAgIH0KK30K
Kwordm9pZCBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcjo6dXBkYXRlU3R5bGUoTm9k
ZTo6U3R5bGVDaGFuZ2UgY2hhbmdlKQoreworICAgIGlmIChtX3NoYWRvd1Jvb3QgJiYgbV9zaGFk
b3dSb290LT5hdHRhY2hlZCgpKQorICAgICAgICBtX3NoYWRvd1Jvb3QtPnJlY2FsY1N0eWxlKGNo
YW5nZSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXI6OnVwZGF0
ZUZyb21FbGVtZW50KCkKK3sKKyAgICBib29sIGhhZEV4aXN0aW5nVHJlZSA9IG1fc2hhZG93Um9v
dDsKKworICAgIFNWR1VzZUVsZW1lbnQqIHVzZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdVc2VF
bGVtZW50Kj4obm9kZSgpKTsKKyAgICBpZiAoIW1fc2hhZG93Um9vdCkgeworICAgICAgICBBU1NF
UlQoIW1fcmVjcmVhdGVUcmVlKTsKKyAgICAgICAgbV9zaGFkb3dSb290ID0gU1ZHU2hhZG93VHJl
ZVJvb3RFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSwgdXNlRWxlbWVudCk7CisgICAgICAgIHVz
ZUVsZW1lbnQtPmJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7CisgICAgfQorCisgICAgQVNTRVJUKG1f
c2hhZG93Um9vdC0+c2hhZG93SG9zdCgpID09IHVzZUVsZW1lbnQpOworCisgICAgYm9vbCBzaG91
bGRSZWNyZWF0ZVRyZWUgPSBtX3JlY3JlYXRlVHJlZTsKKyAgICBpZiAobV9yZWNyZWF0ZVRyZWUp
IHsKKyAgICAgICAgQVNTRVJUKGhhZEV4aXN0aW5nVHJlZSk7CisKKyAgICAgICAgaWYgKG1fc2hh
ZG93Um9vdC0+YXR0YWNoZWQoKSkKKyAgICAgICAgICAgIG1fc2hhZG93Um9vdC0+ZGV0YWNoKCk7
CisKKyAgICAgICAgbV9zaGFkb3dSb290LT5yZW1vdmVBbGxDaGlsZHJlbigpOworICAgICAgICBt
X3JlY3JlYXRlVHJlZSA9IGZhbHNlOworICAgIH0KKworICAgIC8vIE9ubHkgcmVidWlsZCB0aGUg
c2hhZG93IHRyZWUsIGlmIHdlIGEpIG5ldmVyIGhhZCBhIHRyZWUgb3IgYikgd2Ugd2VyZSBzcGVj
aWZpY2FsbHkgYXNrZWQgdG8gZG8gc28KKyAgICAvLyBJZiB0aGUgdXNlIGVsZW1lbnQgaXMgYSBw
ZW5kaW5nIHJlc291cmNlLCBhbmQgYSkgb3IgYikgaXMgdHJ1ZSwgZG8gbm90aGluZywgYW5kIHdh
aXQgZm9yIHRoZSB1c2UKKyAgICAvLyBlbGVtZW50IHRvIGJlIGFza2VkIHRvIGJ1aWxkUGVuZGlu
Z1Jlc291cmNlKCksIHRoaXMgd2lsbCBjYWxsIHVzIGFnYWluLCB3aXRoIG1fcmVjcmVhdGVUcnVl
PXRydWUuCisgICAgaWYgKChzaG91bGRSZWNyZWF0ZVRyZWUgfHwgIWhhZEV4aXN0aW5nVHJlZSkg
JiYgIXVzZUVsZW1lbnQtPmlzUGVuZGluZ1Jlc291cmNlKCkpIHsKKyAgICAgICAgdXNlRWxlbWVu
dC0+YnVpbGRTaGFkb3dBbmRJbnN0YW5jZVRyZWUobV9zaGFkb3dSb290LmdldCgpKTsKKworICAg
ICAgICAvLyBBdHRhY2ggc2hhZG93IHJvb3QgZWxlbWVudAorICAgICAgICBtX3NoYWRvd1Jvb3Qt
PmF0dGFjaEVsZW1lbnQoc3R5bGUoKSwgcmVuZGVyQXJlbmEoKSk7CisKKyAgICAgICAgLy8gQXR0
YWNoIHN1YnRyZWUsIGFzIGlmIGl0IHdhcyBhIHJlZ3VsYXIgbm9uLXNoYWRvdyB0cmVlCisgICAg
ICAgIGZvciAoTm9kZSogY2hpbGQgPSBtX3NoYWRvd1Jvb3QtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICBjaGlsZC0+YXR0YWNo
KCk7CisgICAgfQorCisgICAgQVNTRVJUKCFtX3JlY3JlYXRlVHJlZSk7CisgICAgUmVuZGVyU1ZH
VHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6dXBkYXRlRnJvbUVsZW1lbnQoKTsKK30KKwordm9pZCBS
ZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZm
ZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3sKKyAgICBSZW5kZXJT
VkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7
CisKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiBzaGFkb3dSb290UmVuZGVyZXIgPSBtX3NoYWRvd1Jv
b3QgPyBtX3NoYWRvd1Jvb3QtPnJlbmRlcmVyKCkgOiAwKQorICAgICAgICBzaGFkb3dSb290UmVu
ZGVyZXItPnNldFN0eWxlKHN0eWxlKCkpOworfQorCitOb2RlKiBSZW5kZXJTVkdTaGFkb3dUcmVl
Um9vdENvbnRhaW5lcjo6cm9vdEVsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NoYWRv
d1Jvb3QuZ2V0KCk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENv
bnRhaW5lci5oCShyZXZpc2lvbiA3NTM0NykJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmg6NzUzNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYWRvd1RyZWVSb290Q29udGFpbmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBS
ZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lcl9oCisjZGVmaW5lIFJlbmRlclNWR1NoYWRv
d1RyZWVSb290Q29udGFpbmVyX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVy
U1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
CitjbGFzcyBTVkdVc2VFbGVtZW50OworY2xhc3MgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50Owor
CitjbGFzcyBSZW5kZXJTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJT
VkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTVkdTaGFkb3dU
cmVlUm9vdENvbnRhaW5lcihTVkdVc2VFbGVtZW50Kik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZH
U2hhZG93VHJlZVJvb3RDb250YWluZXIoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1NWR1NoYWRv
d1RyZWVSb290Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdm9pZCBt
YXJrU2hhZG93VHJlZUZvclJlY3JlYXRpb24oKSB7IG1fcmVjcmVhdGVUcmVlID0gdHJ1ZTsgfQor
ICAgIHZvaWQgdXBkYXRlU3R5bGUoTm9kZTo6U3R5bGVDaGFuZ2UpOworICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVGcm9tRWxlbWVudCgpOworCisgICAgTm9kZSogcm9vdEVsZW1lbnQoKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworCisgICAgYm9vbCBtX3JlY3JlYXRl
VHJlZTsKKyAgICBSZWZQdHI8U1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50PiBtX3NoYWRvd1Jvb3Q7
Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRh
aW5lci5jcHAJKHJldmlzaW9uIDc1MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHA6NzUzNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgiCisK
KyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1NoYWRvd1RyZWVFbGVtZW50cy5o
IgorI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICAKK1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6OlJlbmRl
clNWR1RyYW5zZm9ybWFibGVDb250YWluZXIoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQq
IG5vZGUpCisgICAgOiBSZW5kZXJTVkdDb250YWluZXIobm9kZSkKKyAgICAsIG1fbmVlZHNUcmFu
c2Zvcm1VcGRhdGUodHJ1ZSkKK3sKK30KKworYm9vbCBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29u
dGFpbmVyOjpjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpCit7CisgICAgU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCo+KG5vZGUoKSk7CisKKyAgICBib29sIG5lZWRzVXBkYXRlID0gbV9uZWVkc1Ry
YW5zZm9ybVVwZGF0ZTsKKyAgICBpZiAobmVlZHNVcGRhdGUpIHsKKyAgICAgICAgbV9sb2NhbFRy
YW5zZm9ybSA9IGVsZW1lbnQtPmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKKyAgICAgICAgbV9u
ZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIGlmICghZWxlbWVudC0+
aGFzVGFnTmFtZShTVkdOYW1lczo6Z1RhZykgfHwgIXN0YXRpY19jYXN0PFNWR0dFbGVtZW50Kj4o
ZWxlbWVudCktPmlzU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJu
IG5lZWRzVXBkYXRlOworCisgICAgRmxvYXRTaXplIHRyYW5zbGF0aW9uID0gc3RhdGljX2Nhc3Q8
U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQqPihlbGVtZW50KS0+Y29udGFpbmVyVHJhbnNs
YXRpb24oKTsKKyAgICBpZiAoIXRyYW5zbGF0aW9uLndpZHRoKCkgJiYgIXRyYW5zbGF0aW9uLmhl
aWdodCgpKQorICAgICAgICByZXR1cm4gbmVlZHNVcGRhdGU7CisKKyAgICAvLyBGSVhNRTogQ291
bGQgb3B0aW1pemUgdGhpcyBjYXNlIGZvciB1c2UgdG8gYXZvaWQgcmVmZXRjaGluZyB0aGUgYW5p
bWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGhlcmUsIGlmIG9ubHkgdGhlIGNvbnRhaW5lclRyYW5zbGF0
aW9uKCkgY2hhbmdlZC4KKyAgICBpZiAoIW5lZWRzVXBkYXRlKQorICAgICAgICBtX2xvY2FsVHJh
bnNmb3JtID0gZWxlbWVudC0+YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOworCisgICAgbV9sb2Nh
bFRyYW5zZm9ybS50cmFuc2xhdGUodHJhbnNsYXRpb24ud2lkdGgoKSwgdHJhbnNsYXRpb24uaGVp
Z2h0KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZH
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgJKHJldmlzaW9uIDc1MzQ3KQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5l
ci5oOjc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUcmFu
c2Zvcm1hYmxlQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1RyYW5zZm9y
bWFibGVDb250YWluZXJfaAorI2RlZmluZSBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVy
X2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OworY2xhc3MgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lciA6IHB1YmxpYyBS
ZW5kZXJTVkdDb250YWluZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlclNWR1RyYW5z
Zm9ybWFibGVDb250YWluZXIoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqKTsKKworICAg
IHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc1RyYW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0K
KworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKTsK
KyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KKworICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0
ZSA6IDE7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07Cit9OworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZiAvLyBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29u
dGFpbmVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmll
d3BvcnRDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCShyZXZpc2lvbiA3NTM0NykJKGZy
b20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNw
cDo3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3Bv
cnRDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1ZpZXdwb3J0
Q29udGFpbmVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdTVkdFbGVt
ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXI6OlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKFNWR1N0eWxlZEVsZW1lbnQqIG5vZGUpCisg
ICAgOiBSZW5kZXJTVkdDb250YWluZXIobm9kZSkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lcjo6YXBwbHlWaWV3cG9ydENsaXAoUGFpbnRJbmZvJiBwYWludEluZm8pCit7
CisgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4odGhpcykpCisgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKG1fdmlld3BvcnQpOworfQorCit2b2lkIFJlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyOjpjYWxjVmlld3BvcnQoKQoreworICAgICBTVkdFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7CisgICAgIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpKSB7CisgICAgICAgICBTVkdTVkdF
bGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4oZWxlbWVudCk7CisKKyAg
ICAgICAgIEZsb2F0UmVjdCBvbGRWaWV3cG9ydCA9IG1fdmlld3BvcnQ7CisgICAgICAgICBtX3Zp
ZXdwb3J0ID0gRmxvYXRSZWN0KHN2Zy0+eCgpLnZhbHVlKHN2ZykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCBzdmctPnkoKS52YWx1ZShzdmcpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgc3ZnLT53aWR0aCgpLnZhbHVlKHN2ZykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCBzdmctPmhlaWdodCgpLnZhbHVlKHN2ZykpOworCisgICAgICAgIGlm
IChvbGRWaWV3cG9ydCAhPSBtX3ZpZXdwb3J0KQorICAgICAgICAgICAgc2V0TmVlZHNCb3VuZGFy
aWVzVXBkYXRlKCk7CisgICAgfQorfQorCitBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHVmlld3Bv
cnRDb250YWluZXI6OnZpZXdwb3J0VHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBpZiAobm9kZSgp
LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpKSB7CisgICAgICAgIFNWR1NWR0VsZW1lbnQq
IHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2RlKCkpOworICAgICAgICByZXR1
cm4gc3ZnLT52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKG1fdmlld3BvcnQud2lkdGgoKSwgbV92aWV3
cG9ydC5oZWlnaHQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwor
fQorCitjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjps
b2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdmll
d3BvcnRUcmFuc2xhdGlvbih2aWV3cG9ydFRyYW5zZm9ybSgpKTsKKyAgICBtX2xvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0gPSB2aWV3cG9ydFRyYW5zbGF0aW9uLnRyYW5zbGF0ZVJpZ2h0KG1fdmlld3Bv
cnQueCgpLCBtX3ZpZXdwb3J0LnkoKSk7CisgICAgcmV0dXJuIG1fbG9jYWxUb1BhcmVudFRyYW5z
Zm9ybTsKKyAgICAvLyBJZiB0aGlzIGNsYXNzIHdlcmUgZXZlciBnaXZlbiBhIGxvY2FsVHJhbnNm
b3JtKCksIHRoZW4gdGhlIGFib3ZlIHdvdWxkIHJlYWQ6CisgICAgLy8gcmV0dXJuIHZpZXdwb3J0
VHJhbnNmb3JtKCkgKiBsb2NhbFRyYW5zZm9ybSgpICogdmlld3BvcnRUcmFuc2xhdGlvbjsKK30K
KworYm9vbCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6cG9pbnRJc0luc2lkZVZpZXdwb3J0
Q2xpcChjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50KQoreworICAgIC8vIFJlc3BlY3Qg
dGhlIHZpZXdwb3J0IGNsaXAgKHdoaWNoIGlzIGluIHBhcmVudCBjb29yZHMpCisgICAgaWYgKCFT
VkdSZW5kZXJTdXBwb3J0Ojppc092ZXJmbG93SGlkZGVuKHRoaXMpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gbV92aWV3cG9ydC5jb250YWlucyhwb2ludEluUGFyZW50
KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
LmgJKHJldmlzaW9uIDc1MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIuaDo3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyX2gKKyNkZWZpbmUg
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXJfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRl
ICJSZW5kZXJTVkdDb250YWluZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGlz
IGlzIHVzZWQgZm9yIG5vbi1yb290IDxzdmc+IGVsZW1lbnRzIGFuZCA8bWFya2VyPiBlbGVtZW50
cywgbmVpdGhlciBvZiB3aGljaCBhcmUgU1ZHVHJhbnNmb3JtYWJsZQorLy8gdGh1cyB3ZSBpbmhl
cml0IGZyb20gUmVuZGVyU1ZHQ29udGFpbmVyIGluc3RlYWQgb2YgUmVuZGVyU1ZHVHJhbnNmb3Jt
YWJsZUNvbnRhaW5lcgorY2xhc3MgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgOiBwdWJsaWMg
UmVuZGVyU1ZHQ29udGFpbmVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50Kik7CisKK3ByaXZhdGU6CisgICAgdmlydHVh
bCBib29sIGlzU1ZHQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc1NWR1ZpZXdwb3J0Q29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5k
ZXJTVkdWaWV3cG9ydENvbnRhaW5lciI7IH0KKworICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3cG9y
dFRyYW5zZm9ybSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBs
b2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1Zp
ZXdwb3J0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWaWV3cG9ydENsaXAoUGFpbnRJbmZv
Jik7CisgICAgdmlydHVhbCBib29sIHBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnRJblBhcmVudCk7CisKKyAgICBGbG9hdFJlY3QgbV92aWV3cG9ydDsKKyAg
ICBtdXRhYmxlIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07Cit9Owor
ICAKK2lubGluZSBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciogdG9SZW5kZXJTVkdWaWV3cG9y
dENvbnRhaW5lcihSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8
fCAhc3RyY21wKG9iamVjdC0+cmVuZGVyTmFtZSgpLCAiUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIiKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
Kj4ob2JqZWN0KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5l
Y2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKGNvbnN0IFJl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8gUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRv
b2xzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lt
YWdlQnVmZmVyVG9vbHMuY3BwCShyZXZpc2lvbiA3NTM0NykJKGZyb20gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwOjc1MzQ3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmgiCisKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKKyNp
bmNsdWRlICJSZW5kZXJTVkdSb290LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IEFmZmluZVRyYW5zZm9ybSYgY3VycmVudENvbnRlbnRUcmFuc2Zvcm1hdGlvbigpCit7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChBZmZpbmVUcmFuc2Zvcm0sIHNfY3VycmVudENvbnRlbnRUcmFu
c2Zvcm1hdGlvbiwgKCkpOworICAgIHJldHVybiBzX2N1cnJlbnRDb250ZW50VHJhbnNmb3JtYXRp
b247Cit9CisKK3ZvaWQgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRp
b25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0oY29uc3QgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSkKK3sKKyAgICBjb25zdCBS
ZW5kZXJPYmplY3QqIGN1cnJlbnQgPSByZW5kZXJlcjsKKyAgICBBU1NFUlQoY3VycmVudCk7CisK
KyAgICBhYnNvbHV0ZVRyYW5zZm9ybSA9IGN1cnJlbnRDb250ZW50VHJhbnNmb3JtYXRpb24oKTsK
KyAgICB3aGlsZSAoY3VycmVudCkgeworICAgICAgICBhYnNvbHV0ZVRyYW5zZm9ybS5tdWx0aXBs
eShjdXJyZW50LT5sb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkpOworICAgICAgICBpZiAoY3VycmVu
dC0+aXNTVkdSb290KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY3VycmVudCA9IGN1
cnJlbnQtPnBhcmVudCgpOworICAgIH0KK30KKworYm9vbCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1hZ2VCdWZm
ZXI+JiBpbWFnZUJ1ZmZlciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIEludFNpemUg
aW1hZ2VTaXplKHJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVj
dC5zaXplKCkpKTsKKyAgICBJbnRTaXplIHVuY2xhbXBlZEltYWdlU2l6ZShTVkdJbWFnZUJ1ZmZl
clRvb2xzOjpyb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGFic29sdXRlVGFyZ2V0UmVjdC5zaXplKCkp
KTsKKworICAgIC8vIERvbid0IGNyZWF0ZSBlbXB0eSBJbWFnZUJ1ZmZlcnMuCisgICAgaWYgKGlt
YWdlU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE93blB0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlU2l6ZSwgY29sb3JT
cGFjZSk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3Jh
cGhpY3NDb250ZXh0KiBpbWFnZUNvbnRleHQgPSBpbWFnZS0+Y29udGV4dCgpOworICAgIEFTU0VS
VChpbWFnZUNvbnRleHQpOworCisgICAgLy8gQ29tcGVuc2F0ZSByb3VuZGluZyBlZmZlY3RzLCBh
cyB0aGUgYWJzb2x1dGUgdGFyZ2V0IHJlY3QgaXMgdXNpbmcgZmxvYXRpbmctcG9pbnQgbnVtYmVy
cyBhbmQgdGhlIGltYWdlIGJ1ZmZlciBzaXplIGlzIGludGVnZXIuCisgICAgaW1hZ2VDb250ZXh0
LT5zY2FsZShGbG9hdFNpemUodW5jbGFtcGVkSW1hZ2VTaXplLndpZHRoKCkgLyBhYnNvbHV0ZVRh
cmdldFJlY3Qud2lkdGgoKSwgdW5jbGFtcGVkSW1hZ2VTaXplLmhlaWdodCgpIC8gYWJzb2x1dGVU
YXJnZXRSZWN0LmhlaWdodCgpKSk7CisKKyAgICBpbWFnZUJ1ZmZlciA9IGltYWdlLnJlbGVhc2Uo
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyZW5k
ZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIFJlbmRlck9iamVjdCog
aXRlbSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdWJ0cmVlQ29udGVudFRyYW5zZm9ybWF0aW9u
KQoreworICAgIEFTU0VSVChpdGVtKTsKKyAgICBBU1NFUlQoaW1hZ2UpOworICAgIEFTU0VSVChp
bWFnZS0+Y29udGV4dCgpKTsKKworICAgIFBhaW50SW5mbyBpbmZvKGltYWdlLT5jb250ZXh0KCks
IFBhaW50SW5mbzo6aW5maW5pdGVSZWN0KCksIFBhaW50UGhhc2VGb3JlZ3JvdW5kLCAwLCAwLCAw
KTsKKworICAgIEFmZmluZVRyYW5zZm9ybSYgY29udGVudFRyYW5zZm9ybWF0aW9uID0gY3VycmVu
dENvbnRlbnRUcmFuc2Zvcm1hdGlvbigpOworICAgIEFmZmluZVRyYW5zZm9ybSBzYXZlZENvbnRl
bnRUcmFuc2Zvcm1hdGlvbiA9IGNvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKKyAgICBjb250ZW50VHJh
bnNmb3JtYXRpb24ubXVsdGlwbHkoc3VidHJlZUNvbnRlbnRUcmFuc2Zvcm1hdGlvbik7CisKKyAg
ICBpdGVtLT5sYXlvdXRJZk5lZWRlZCgpOworICAgIGl0ZW0tPnBhaW50KGluZm8sIDAsIDApOwor
CisgICAgY29udGVudFRyYW5zZm9ybWF0aW9uID0gc2F2ZWRDb250ZW50VHJhbnNmb3JtYXRpb247
Cit9CisKK3ZvaWQgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xpcFRvSW1hZ2VCdWZmZXIoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJ
bWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKQoreworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBB
U1NFUlQoaW1hZ2VCdWZmZXIpOworCisgICAgLy8gVGhlIG1hc2sgaW1hZ2UgaGFzIGJlZW4gY3Jl
YXRlZCBpbiB0aGUgYWJzb2x1dGUgY29vcmRpbmF0ZSBzcGFjZSwgYXMgdGhlIGltYWdlIHNob3Vs
ZCBub3QgYmUgc2NhbGVkLgorICAgIC8vIFNvIHRoZSBhY3R1YWwgbWFza2luZyBwcm9jZXNzIGhh
cyB0byBiZSBkb25lIGluIHRoZSBhYnNvbHV0ZSBjb29yZGluYXRlIHNwYWNlIGFzIHdlbGwuCisg
ICAgY29udGV4dC0+Y29uY2F0Q1RNKGFic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKSk7CisgICAg
Y29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIuZ2V0KCksIGNsYW1wZWRBYnNv
bHV0ZVRhcmdldFJlY3QpOworICAgIGNvbnRleHQtPmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9y
bSk7CisKKyAgICAvLyBXaGVuIG5lc3RpbmcgcmVzb3VyY2VzLCB3aXRoIG9iamVjdEJvdW5kaW5n
Qm94IGFzIGNvbnRlbnQgdW5pdCB0eXBlcywgdGhlcmUncyBubyB1c2UgaW4gY2FjaGluZyB0aGUK
KyAgICAvLyByZXN1bHRpbmcgaW1hZ2UgYnVmZmVyIGFzIHRoZSBwYXJlbnQgcmVzb3VyY2UgYWxy
ZWFkeSBjYWNoZXMgdGhlIHJlc3VsdC4KKyAgICBpZiAoIWN1cnJlbnRDb250ZW50VHJhbnNmb3Jt
YXRpb24oKS5pc0lkZW50aXR5KCkpCisgICAgICAgIGltYWdlQnVmZmVyLmNsZWFyKCk7Cit9CisK
K0ludFNpemUgU1ZHSW1hZ2VCdWZmZXJUb29sczo6cm91bmRlZEltYWdlQnVmZmVyU2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIEludFNpemUoc3RhdGljX2Nhc3Q8aW50
Pihscm91bmRmKHNpemUud2lkdGgoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoc2l6ZS5o
ZWlnaHQoKSkpKTsKK30KKworRmxvYXRSZWN0IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRB
YnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCkKK3sKKyAgICBBU1NFUlQocmVu
ZGVyZXIpOworCisgICAgY29uc3QgUmVuZGVyU1ZHUm9vdCogc3ZnUm9vdCA9IFNWR1JlbmRlclN1
cHBvcnQ6OmZpbmRUcmVlUm9vdE9iamVjdChyZW5kZXJlcik7CisgICAgRmxvYXRSZWN0IGNsYW1w
ZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRhcmdldFJlY3Q7CisgICAgY2xhbXBlZEFi
c29sdXRlVGFyZ2V0UmVjdC5pbnRlcnNlY3Qoc3ZnUm9vdC0+Y29udGVudEJveFJlY3QoKSk7Cisg
ICAgcmV0dXJuIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3Q7Cit9CisKK30KKworI2VuZGlmIC8v
IEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdl
QnVmZmVyVG9vbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0ltYWdlQnVmZmVyVG9vbHMuaAkocmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmg6NzUzNDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0ltYWdlQnVmZmVy
VG9vbHNfaAorI2RlZmluZSBTVkdJbWFnZUJ1ZmZlclRvb2xzX2gKKworI2lmIEVOQUJMRShTVkcp
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBG
bG9hdFJlY3Q7CitjbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFz
cyBSZW5kZXJPYmplY3Q7CisKK2NsYXNzIFNWR0ltYWdlQnVmZmVyVG9vbHMgOiBwdWJsaWMgTm9u
Y29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGNyZWF0ZUltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1w
ZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mLCBDb2xvclNwYWNlKTsK
KyAgICBzdGF0aWMgdm9pZCByZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcios
IFJlbmRlck9iamVjdCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIHN0YXRpYyB2b2lk
IGNsaXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZEFic29sdXRlVGFy
Z2V0UmVjdCwgT3duUHRyPEltYWdlQnVmZmVyPiYpOworCisgICAgc3RhdGljIHZvaWQgY2FsY3Vs
YXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0oY29uc3QgUmVu
ZGVyT2JqZWN0KiwgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgc3Rh
dGljIEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIoY29uc3Qg
UmVuZGVyT2JqZWN0KiwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRhcmdldFJlY3QpOworICAg
IHN0YXRpYyBJbnRTaXplIHJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJik7
CisKK3ByaXZhdGU6CisgICAgU1ZHSW1hZ2VCdWZmZXJUb29scygpIHsgfQorICAgIH5TVkdJbWFn
ZUJ1ZmZlclRvb2xzKCkgeyB9Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtlckRhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtlckRhdGEuaAkocmV2aXNpb24gNzUz
NDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJEYXRhLmg6NzUzNDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtlckRhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdN
YXJrZXJEYXRhX2gKKyNkZWZpbmUgU1ZHTWFya2VyRGF0YV9oCisKKyNpZiBFTkFCTEUoU1ZHKQor
I2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRl
clNWR1Jlc291cmNlTWFya2VyOworCitjbGFzcyBTVkdNYXJrZXJEYXRhIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIFR5cGUgeworICAgICAgICBVbmtub3duID0gMCwKKyAgICAgICAgU3RhcnQsCisgICAg
ICAgIE1pZCwKKyAgICAgICAgRW5kCisgICAgfTsKKworICAgIFNWR01hcmtlckRhdGEoY29uc3Qg
VHlwZSYgdHlwZSA9IFVua25vd24sIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXIgPSAw
KQorICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fbWFya2VyKG1hcmtlcikKKyAg
ICB7CisgICAgfQorCisgICAgRmxvYXRQb2ludCBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29y
aWdpbjsgfQorICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXIoKSBjb25zdCB7IHJl
dHVybiBtX21hcmtlcjsgfQorCisgICAgZmxvYXQgY3VycmVudEFuZ2xlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEZsb2F0U2l6ZSBpbnNsb3BlQ2hhbmdlID0gbV9pbnNsb3BlUG9pbnRzWzFdIC0g
bV9pbnNsb3BlUG9pbnRzWzBdOworICAgICAgICBGbG9hdFNpemUgb3V0c2xvcGVDaGFuZ2UgPSBt
X291dHNsb3BlUG9pbnRzWzFdIC0gbV9vdXRzbG9wZVBvaW50c1swXTsKKworICAgICAgICBkb3Vi
bGUgaW5zbG9wZSA9IHJhZDJkZWcoYXRhbjIoaW5zbG9wZUNoYW5nZS5oZWlnaHQoKSwgaW5zbG9w
ZUNoYW5nZS53aWR0aCgpKSk7CisgICAgICAgIGRvdWJsZSBvdXRzbG9wZSA9IHJhZDJkZWcoYXRh
bjIob3V0c2xvcGVDaGFuZ2UuaGVpZ2h0KCksIG91dHNsb3BlQ2hhbmdlLndpZHRoKCkpKTsKKwor
ICAgICAgICBkb3VibGUgYW5nbGUgPSAwOworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAg
ICAgICBjYXNlIFN0YXJ0OgorICAgICAgICAgICAgYW5nbGUgPSBvdXRzbG9wZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE1pZDoKKyAgICAgICAgICAgIGFuZ2xlID0gKGluc2xv
cGUgKyBvdXRzbG9wZSkgLyAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW5k
OgorICAgICAgICAgICAgYW5nbGUgPSBpbnNsb3BlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoYW5nbGUpOworICAgIH0KKworICAgIHZvaWQgdXBkYXRlVHlwZUFuZE1hcmtlcihjb25z
dCBUeXBlJiB0eXBlLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyKQorICAgIHsKKyAg
ICAgICAgbV90eXBlID0gdHlwZTsKKyAgICAgICAgbV9tYXJrZXIgPSBtYXJrZXI7CisgICAgfQor
CisgICAgdm9pZCB1cGRhdGVPdXRzbG9wZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKKyAgICB7
CisgICAgICAgIG1fb3V0c2xvcGVQb2ludHNbMF0gPSBtX29yaWdpbjsKKyAgICAgICAgbV9vdXRz
bG9wZVBvaW50c1sxXSA9IHBvaW50OworICAgIH0KKworICAgIHZvaWQgdXBkYXRlTWFya2VyRGF0
YUZvclBhdGhFbGVtZW50KGNvbnN0IFBhdGhFbGVtZW50KiBlbGVtZW50KQorICAgIHsKKyAgICAg
ICAgRmxvYXRQb2ludCogcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOworCisgICAgICAgIHN3aXRj
aCAoZWxlbWVudC0+dHlwZSkgeworICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRkUXVhZEN1cnZl
VG9Qb2ludDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzMxMTUgKFBhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludCBub3Qg
aGFuZGxlZCBmb3IgPG1hcmtlcj4pCisgICAgICAgICAgICBtX29yaWdpbiA9IHBvaW50c1sxXTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRkQ3VydmVUb1Bv
aW50OgorICAgICAgICAgICAgbV9pbnNsb3BlUG9pbnRzWzBdID0gcG9pbnRzWzFdOworICAgICAg
ICAgICAgbV9pbnNsb3BlUG9pbnRzWzFdID0gcG9pbnRzWzJdOworICAgICAgICAgICAgbV9vcmln
aW4gPSBwb2ludHNbMl07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQYXRoRWxl
bWVudE1vdmVUb1BvaW50OgorICAgICAgICAgICAgbV9zdWJwYXRoU3RhcnQgPSBwb2ludHNbMF07
CisgICAgICAgIGNhc2UgUGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludDoKKyAgICAgICAgICAgIHVw
ZGF0ZUluc2xvcGUocG9pbnRzWzBdKTsKKyAgICAgICAgICAgIG1fb3JpZ2luID0gcG9pbnRzWzBd
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aEVsZW1lbnRDbG9zZVN1YnBh
dGg6CisgICAgICAgICAgICB1cGRhdGVJbnNsb3BlKHBvaW50c1swXSk7CisgICAgICAgICAgICBt
X29yaWdpbiA9IG1fc3VicGF0aFN0YXJ0OworICAgICAgICAgICAgbV9zdWJwYXRoU3RhcnQgPSBG
bG9hdFBvaW50KCk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRh
dGVJbnNsb3BlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgIHsKKyAgICAgICAgbV9pbnNs
b3BlUG9pbnRzWzBdID0gbV9vcmlnaW47CisgICAgICAgIG1faW5zbG9wZVBvaW50c1sxXSA9IHBv
aW50OworICAgIH0KKworICAgIFR5cGUgbV90eXBlOworICAgIFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyKiBtX21hcmtlcjsKKyAgICBGbG9hdFBvaW50IG1fb3JpZ2luOworICAgIEZsb2F0UG9pbnQg
bV9zdWJwYXRoU3RhcnQ7CisgICAgRmxvYXRQb2ludCBtX2luc2xvcGVQb2ludHNbMl07CisgICAg
RmxvYXRQb2ludCBtX291dHNsb3BlUG9pbnRzWzJdOworfTsKKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKFNWRykKKyNlbmRpZiAvLyBTVkdNYXJrZXJEYXRhX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcAkocmV2aXNp
b24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJ
bmZvLmNwcDo3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2Vy
TGF5b3V0SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDggUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1
ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKKworI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
TWFya2VyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1ZHTWFya2VyTGF5b3V0SW5mbzo6
U1ZHTWFya2VyTGF5b3V0SW5mbygpCisgICAgOiBtX21pZE1hcmtlcigwKQorICAgICwgbV9lbGVt
ZW50SW5kZXgoMCkKKyAgICAsIG1fc3Ryb2tlV2lkdGgoMCkKK3sKK30KKworU1ZHTWFya2VyTGF5
b3V0SW5mbzo6flNWR01hcmtlckxheW91dEluZm8oKQoreworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgcHJvY2Vzc1N0YXJ0QW5kTWlkTWFya2Vycyh2b2lkKiBpbmZvUHRyLCBjb25zdCBQYXRoRWxl
bWVudCogZWxlbWVudCkKK3sKKyAgICBTVkdNYXJrZXJMYXlvdXRJbmZvJiBpbmZvID0gKnJlaW50
ZXJwcmV0X2Nhc3Q8U1ZHTWFya2VyTGF5b3V0SW5mbyo+KGluZm9QdHIpOworICAgIFNWR01hcmtl
ckRhdGEmIG1hcmtlckRhdGEgPSBpbmZvLm1hcmtlckRhdGEoKTsKKyAgICBpbnQmIGVsZW1lbnRJ
bmRleCA9IGluZm8uZWxlbWVudEluZGV4KCk7CisKKyAgICAvLyBGaXJzdCB1cGRhdGUgdGhlIG91
dHNsb3BlIGZvciB0aGUgcHJldmlvdXMgZWxlbWVudAorICAgIG1hcmtlckRhdGEudXBkYXRlT3V0
c2xvcGUoZWxlbWVudC0+cG9pbnRzWzBdKTsKKworICAgIC8vIERyYXcgdGhlIG1hcmtlciBmb3Ig
dGhlIHByZXZpb3VzIGVsZW1lbnQKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2Vy
ID0gbWFya2VyRGF0YS5tYXJrZXIoKTsKKyAgICBpZiAoZWxlbWVudEluZGV4ID4gMCAmJiBtYXJr
ZXIpCisgICAgICAgIGluZm8uYWRkTGF5b3V0ZWRNYXJrZXIobWFya2VyLCBtYXJrZXJEYXRhLm9y
aWdpbigpLCBtYXJrZXJEYXRhLmN1cnJlbnRBbmdsZSgpKTsKKworICAgIC8vIFVwZGF0ZSBvdXIg
bWFya2VyIGRhdGEgZm9yIHRoaXMgZWxlbWVudAorICAgIG1hcmtlckRhdGEudXBkYXRlTWFya2Vy
RGF0YUZvclBhdGhFbGVtZW50KGVsZW1lbnQpOworCisgICAgLy8gQWZ0ZXIgZHJhd2luZyB0aGUg
c3RhcnQgbWFya2VyLCBzd2l0Y2ggdG8gZHJhd2luZyBtaWQgbWFya2VycworICAgIGlmIChlbGVt
ZW50SW5kZXggPT0gMSkKKyAgICAgICAgbWFya2VyRGF0YS51cGRhdGVUeXBlQW5kTWFya2VyKFNW
R01hcmtlckRhdGE6Ok1pZCwgaW5mby5taWRNYXJrZXIoKSk7CisKKyAgICArK2VsZW1lbnRJbmRl
eDsKK30KKworRmxvYXRSZWN0IFNWR01hcmtlckxheW91dEluZm86OmNhbGN1bGF0ZUJvdW5kYXJp
ZXMoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIHN0YXJ0TWFya2VyLCBSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlciogbWlkTWFya2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogZW5kTWFya2VyLCBm
bG9hdCBzdHJva2VXaWR0aCwgY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBtX2xheW91dC5jbGVh
cigpOworICAgIG1fbWlkTWFya2VyID0gbWlkTWFya2VyOworICAgIG1fc3Ryb2tlV2lkdGggPSBz
dHJva2VXaWR0aDsKKyAgICBtX2VsZW1lbnRJbmRleCA9IDA7CisgICAgbV9tYXJrZXJEYXRhID0g
U1ZHTWFya2VyRGF0YShTVkdNYXJrZXJEYXRhOjpTdGFydCwgc3RhcnRNYXJrZXIpOworICAgIHBh
dGguYXBwbHkodGhpcywgcHJvY2Vzc1N0YXJ0QW5kTWlkTWFya2Vycyk7CisKKyAgICBpZiAoZW5k
TWFya2VyKSB7CisgICAgICAgIG1fbWFya2VyRGF0YS51cGRhdGVUeXBlQW5kTWFya2VyKFNWR01h
cmtlckRhdGE6OkVuZCwgZW5kTWFya2VyKTsKKyAgICAgICAgYWRkTGF5b3V0ZWRNYXJrZXIoZW5k
TWFya2VyLCBtX21hcmtlckRhdGEub3JpZ2luKCksIG1fbWFya2VyRGF0YS5jdXJyZW50QW5nbGUo
KSk7CisgICAgfQorCisgICAgaWYgKG1fbGF5b3V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworCisgICAgVmVjdG9yPE1hcmtlckxheW91dD46Oml0ZXJhdG9yIGl0ID0g
bV9sYXlvdXQuYmVnaW4oKTsKKyAgICBWZWN0b3I8TWFya2VyTGF5b3V0Pjo6aXRlcmF0b3IgZW5k
ID0gbV9sYXlvdXQuZW5kKCk7CisKKyAgICBGbG9hdFJlY3QgYm91bmRzOworICAgIGZvciAoOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTWFya2VyTGF5b3V0JiBsYXlvdXQgPSAqaXQ7CisK
KyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckNvbnRlbnQgPSBsYXlvdXQu
bWFya2VyOworICAgICAgICBBU1NFUlQobWFya2VyQ29udGVudCk7CisKKyAgICAgICAgYm91bmRz
LnVuaXRlKG1hcmtlckNvbnRlbnQtPm1hcmtlckJvdW5kYXJpZXMobGF5b3V0Lm1hdHJpeCkpOwor
ICAgIH0KKworICAgIHJldHVybiBib3VuZHM7Cit9CisKK3ZvaWQgU1ZHTWFya2VyTGF5b3V0SW5m
bzo6ZHJhd01hcmtlcnMoUGFpbnRJbmZvJiBwYWludEluZm8pCit7CisgICAgaWYgKG1fbGF5b3V0
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPE1hcmtlckxheW91dD46
Oml0ZXJhdG9yIGl0ID0gbV9sYXlvdXQuYmVnaW4oKTsKKyAgICBWZWN0b3I8TWFya2VyTGF5b3V0
Pjo6aXRlcmF0b3IgZW5kID0gbV9sYXlvdXQuZW5kKCk7CisKKyAgICBmb3IgKDsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIE1hcmtlckxheW91dCYgbGF5b3V0ID0gKml0OworICAgICAgICBs
YXlvdXQubWFya2VyLT5kcmF3KHBhaW50SW5mbywgbGF5b3V0Lm1hdHJpeCk7CisgICAgfQorfQor
Cit2b2lkIFNWR01hcmtlckxheW91dEluZm86OmFkZExheW91dGVkTWFya2VyKFJlbmRlclNWR1Jl
c291cmNlTWFya2VyKiBtYXJrZXIsIGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgYW5n
bGUpCit7CisgICAgQVNTRVJUKG1hcmtlcik7CisgICAgbV9sYXlvdXQuYXBwZW5kKE1hcmtlckxh
eW91dChtYXJrZXIsIG1hcmtlci0+bWFya2VyVHJhbnNmb3JtYXRpb24ob3JpZ2luLCBhbmdsZSwg
bV9zdHJva2VXaWR0aCkpKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5m
by5oCShyZXZpc2lvbiA3NTM0NykJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR01h
cmtlckxheW91dEluZm8uaDo3NTM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHTWFya2VyTGF5b3V0SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHTWFya2VyTGF5b3V0SW5mb19oCisjZGVmaW5lIFNW
R01hcmtlckxheW91dEluZm9faAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKKyNpbmNsdWRlICJTVkdNYXJrZXJEYXRhLmgiCisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGF0aDsKK2NsYXNzIFJl
bmRlclNWR1Jlc291cmNlTWFya2VyOworCitzdHJ1Y3QgTWFya2VyTGF5b3V0IHsKKyAgICBNYXJr
ZXJMYXlvdXQoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlck9iaiA9IDAsIEFmZmluZVRy
YW5zZm9ybSBtYXRyaXhPYmogPSBBZmZpbmVUcmFuc2Zvcm0oKSkKKyAgICAgICAgOiBtYXJrZXIo
bWFya2VyT2JqKQorICAgICAgICAsIG1hdHJpeChtYXRyaXhPYmopCisgICAgeworICAgICAgICBB
U1NFUlQobWFya2VyKTsKKyAgICB9CisKKyAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFy
a2VyOworICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7Cit9OworCitjbGFzcyBTVkdNYXJrZXJM
YXlvdXRJbmZvIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBTVkdNYXJrZXJM
YXlvdXRJbmZvKCk7CisgICAgflNWR01hcmtlckxheW91dEluZm8oKTsKKworICAgIEZsb2F0UmVj
dCBjYWxjdWxhdGVCb3VuZGFyaWVzKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBzdGFydE1hcmtl
ciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1pZE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIqIGVuZE1hcmtlciwgZmxvYXQgc3Ryb2tlV2lkdGgsIGNvbnN0IFBhdGgmKTsKKyAgICB2
b2lkIGRyYXdNYXJrZXJzKFBhaW50SW5mbyYpOworCisgICAgLy8gVXNlZCBieSBzdGF0aWMgaW5s
aW5lIGhlbHBlciBmdW5jdGlvbnMgaW4gU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAKKyAgICBTVkdN
YXJrZXJEYXRhJiBtYXJrZXJEYXRhKCkgeyByZXR1cm4gbV9tYXJrZXJEYXRhOyB9CisgICAgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1pZE1hcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fbWlkTWFy
a2VyOyB9CisgICAgaW50JiBlbGVtZW50SW5kZXgoKSB7IHJldHVybiBtX2VsZW1lbnRJbmRleDsg
fQorICAgIHZvaWQgYWRkTGF5b3V0ZWRNYXJrZXIoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqLCBj
b25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlKTsKKworcHJpdmF0ZToKKyAgICBS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbV9taWRNYXJrZXI7CisKKyAgICAvLyBVc2VkIHdoaWxl
IGxheW91dGluZyBtYXJrZXJzCisgICAgaW50IG1fZWxlbWVudEluZGV4OworICAgIFNWR01hcmtl
ckRhdGEgbV9tYXJrZXJEYXRhOworICAgIGZsb2F0IG1fc3Ryb2tlV2lkdGg7CisKKyAgICAvLyBI
b2xkcyB0aGUgZmluYWwgY29tcHV0ZWQgcmVzdWx0CisgICAgVmVjdG9yPE1hcmtlckxheW91dD4g
bV9sYXlvdXQ7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHJldmlzaW9uIDc1
MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6
NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdSZW5k
ZXJTdXBwb3J0LmgiCisKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgorI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2VyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUg
IlNWR1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgorI2luY2x1
ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFJlY3Qg
U1ZHUmVuZGVyU3VwcG9ydDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKQorewor
ICAgIC8vIFJldHVybiBlYXJseSBmb3IgYW55IGNhc2VzIHdoZXJlIHdlIGRvbid0IGFjdHVhbGx5
IHBhaW50CisgICAgaWYgKG9iamVjdC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUg
JiYgIW9iamVjdC0+ZW5jbG9zaW5nTGF5ZXIoKS0+aGFzVmlzaWJsZUNvbnRlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIC8vIFBhc3Mgb3VyIGxvY2FsIHBhaW50IHJlY3Qg
dG8gY29tcHV0ZVJlY3RGb3JSZXBhaW50KCkgd2hpY2ggd2lsbAorICAgIC8vIG1hcCB0byBwYXJl
bnQgY29vcmRzIGFuZCByZWN1cnNlIHVwIHRoZSBwYXJlbnQgY2hhaW4uCisgICAgSW50UmVjdCBy
ZXBhaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qob2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpKTsKKyAgICBvYmplY3QtPmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50
Q29udGFpbmVyLCByZXBhaW50UmVjdCk7CisgICAgcmV0dXJuIHJlcGFpbnRSZWN0OworfQorCit2
b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJPYmplY3Qq
IG9iamVjdCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3Qm
IHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKQoreworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBz
dmdTdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBpZiAoY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93ID0gc3ZnU3R5bGUtPnNoYWRvdygpKQorICAgICAgICBzaGFkb3ctPmFk
anVzdFJlY3RGb3JTaGFkb3cocmVwYWludFJlY3QpOworCisgICAgLy8gVHJhbnNsYXRlIHRvIGNv
b3JkcyBpbiBvdXIgcGFyZW50IHJlbmRlcmVyLCBhbmQgdGhlbiBjYWxsIGNvbXB1dGVSZWN0Rm9y
UmVwYWludCBvbiBvdXIgcGFyZW50CisgICAgcmVwYWludFJlY3QgPSBvYmplY3QtPmxvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlcGFpbnRSZWN0KTsKKyAgICBvYmplY3QtPnBhcmVu
dCgpLT5jb21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgcmVwYWludFJlY3Qs
IGZpeGVkKTsKK30KKwordm9pZCBTVkdSZW5kZXJTdXBwb3J0OjptYXBMb2NhbFRvQ29udGFpbmVy
KGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgYm9vbCBmaXhlZCAsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3Rh
dGUmIHRyYW5zZm9ybVN0YXRlKQoreworICAgIEFTU0VSVCghZml4ZWQpOyAvLyBXZSBzaG91bGQg
aGF2ZSBubyBmaXhlZCBjb250ZW50IGluIHRoZSBTVkcgcmVuZGVyaW5nIHRyZWUuCisgICAgQVNT
RVJUKHVzZVRyYW5zZm9ybXMpOyAvLyBNYXBwaW5nIGEgcG9pbnQgdGhyb3VnaCBTVkcgdy9vIHJl
c3BlY3RpbmcgdHJhbnNmb3JtcyBpcyB1c2VsZXNzLgorICAgIHRyYW5zZm9ybVN0YXRlLmFwcGx5
VHJhbnNmb3JtKG9iamVjdC0+bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpKTsKKyAgICBvYmplY3Qt
PnBhcmVudCgpLT5tYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIGZpeGVkLCB1
c2VUcmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0ZSk7Cit9CisKK2Jvb2wgU1ZHUmVuZGVyU3VwcG9y
dDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqIG9iamVjdCwgUGFpbnRJ
bmZvJiBwYWludEluZm8pCit7CisgICAgQVNTRVJUKG9iamVjdCk7CisKKyAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisgICAgQVNTRVJUKHN0eWxlKTsKKworICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdTdHlsZSgpOworICAgIEFT
U0VSVChzdmdTdHlsZSk7CisKKyAgICAvLyBTZXR1cCB0cmFuc3BhcmVuY3kgbGF5ZXJzIGJlZm9y
ZSBzZXR0aW5nIHVwIFNWRyByZXNvdXJjZXMhCisgICAgZmxvYXQgb3BhY2l0eSA9IHN0eWxlLT5v
cGFjaXR5KCk7CisgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gc3ZnU3R5bGUtPnNoYWRv
dygpOworICAgIGlmIChvcGFjaXR5IDwgMSB8fCBzaGFkb3cpIHsKKyAgICAgICAgRmxvYXRSZWN0
IHJlcGFpbnRSZWN0ID0gb2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwor
CisgICAgICAgIGlmIChvcGFjaXR5IDwgMSkgeworICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPmNsaXAocmVwYWludFJlY3QpOworICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c2hhZG93KSB7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChyZXBhaW50UmVj
dCk7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U2hhZG93KEludFNpemUoc2hh
ZG93LT54KCksIHNoYWRvdy0+eSgpKSwgc2hhZG93LT5ibHVyKCksIHNoYWRvdy0+Y29sb3IoKSwg
c3R5bGUtPmNvbG9yU3BhY2UoKSk7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+YmVn
aW5UcmFuc3BhcmVuY3lMYXllcigxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFNWR1Jlc291
cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJl
bmRlck9iamVjdChvYmplY3QpOworICAgIGlmICghcmVzb3VyY2VzKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciogbWFza2VyID0gcmVzb3Vy
Y2VzLT5tYXNrZXIoKSkgeworICAgICAgICBpZiAoIW1hc2tlci0+YXBwbHlSZXNvdXJjZShvYmpl
Y3QsIHN0eWxlLCBwYWludEluZm8uY29udGV4dCwgQXBwbHlUb0RlZmF1bHRNb2RlKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyKiBjbGlwcGVyID0gcmVzb3VyY2VzLT5jbGlwcGVyKCkpIHsKKyAgICAgICAgaWYgKCFj
bGlwcGVyLT5hcHBseVJlc291cmNlKG9iamVjdCwgc3R5bGUsIHBhaW50SW5mby5jb250ZXh0LCBB
cHBseVRvRGVmYXVsdE1vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
I2lmIEVOQUJMRShGSUxURVJTKQorICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciogZmls
dGVyID0gcmVzb3VyY2VzLT5maWx0ZXIoKSkgeworICAgICAgICBpZiAoIWZpbHRlci0+YXBwbHlS
ZXNvdXJjZShvYmplY3QsIHN0eWxlLCBwYWludEluZm8uY29udGV4dCwgQXBwbHlUb0RlZmF1bHRN
b2RlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjZW5kaWYKKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0Nv
bnRlbnQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBHcmFwaGlj
c0NvbnRleHQqIHNhdmVkQ29udGV4dCkKK3sKKyNpZiAhRU5BQkxFKEZJTFRFUlMpCisgICAgVU5V
U0VEX1BBUkFNKHNhdmVkQ29udGV4dCk7CisjZW5kaWYKKworICAgIEFTU0VSVChvYmplY3QpOwor
CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOworICAgIEFT
U0VSVChzdHlsZSk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHls
ZS0+c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3ZnU3R5bGUpOworCisjaWYgRU5BQkxFKEZJTFRF
UlMpCisgICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2Fj
aGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KG9iamVjdCk7CisgICAgaWYgKHJlc291cmNlcykg
eworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IHJlc291cmNl
cy0+ZmlsdGVyKCkpIHsKKyAgICAgICAgICAgIGZpbHRlci0+cG9zdEFwcGx5UmVzb3VyY2Uob2Jq
ZWN0LCBwYWludEluZm8uY29udGV4dCwgQXBwbHlUb0RlZmF1bHRNb2RlLCAvKiBwYXRoICovMCk7
CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dCA9IHNhdmVkQ29udGV4dDsKKyAgICAgICAg
fQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHN0eWxlLT5vcGFjaXR5KCkgPCAxKQorICAgICAg
ICBwYWludEluZm8uY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIGlmIChz
dmdTdHlsZS0+c2hhZG93KCkpCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5lbmRUcmFuc3Bh
cmVuY3lMYXllcigpOworfQorCit2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVDb250YWlu
ZXJCb3VuZGluZ0JveGVzKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyLCBGbG9hdFJlY3Qm
IG9iamVjdEJvdW5kaW5nQm94LCBGbG9hdFJlY3QmIHN0cm9rZUJvdW5kaW5nQm94LCBGbG9hdFJl
Y3QmIHJlcGFpbnRCb3VuZGluZ0JveCkKK3sKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVu
dCA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoY3VycmVudC0+aXNTVkdIaWRkZW5Db250YWlu
ZXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtID0gY3VycmVudC0+bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpOworICAg
ICAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkgeworICAgICAgICAgICAgb2JqZWN0Qm91
bmRpbmdCb3gudW5pdGUoY3VycmVudC0+b2JqZWN0Qm91bmRpbmdCb3goKSk7CisgICAgICAgICAg
ICBzdHJva2VCb3VuZGluZ0JveC51bml0ZShjdXJyZW50LT5zdHJva2VCb3VuZGluZ0JveCgpKTsK
KyAgICAgICAgICAgIHJlcGFpbnRCb3VuZGluZ0JveC51bml0ZShjdXJyZW50LT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG9i
amVjdEJvdW5kaW5nQm94LnVuaXRlKHRyYW5zZm9ybS5tYXBSZWN0KGN1cnJlbnQtPm9iamVjdEJv
dW5kaW5nQm94KCkpKTsKKyAgICAgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKHRyYW5z
Zm9ybS5tYXBSZWN0KGN1cnJlbnQtPnN0cm9rZUJvdW5kaW5nQm94KCkpKTsKKyAgICAgICAgICAg
IHJlcGFpbnRCb3VuZGluZ0JveC51bml0ZSh0cmFuc2Zvcm0ubWFwUmVjdChjdXJyZW50LT5yZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jv
b2wgU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgbG9jYWxSZXBhaW50UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2Nh
bFRyYW5zZm9ybSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCit7CisgICAgaWYgKGxvY2Fs
VHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgcmV0dXJuIGxvY2FsUmVwYWludFJlY3Qu
aW50ZXJzZWN0cyhwYWludEluZm8ucmVjdCk7CisKKyAgICByZXR1cm4gbG9jYWxUcmFuc2Zvcm0u
bWFwUmVjdChsb2NhbFJlcGFpbnRSZWN0KS5pbnRlcnNlY3RzKHBhaW50SW5mby5yZWN0KTsKK30K
KworY29uc3QgUmVuZGVyU1ZHUm9vdCogU1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290T2Jq
ZWN0KGNvbnN0IFJlbmRlck9iamVjdCogc3RhcnQpCit7CisgICAgd2hpbGUgKHN0YXJ0ICYmICFz
dGFydC0+aXNTVkdSb290KCkpCisgICAgICAgIHN0YXJ0ID0gc3RhcnQtPnBhcmVudCgpOworCisg
ICAgQVNTRVJUKHN0YXJ0KTsKKyAgICBBU1NFUlQoc3RhcnQtPmlzU1ZHUm9vdCgpKTsKKyAgICBy
ZXR1cm4gdG9SZW5kZXJTVkdSb290KHN0YXJ0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlu
dmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKFJlbmRlck9iamVjdCogc3RhcnQpCit7CisgICAg
QVNTRVJUKCFzdGFydC0+bmVlZHNMYXlvdXQoKSk7CisgICAgaWYgKFNWR1Jlc291cmNlcyogcmVz
b3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVj
dChzdGFydCkpCisgICAgICAgIHJlc291cmNlcy0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKHN0YXJ0
LCBmYWxzZSk7CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBzdGFydC0+Zmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgaW52
YWxpZGF0ZVJlc291cmNlc09mQ2hpbGRyZW4oY2hpbGQpOworfQorCit2b2lkIFNWR1JlbmRlclN1
cHBvcnQ6OmxheW91dENoaWxkcmVuKFJlbmRlck9iamVjdCogc3RhcnQsIGJvb2wgc2VsZk5lZWRz
TGF5b3V0KQoreworICAgIGJvb2wgbGF5b3V0U2l6ZUNoYW5nZWQgPSBmaW5kVHJlZVJvb3RPYmpl
Y3Qoc3RhcnQpLT5pc0xheW91dFNpemVDaGFuZ2VkKCk7CisgICAgSGFzaFNldDxSZW5kZXJPYmpl
Y3QqPiBub3RsYXlvdXRlZE9iamVjdHM7CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQg
PSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgeworICAgICAgICBib29sIG5lZWRzTGF5b3V0ID0gc2VsZk5lZWRzTGF5b3V0OworCisgICAg
ICAgIGlmIChsYXlvdXRTaXplQ2hhbmdlZCkgeworICAgICAgICAgICAgLy8gV2hlbiBzZWxmTmVl
ZHNMYXlvdXQgaXMgZmFsc2UgYW5kIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkLCB3ZSBoYXZlIHRv
IGNoZWNrIHdoZXRoZXIgdGhpcyBjaGlsZCB1c2VzIHJlbGF0aXZlIGxlbmd0aHMKKyAgICAgICAg
ICAgIGlmIChTVkdFbGVtZW50KiBlbGVtZW50ID0gY2hpbGQtPm5vZGUoKS0+aXNTVkdFbGVtZW50
KCkgPyBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oY2hpbGQtPm5vZGUoKSkgOiAwKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzU3R5bGVkKCkgJiYgc3RhdGljX2Nhc3Q8U1ZHU3R5
bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBXaGVuIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkIGFuZCB3aGVuIHVzaW5n
IHJlbGF0aXZlIHZhbHVlcyB0ZWxsIHRoZSBSZW5kZXJTVkdQYXRoIHRvIHVwZGF0ZSBpdHMgUGF0
aCBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1NWR1BhdGgoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyU1ZHUGF0aChjaGlsZCktPnNldE5lZWRzUGF0
aFVwZGF0ZSgpOworCisgICAgICAgICAgICAgICAgICAgIG5lZWRzTGF5b3V0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bmVlZHNMYXlvdXQpIHsKKyAgICAgICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91dCh0cnVlLCBm
YWxzZSk7CisgICAgICAgICAgICBjaGlsZC0+bGF5b3V0KCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpZiAoY2hpbGQtPm5lZWRzTGF5b3V0KCkpCisgICAgICAgICAgICAgICAgY2hp
bGQtPmxheW91dCgpOworICAgICAgICAgICAgZWxzZSBpZiAobGF5b3V0U2l6ZUNoYW5nZWQpCisg
ICAgICAgICAgICAgICAgbm90bGF5b3V0ZWRPYmplY3RzLmFkZChjaGlsZCk7CisgICAgICAgIH0K
KworICAgICAgICBBU1NFUlQoIWNoaWxkLT5uZWVkc0xheW91dCgpKTsKKyAgICB9CisKKyAgICBp
ZiAoIWxheW91dFNpemVDaGFuZ2VkKSB7CisgICAgICAgIEFTU0VSVChub3RsYXlvdXRlZE9iamVj
dHMuaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElmIHRoZSBs
YXlvdXQgc2l6ZSBjaGFuZ2VkLCBpbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgYWxsIGNoaWxk
cmVuIHRoYXQgZGlkbid0IGdvIHRocm91Z2ggdGhlIGxheW91dCgpIGNvZGUgcGF0aC4KKyAgICBI
YXNoU2V0PFJlbmRlck9iamVjdCo+OjppdGVyYXRvciBlbmQgPSBub3RsYXlvdXRlZE9iamVjdHMu
ZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlbmRlck9iamVjdCo+OjppdGVyYXRvciBpdCA9IG5v
dGxheW91dGVkT2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGludmFs
aWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKCppdCk7Cit9CisKK2Jvb2wgU1ZHUmVuZGVyU3VwcG9y
dDo6aXNPdmVyZmxvd0hpZGRlbihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICAv
LyBTVkcgZG9lc24ndCBzdXBwb3J0IGluZGVwZW5kZW50IHgveSBvdmVyZmxvdworICAgIEFTU0VS
VChvYmplY3QtPnN0eWxlKCktPm92ZXJmbG93WCgpID09IG9iamVjdC0+c3R5bGUoKS0+b3ZlcmZs
b3dZKCkpOworCisgICAgLy8gT1NDUk9MTCBpcyBuZXZlciBzZXQgZm9yIFNWRyAtIHNlZSBDU1NT
dHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZQorICAgIEFTU0VSVChvYmplY3QtPnN0eWxl
KCktPm92ZXJmbG93WCgpICE9IE9TQ1JPTEwpOworCisgICAgLy8gUmVuZGVyU1ZHUm9vdCBzaG91
bGQgbmV2ZXIgcXVlcnkgZm9yIG92ZXJmbG93IHN0YXRlIC0gaXQgc2hvdWxkIGFsd2F5cyBjbGlw
IGl0c2VsZiB0byB0aGUgaW5pdGlhbCB2aWV3cG9ydCBzaXplLgorICAgIEFTU0VSVCghb2JqZWN0
LT5pc1Jvb3QoKSk7CisKKyAgICByZXR1cm4gb2JqZWN0LT5zdHlsZSgpLT5vdmVyZmxvd1goKSA9
PSBPSElEREVOOworfQorCit2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRS
ZWN0V2l0aFJlc291cmNlcyhjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgRmxvYXRSZWN0JiBy
ZXBhaW50UmVjdCkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKworICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKKyAgICBBU1NFUlQoc3R5bGUpOworCisgICAgY29uc3Qg
U1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CisgICAgQVNTRVJU
KHN2Z1N0eWxlKTsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb25zdF9jYXN0PFJl
bmRlck9iamVjdCo+KG9iamVjdCk7CisgICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdS
ZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsK
KyAgICBpZiAoIXJlc291cmNlcykgeworICAgICAgICBpZiAoY29uc3QgU2hhZG93RGF0YSogc2hh
ZG93ID0gc3ZnU3R5bGUtPnNoYWRvdygpKQorICAgICAgICAgICAgc2hhZG93LT5hZGp1c3RSZWN0
Rm9yU2hhZG93KHJlcGFpbnRSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVO
QUJMRShGSUxURVJTKQorICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0g
cmVzb3VyY2VzLT5maWx0ZXIoKSkKKyAgICAgICAgcmVwYWludFJlY3QgPSBmaWx0ZXItPnJlc291
cmNlQm91bmRpbmdCb3gocmVuZGVyZXIpOworI2VuZGlmCisKKyAgICBpZiAoUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gcmVzb3VyY2VzLT5jbGlwcGVyKCkpCisgICAgICAgIHJl
cGFpbnRSZWN0LmludGVyc2VjdChjbGlwcGVyLT5yZXNvdXJjZUJvdW5kaW5nQm94KHJlbmRlcmVy
KSk7CisKKyAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqIG1hc2tlciA9IHJlc291cmNl
cy0+bWFza2VyKCkpCisgICAgICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChtYXNrZXItPnJlc291
cmNlQm91bmRpbmdCb3gocmVuZGVyZXIpKTsKKworICAgIGlmIChjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3cgPSBzdmdTdHlsZS0+c2hhZG93KCkpCisgICAgICAgIHNoYWRvdy0+YWRqdXN0UmVjdEZv
clNoYWRvdyhyZXBhaW50UmVjdCk7Cit9CisKK2Jvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJ
bkNsaXBwaW5nQXJlYShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpCit7CisgICAgQVNTRVJUKG9iamVjdCk7CisKKyAgICAvLyBXZSBqdXN0IHRha2UgY2xpcHBl
cnMgaW50byBhY2NvdW50IHRvIGRldGVybWluZSBpZiBhIHBvaW50IGlzIG9uIHRoZSBub2RlLiBU
aGUgU3BlY2lmaWNhdGlvbiBtYXkKKyAgICAvLyBjaGFuZ2UgbGF0ZXIgYW5kIHdlIGFsc28gbmVl
ZCB0byBjaGVjayBtYXNrZXJzLgorICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVz
b3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChvYmplY3QpOworICAg
IGlmICghcmVzb3VyY2VzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSByZXNvdXJjZXMtPmNsaXBwZXIoKSkKKyAgICAg
ICAgcmV0dXJuIGNsaXBwZXItPmhpdFRlc3RDbGlwQ29udGVudChvYmplY3QtPm9iamVjdEJvdW5k
aW5nQm94KCksIHBvaW50KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNWR1JlbmRl
clN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0
KQoreworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBBU1NFUlQoc3R5bGUpOworICAgIEFTU0VS
VChvYmplY3QpOworICAgIEFTU0VSVChvYmplY3QtPm5vZGUoKSk7CisgICAgQVNTRVJUKG9iamVj
dC0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSog
c3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3ZnU3R5bGUpOworCisg
ICAgU1ZHRWxlbWVudCogbGVuZ3RoQ29udGV4dCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihv
YmplY3QtPm5vZGUoKSk7CisgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHN2Z1N0eWxl
LT5zdHJva2VXaWR0aCgpLnZhbHVlKGxlbmd0aENvbnRleHQpKTsKKyAgICBjb250ZXh0LT5zZXRM
aW5lQ2FwKHN2Z1N0eWxlLT5jYXBTdHlsZSgpKTsKKyAgICBjb250ZXh0LT5zZXRMaW5lSm9pbihz
dmdTdHlsZS0+am9pblN0eWxlKCkpOworICAgIGlmIChzdmdTdHlsZS0+am9pblN0eWxlKCkgPT0g
TWl0ZXJKb2luKQorICAgICAgICBjb250ZXh0LT5zZXRNaXRlckxpbWl0KHN2Z1N0eWxlLT5zdHJv
a2VNaXRlckxpbWl0KCkpOworCisgICAgY29uc3QgVmVjdG9yPFNWR0xlbmd0aD4mIGRhc2hlcyA9
IHN2Z1N0eWxlLT5zdHJva2VEYXNoQXJyYXkoKTsKKyAgICBpZiAoZGFzaGVzLmlzRW1wdHkoKSkK
KyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOworICAgIGVsc2Ug
eworICAgICAgICBEYXNoQXJyYXkgZGFzaEFycmF5OworICAgICAgICBjb25zdCBWZWN0b3I8U1ZH
TGVuZ3RoPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGFzaGVzLmVuZCgpOworICAgICAgICBmb3Ig
KFZlY3RvcjxTVkdMZW5ndGg+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhc2hlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBkYXNoQXJyYXkuYXBwZW5kKCgqaXQpLnZhbHVl
KGxlbmd0aENvbnRleHQpKTsKKworICAgICAgICBjb250ZXh0LT5zZXRMaW5lRGFzaChkYXNoQXJy
YXksIHN2Z1N0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCkudmFsdWUobGVuZ3RoQ29udGV4dCkpOwor
ICAgIH0KK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCShyZXZpc2lvbiA3NTM0NykJKGZyb20gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaDo3NTM0NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODMgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHUmVuZGVyU3VwcG9ydF9oCisj
ZGVmaW5lIFNWR1JlbmRlclN1cHBvcnRfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJQ
YWludEluZm8uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFBvaW50Owor
Y2xhc3MgRmxvYXRSZWN0OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBSZW5kZXJCb3hNb2Rl
bE9iamVjdDsKK2NsYXNzIFJlbmRlck9iamVjdDsKK2NsYXNzIFJlbmRlclN0eWxlOworY2xhc3Mg
UmVuZGVyU1ZHUm9vdDsKK2NsYXNzIFRyYW5zZm9ybVN0YXRlOworCisvLyBTVkdSZW5kZXJlclN1
cHBvcnQgaXMgYSBoZWxwZXIgY2xhc3Mgc2hhcmluZyBjb2RlIGJldHdlZW4gYWxsIFNWRyByZW5k
ZXJlcnMuCitjbGFzcyBTVkdSZW5kZXJTdXBwb3J0IHsKK3B1YmxpYzoKKyAgICAvLyBVc2VkIGJ5
IGFsbCBTVkcgcmVuZGVyZXJzIHdobyBhcHBseSBjbGlwL2ZpbHRlci9ldGMuIHJlc291cmNlcyB0
byB0aGUgcmVuZGVyZXIgY29udGVudAorICAgIHN0YXRpYyBib29sIHByZXBhcmVUb1JlbmRlclNW
R0NvbnRlbnQoUmVuZGVyT2JqZWN0KiwgUGFpbnRJbmZvJik7CisgICAgc3RhdGljIHZvaWQgZmlu
aXNoUmVuZGVyU1ZHQ29udGVudChSZW5kZXJPYmplY3QqLCBQYWludEluZm8mLCBHcmFwaGljc0Nv
bnRleHQqIHNhdmVkQ29udGV4dCk7CisKKyAgICAvLyBTaGFyZXMgY2hpbGQgbGF5b3V0aW5nIGNv
ZGUgYmV0d2VlbiBSZW5kZXJTVkdSb290L1JlbmRlclNWRyhIaWRkZW4pQ29udGFpbmVyCisgICAg
c3RhdGljIHZvaWQgbGF5b3V0Q2hpbGRyZW4oUmVuZGVyT2JqZWN0KiwgYm9vbCBzZWxmTmVlZHNM
YXlvdXQpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGRldGVybWluaW5nIHdoZXRlciBvdmVy
ZmxvdyBpcyBoaWRkZW4KKyAgICBzdGF0aWMgYm9vbCBpc092ZXJmbG93SGlkZGVuKGNvbnN0IFJl
bmRlck9iamVjdCopOworCisgICAgLy8gQ2FsY3VsYXRlcyB0aGUgcmVwYWludFJlY3QgaW4gY29t
YmluYXRpb24gd2l0aCBmaWx0ZXIsIGNsaXBwZXIgYW5kIG1hc2tlciBpbiBsb2NhbCBjb29yZGlu
YXRlcy4KKyAgICBzdGF0aWMgdm9pZCBpbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXMo
Y29uc3QgUmVuZGVyT2JqZWN0KiwgRmxvYXRSZWN0Jik7CisKKyAgICAvLyBEZXRlcm1pbmVzIHdo
ZXRoZXIgdGhlIHBhc3NlZCBwb2ludCBsaWVzIGluIGEgY2xpcHBpbmcgYXJlYQorICAgIHN0YXRp
YyBib29sIHBvaW50SW5DbGlwcGluZ0FyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgRmxvYXRQb2lu
dCYpOworCisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMoY29u
c3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gs
IEZsb2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5n
Qm94KTsKKyAgICBzdGF0aWMgYm9vbCBwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoY29u
c3QgRmxvYXRSZWN0JiBsb2NhbFJlcGFpbnRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxv
Y2FsVHJhbnNmb3JtLCBjb25zdCBQYWludEluZm8mKTsKKworICAgIC8vIEltcG9ydGFudCBmdW5j
dGlvbnMgdXNlZCBieSBuZWFybHkgYWxsIFNWRyByZW5kZXJlcnMgY2VudHJhbGl6aW5nIGNvb3Jk
aW5hdGUgdHJhbnNmb3JtYXRpb25zIC8gcmVwYWludCByZWN0IGNhbGN1bGF0aW9ucworICAgIHN0
YXRpYyBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlck9iamVjdCos
IFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKKyAgICBzdGF0aWMgdm9p
ZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmLCBib29sIGZpeGVkKTsKKyAgICBzdGF0aWMg
dm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCosIFJlbmRlckJveE1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIHVzZVRyYW5zZm9ybXMsIGJvb2wgZml4
ZWQsIFRyYW5zZm9ybVN0YXRlJik7CisKKyAgICAvLyBTaGFyZWQgYmV0d2VlbiBTVkcgcmVuZGVy
ZXJzIGFuZCByZXNvdXJjZXMuCisgICAgc3RhdGljIHZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29u
dGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlck9i
amVjdCopOworCisgICAgLy8gRklYTUU6IFRoZXNlIG1ldGhvZHMgZG8gbm90IGJlbG9uZyBoZXJl
LgorICAgIHN0YXRpYyBjb25zdCBSZW5kZXJTVkdSb290KiBmaW5kVHJlZVJvb3RPYmplY3QoY29u
c3QgUmVuZGVyT2JqZWN0Kik7CisKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBjbGFzcyBpcyBub3Qg
Y29uc3RydWN0YWJsZS4KKyAgICBTVkdSZW5kZXJTdXBwb3J0KCk7CisgICAgflNWR1JlbmRlclN1
cHBvcnQoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShTVkcpCisjZW5kaWYgLy8gU1ZHUmVuZGVyU3VwcG9ydF9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlz
aW9uIDc1MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5jcHA6NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQ4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgorICogICAgICAgICAgIChDKSAyMDA2IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKFNWRykKKyNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCisKKyNpbmNsdWRlICJH
cmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSW5saW5l
VGV4dEJveC5oIgorI2luY2x1ZGUgIkxpbmVhckdyYWRpZW50QXR0cmlidXRlcy5oIgorI2luY2x1
ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJQYXR0
ZXJuQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIlJhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5oIgor
I2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgi
CisjaW5jbHVkZSAiUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
SW1hZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVUZXh0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHUGF0aC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIgorI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGll
bnQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgorI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlTWFza2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIgorI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R1Jvb3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyVHJl
ZUFzVGV4dC5oIgorI2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdF
bGxpcHNlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIKKyNpbmNsdWRl
ICJTVkdMaW5lRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0xpbmVhckdyYWRpZW50RWxlbWVudC5o
IgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJTVkdQYXRoUGFyc2VyRmFjdG9yeS5oIgorI2luY2x1ZGUgIlNWR1BhdHRlcm5FbGVt
ZW50LmgiCisjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCisjaW5jbHVkZSAiU1ZHUG9seUVsZW1l
bnQuaCIKKyNpbmNsdWRlICJTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCIKKyNpbmNsdWRlICJT
VkdSZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKKyNpbmNsdWRl
ICJTVkdTdG9wRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKKworI2lu
Y2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKiogY2xhc3MgKyBpb21h
bmlwIHRvIGhlbHAgc3RyZWFtaW5nIGxpc3Qgc2VwYXJhdG9ycywgaS5lLiAiLCAiIGluIHN0cmlu
ZyAiYSwgYiwgYywgZCIKKyAqIENhbiBiZSB1c2VkIGluIGNhc2VzIHdoZXJlIHlvdSBkb24ndCBr
bm93IHdoaWNoIGl0ZW0gaW4gdGhlIGxpc3QgaXMgdGhlIGZpcnN0CisgKiBvbmUgdG8gYmUgcHJp
bnRlZCwgYnV0IHN0aWxsIHdhbnQgdG8gYXZvaWQgc3RyaW5ncyBsaWtlICIsIGIsIGMiLgorICov
CitjbGFzcyBUZXh0U3RyZWFtU2VwYXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUZXh0U3RyZWFtU2Vw
YXJhdG9yKGNvbnN0IFN0cmluZyYgcykKKyAgICAgICAgOiBtX3NlcGFyYXRvcihzKQorICAgICAg
ICAsIG1fbmVlZFRvU2VwYXJhdGUoZmFsc2UpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgVGV4dFN0cmVhbVNl
cGFyYXRvciYpOworCisgICAgU3RyaW5nIG1fc2VwYXJhdG9yOworICAgIGJvb2wgbV9uZWVkVG9T
ZXBhcmF0ZTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFRl
eHRTdHJlYW1TZXBhcmF0b3ImIHNlcCkKK3sKKyAgICBpZiAoc2VwLm1fbmVlZFRvU2VwYXJhdGUp
CisgICAgICAgIHRzIDw8IHNlcC5tX3NlcGFyYXRvcjsKKyAgICBlbHNlCisgICAgICAgIHNlcC5t
X25lZWRUb1NlcGFyYXRlID0gdHJ1ZTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlVHlwZT4KK3N0YXRpYyB2b2lkIHdyaXRlTmFtZVZhbHVlUGFpcihUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgY2hhciogbmFtZSwgVmFsdWVUeXBlIHZhbHVlKQoreworICAgIHRzIDw8
ICIgWyIgPDwgbmFtZSA8PCAiPSIgPDwgdmFsdWUgPDwgIl0iOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZVR5cGU+CitzdGF0aWMgdm9pZCB3cml0ZU5hbWVBbmRRdW90ZWRWYWx1ZShUZXh0
U3RyZWFtJiB0cywgY29uc3QgY2hhciogbmFtZSwgVmFsdWVUeXBlIHZhbHVlKQoreworICAgIHRz
IDw8ICIgWyIgPDwgbmFtZSA8PCAiPVwiIiA8PCB2YWx1ZSA8PCAiXCJdIjsKK30KKworc3RhdGlj
IHZvaWQgd3JpdGVJZk5vdEVtcHR5KFRleHRTdHJlYW0mIHRzLCBjb25zdCBjaGFyKiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKQorICAgICAg
ICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsIG5hbWUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmFsdWVUeXBlPgorc3RhdGljIHZvaWQgd3JpdGVJZk5vdERlZmF1bHQoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IGNoYXIqIG5hbWUsIFZhbHVlVHlwZSB2YWx1ZSwgVmFsdWVUeXBlIGRlZmF1
bHRWYWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgIT0gZGVmYXVsdFZhbHVlKQorICAgICAgICB3cml0
ZU5hbWVWYWx1ZVBhaXIodHMsIG5hbWUsIHZhbHVlKTsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRSZWN0ICZyKQoreworICAgIHRzIDw8ICJh
dCAoIjsgCisgICAgaWYgKGhhc0ZyYWN0aW9ucyhyLngoKSkpIAorICAgICAgICB0cyA8PCByLngo
KTsKKyAgICBlbHNlIAorICAgICAgICB0cyA8PCBpbnQoci54KCkpOworICAgIHRzIDw8ICIsIjsK
KyAgICBpZiAoaGFzRnJhY3Rpb25zKHIueSgpKSkgCisgICAgICAgIHRzIDw8IHIueSgpOworICAg
IGVsc2UgCisgICAgICAgIHRzIDw8IGludChyLnkoKSk7CisgICAgdHMgPDwgIikgc2l6ZSAiOwor
ICAgIGlmIChoYXNGcmFjdGlvbnMoci53aWR0aCgpKSkgCisgICAgICAgIHRzIDw8IHIud2lkdGgo
KTsgCisgICAgZWxzZSAKKyAgICAgICAgdHMgPDwgaW50KHIud2lkdGgoKSk7IAorICAgIHRzIDw8
ICJ4IjsKKyAgICBpZiAoaGFzRnJhY3Rpb25zKHIuaGVpZ2h0KCkpKSAKKyAgICAgICAgdHMgPDwg
ci5oZWlnaHQoKTsKKyAgICBlbHNlIAorICAgICAgICB0cyA8PCBpbnQoci5oZWlnaHQoKSk7Cisg
ICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAodHJhbnNmb3Jt
LmlzSWRlbnRpdHkoKSkKKyAgICAgICAgdHMgPDwgImlkZW50aXR5IjsKKyAgICBlbHNlCisgICAg
ICAgIHRzIDw8ICJ7bT0oKCIKKyAgICAgICAgICAgPDwgdHJhbnNmb3JtLmEoKSA8PCAiLCIgPDwg
dHJhbnNmb3JtLmIoKQorICAgICAgICAgICA8PCAiKSgiCisgICAgICAgICAgIDw8IHRyYW5zZm9y
bS5jKCkgPDwgIiwiIDw8IHRyYW5zZm9ybS5kKCkKKyAgICAgICAgICAgPDwgIikpIHQ9KCIKKyAg
ICAgICAgICAgPDwgdHJhbnNmb3JtLmUoKSA8PCAiLCIgPDwgdHJhbnNmb3JtLmYoKQorICAgICAg
ICAgICA8PCAiKX0iOworCisgICAgcmV0dXJuIHRzOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgV2luZFJ1bGUgcnVsZSkKK3sKKyAgICBz
d2l0Y2ggKHJ1bGUpIHsKKyAgICBjYXNlIFJVTEVfTk9OWkVSTzoKKyAgICAgICAgdHMgPDwgIk5P
Ti1aRVJPIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSVUxFX0VWRU5PREQ6CisgICAgICAg
IHRzIDw8ICJFVkVOLU9ERCI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0
czsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUmIHVuaXRUeXBlKQoreworICAgIHN3aXRjaCAo
dW5pdFR5cGUpIHsKKyAgICBjYXNlIFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9VTktOT1dO
OgorICAgICAgICB0cyA8PCAidW5rbm93biI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1ZH
VW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFOgorICAgICAgICB0cyA8PCAi
dXNlclNwYWNlT25Vc2UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNWR1VuaXRUeXBlczo6
U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDoKKyAgICAgICAgdHMgPDwgIm9iamVjdEJv
dW5kaW5nQm94IjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRzOworfQor
CitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU1ZH
TWFya2VyRWxlbWVudDo6U1ZHTWFya2VyVW5pdHNUeXBlJiBtYXJrZXJVbml0KQoreworICAgIHN3
aXRjaCAobWFya2VyVW5pdCkgeworICAgIGNhc2UgU1ZHTWFya2VyRWxlbWVudDo6U1ZHX01BUktF
UlVOSVRTX1VOS05PV046CisgICAgICAgIHRzIDw8ICJ1bmtub3duIjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTVkdNYXJrZXJFbGVtZW50OjpTVkdfTUFSS0VSVU5JVFNfVVNFUlNQQUNFT05V
U0U6CisgICAgICAgIHRzIDw8ICJ1c2VyU3BhY2VPblVzZSI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU1ZHTWFya2VyRWxlbWVudDo6U1ZHX01BUktFUlVOSVRTX1NUUk9LRVdJRFRIOgorICAg
ICAgICB0cyA8PCAic3Ryb2tlV2lkdGgiOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IENvbG9yJiBjKQoreworICAgIHJldHVybiB0cyA8PCBjLm5hbWUoKTsKK30KKworLy8gRklY
TUU6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIEtDYW52YXNSZW5kZXJpbmdTdHlsZS5jcHAKK3N0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEYXNoQXJy
YXkmIGEpCit7CisgICAgdHMgPDwgInsiOworICAgIERhc2hBcnJheTo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gYS5lbmQoKTsKKyAgICBmb3IgKERhc2hBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBh
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQgIT0gYS5iZWdpbigp
KQorICAgICAgICAgICAgdHMgPDwgIiwgIjsKKyAgICAgICAgdHMgPDwgKml0OworICAgIH0KKyAg
ICB0cyA8PCAifSI7CisgICAgcmV0dXJuIHRzOworfQorCisvLyBGSVhNRTogTWF5YmUgdGhpcyBz
aG91bGQgYmUgaW4gR3JhcGhpY3NUeXBlcy5jcHAKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lQ2FwIHN0eWxlKQoreworICAgIHN3aXRjaCAoc3R5bGUp
IHsKKyAgICBjYXNlIEJ1dHRDYXA6CisgICAgICAgIHRzIDw8ICJCVVRUIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBSb3VuZENhcDoKKyAgICAgICAgdHMgPDwgIlJPVU5EIjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTcXVhcmVDYXA6CisgICAgICAgIHRzIDw8ICJTUVVBUkUiOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCisvLyBGSVhNRTogTWF5YmUg
dGhpcyBzaG91bGQgYmUgaW4gR3JhcGhpY3NUeXBlcy5jcHAKK3N0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBzdHlsZSkKK3sKKyAgICBzd2l0Y2gg
KHN0eWxlKSB7CisgICAgY2FzZSBNaXRlckpvaW46CisgICAgICAgIHRzIDw8ICJNSVRFUiI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUm91bmRKb2luOgorICAgICAgICB0cyA8PCAiUk9VTkQi
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJldmVsSm9pbjoKKyAgICAgICAgdHMgPDwgIkJF
VkVMIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30KKworLy8gRklY
TUU6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIEdyYWRpZW50LmNwcAorc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEdyYWRpZW50U3ByZWFkTWV0aG9kIG1vZGUp
Cit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBTcHJlYWRNZXRob2RQYWQ6CisgICAg
ICAgIHRzIDw8ICJQQUQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNwcmVhZE1ldGhvZFJl
cGVhdDoKKyAgICAgICAgdHMgPDwgIlJFUEVBVCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U3ByZWFkTWV0aG9kUmVmbGVjdDoKKyAgICAgICAgdHMgPDwgIlJFRkxFQ1QiOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHM7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlU1ZH
UGFpbnRpbmdSZXNvdXJjZShUZXh0U3RyZWFtJiB0cywgUmVuZGVyU1ZHUmVzb3VyY2UqIHJlc291
cmNlKQoreworICAgIGlmIChyZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gU29saWRDb2xvclJl
c291cmNlVHlwZSkgeworICAgICAgICB0cyA8PCAiW3R5cGU9U09MSURdIFtjb2xvcj0iIDw8IHN0
YXRpY19jYXN0PFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcio+KHJlc291cmNlKS0+Y29sb3Io
KSA8PCAiXSI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBbGwgb3RoZXIgcmVz
b3VyY2VzIGRlcml2ZSBmcm9tIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyCisgICAgUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIqIGNvbnRhaW5lciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyKj4ocmVzb3VyY2UpOworICAgIE5vZGUqIG5vZGUgPSBjb250YWluZXIt
Pm5vZGUoKTsKKyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKG5vZGUtPmlzU1ZHRWxlbWVu
dCgpKTsKKworICAgIGlmIChyZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gUGF0dGVyblJlc291
cmNlVHlwZSkKKyAgICAgICAgdHMgPDwgIlt0eXBlPVBBVFRFUk5dIjsKKyAgICBlbHNlIGlmIChy
ZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGUpCisg
ICAgICAgIHRzIDw8ICJbdHlwZT1MSU5FQVItR1JBRElFTlRdIjsKKyAgICBlbHNlIGlmIChyZXNv
dXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGUpCisgICAg
ICAgIHRzIDw8ICJbdHlwZT1SQURJQUwtR1JBRElFTlRdIjsKKworICAgIHRzIDw8ICIgW2lkPVwi
IiA8PCBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSktPmdldElkQXR0cmlidXRlKCkgPDwg
IlwiXSI7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFJlbmRlck9iamVjdCYgb2JqZWN0KQoreworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9
IG9iamVjdC5zdHlsZSgpOworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0
eWxlLT5zdmdTdHlsZSgpOworCisgICAgaWYgKCFvYmplY3QubG9jYWxUcmFuc2Zvcm0oKS5pc0lk
ZW50aXR5KCkpCisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInRyYW5zZm9ybSIsIG9i
amVjdC5sb2NhbFRyYW5zZm9ybSgpKTsKKyAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImltYWdl
IHJlbmRlcmluZyIsIHN2Z1N0eWxlLT5pbWFnZVJlbmRlcmluZygpLCBTVkdSZW5kZXJTdHlsZTo6
aW5pdGlhbEltYWdlUmVuZGVyaW5nKCkpOworICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAib3Bh
Y2l0eSIsIHN0eWxlLT5vcGFjaXR5KCksIFJlbmRlclN0eWxlOjppbml0aWFsT3BhY2l0eSgpKTsK
KyAgICBpZiAob2JqZWN0LmlzU1ZHUGF0aCgpKSB7CisgICAgICAgIGNvbnN0IFJlbmRlclNWR1Bh
dGgmIHBhdGggPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdQYXRoJj4ob2JqZWN0KTsKKyAg
ICAgICAgQVNTRVJUKHBhdGgubm9kZSgpKTsKKyAgICAgICAgQVNTRVJUKHBhdGgubm9kZSgpLT5p
c1NWR0VsZW1lbnQoKSk7CisKKyAgICAgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICAgICAg
aWYgKFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZH
UmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdQYXRo
Kj4oJnBhdGgpLCBwYXRoLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgICAgICBU
ZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKKyAgICAgICAgICAgIHRzIDw8ICIgW3N0cm9rZT17
IiA8PCBzOworICAgICAgICAgICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNlKHRzLCBzdHJva2VQ
YWludGluZ1Jlc291cmNlKTsKKworICAgICAgICAgICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXRoLm5vZGUoKSk7CisgICAgICAgICAgICBkb3VibGUg
ZGFzaE9mZnNldCA9IHN2Z1N0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCkudmFsdWUoZWxlbWVudCk7
CisgICAgICAgICAgICBkb3VibGUgc3Ryb2tlV2lkdGggPSBzdmdTdHlsZS0+c3Ryb2tlV2lkdGgo
KS52YWx1ZShlbGVtZW50KTsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGg+JiBk
YXNoZXMgPSBzdmdTdHlsZS0+c3Ryb2tlRGFzaEFycmF5KCk7CisKKyAgICAgICAgICAgIERhc2hB
cnJheSBkYXNoQXJyYXk7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHTGVuZ3RoPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gZGFzaGVzLmVuZCgpOworICAgICAgICAgICAgZm9yIChWZWN0b3I8
U1ZHTGVuZ3RoPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXNoZXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICAgICAgICAgIGRhc2hBcnJheS5hcHBlbmQoKCppdCkudmFsdWUoZWxl
bWVudCkpOworCisgICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBz
dmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpLCAxLjBmKTsKKyAgICAgICAgICAgIHdyaXRlSWZOb3RE
ZWZhdWx0KHRzLCAic3Ryb2tlIHdpZHRoIiwgc3Ryb2tlV2lkdGgsIDEuMCk7CisgICAgICAgICAg
ICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm1pdGVyIGxpbWl0Iiwgc3ZnU3R5bGUtPnN0cm9rZU1p
dGVyTGltaXQoKSwgNC4wZik7CisgICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImxp
bmUgY2FwIiwgc3ZnU3R5bGUtPmNhcFN0eWxlKCksIEJ1dHRDYXApOworICAgICAgICAgICAgd3Jp
dGVJZk5vdERlZmF1bHQodHMsICJsaW5lIGpvaW4iLCBzdmdTdHlsZS0+am9pblN0eWxlKCksIE1p
dGVySm9pbik7CisgICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImRhc2ggb2Zmc2V0
IiwgZGFzaE9mZnNldCwgMC4wKTsKKyAgICAgICAgICAgIGlmICghZGFzaEFycmF5LmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJkYXNoIGFycmF5Iiwg
ZGFzaEFycmF5KTsKKworICAgICAgICAgICAgdHMgPDwgIn1dIjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJT
VkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdQYXRo
Kj4oJnBhdGgpLCBwYXRoLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgICAgICBU
ZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKKyAgICAgICAgICAgIHRzIDw8ICIgW2ZpbGw9eyIg
PDwgczsKKyAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgZmlsbFBhaW50
aW5nUmVzb3VyY2UpOworCisgICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNp
dHkiLCBzdmdTdHlsZS0+ZmlsbE9wYWNpdHkoKSwgMS4wZik7CisgICAgICAgICAgICB3cml0ZUlm
Tm90RGVmYXVsdCh0cywgImZpbGwgcnVsZSIsIHN2Z1N0eWxlLT5maWxsUnVsZSgpLCBSVUxFX05P
TlpFUk8pOworICAgICAgICAgICAgdHMgPDwgIn1dIjsKKyAgICAgICAgfQorICAgICAgICB3cml0
ZUlmTm90RGVmYXVsdCh0cywgImNsaXAgcnVsZSIsIHN2Z1N0eWxlLT5jbGlwUnVsZSgpLCBSVUxF
X05PTlpFUk8pOworICAgIH0KKworICAgIHdyaXRlSWZOb3RFbXB0eSh0cywgInN0YXJ0IG1hcmtl
ciIsIHN2Z1N0eWxlLT5tYXJrZXJTdGFydFJlc291cmNlKCkpOworICAgIHdyaXRlSWZOb3RFbXB0
eSh0cywgIm1pZGRsZSBtYXJrZXIiLCBzdmdTdHlsZS0+bWFya2VyTWlkUmVzb3VyY2UoKSk7Cisg
ICAgd3JpdGVJZk5vdEVtcHR5KHRzLCAiZW5kIG1hcmtlciIsIHN2Z1N0eWxlLT5tYXJrZXJFbmRS
ZXNvdXJjZSgpKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIHdyaXRlUG9zaXRpb25BbmRTdHls
ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCit7CisgICAgdHMg
PDwgIiAiIDw8IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4ob2JqZWN0KS5hYnNvbHV0ZUNsaXBw
ZWRPdmVyZmxvd1JlY3QoKTsKKyAgICB3cml0ZVN0eWxlKHRzLCBvYmplY3QpOworICAgIHJldHVy
biB0czsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFJlbmRlclNWR1BhdGgmIHBhdGgpCit7CisgICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxl
KHRzLCBwYXRoKTsKKworICAgIEFTU0VSVChwYXRoLm5vZGUoKS0+aXNTVkdFbGVtZW50KCkpOwor
ICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGF0
aC5ub2RlKCkpOworCisgICAgaWYgKHN2Z0VsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnJl
Y3RUYWcpKSB7CisgICAgICAgIFNWR1JlY3RFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHUmVjdEVsZW1lbnQqPihzdmdFbGVtZW50KTsKKyAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWly
KHRzLCAieCIsIGVsZW1lbnQtPngoKS52YWx1ZShlbGVtZW50KSk7CisgICAgICAgIHdyaXRlTmFt
ZVZhbHVlUGFpcih0cywgInkiLCBlbGVtZW50LT55KCkudmFsdWUoZWxlbWVudCkpOworICAgICAg
ICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJ3aWR0aCIsIGVsZW1lbnQtPndpZHRoKCkudmFsdWUo
ZWxlbWVudCkpOworICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJoZWlnaHQiLCBlbGVt
ZW50LT5oZWlnaHQoKS52YWx1ZShlbGVtZW50KSk7CisgICAgfSBlbHNlIGlmIChzdmdFbGVtZW50
LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpsaW5lVGFnKSkgeworICAgICAgICBTVkdMaW5lRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0xpbmVFbGVtZW50Kj4oc3ZnRWxlbWVudCk7Cisg
ICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgIngxIiwgZWxlbWVudC0+eDEoKS52YWx1ZShl
bGVtZW50KSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInkxIiwgZWxlbWVudC0+
eTEoKS52YWx1ZShlbGVtZW50KSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgIngy
IiwgZWxlbWVudC0+eDIoKS52YWx1ZShlbGVtZW50KSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVl
UGFpcih0cywgInkyIiwgZWxlbWVudC0+eTIoKS52YWx1ZShlbGVtZW50KSk7CisgICAgfSBlbHNl
IGlmIChzdmdFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjplbGxpcHNlVGFnKSkgeworICAg
ICAgICBTVkdFbGxpcHNlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsbGlwc2VF
bGVtZW50Kj4oc3ZnRWxlbWVudCk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImN4
IiwgZWxlbWVudC0+Y3goKS52YWx1ZShlbGVtZW50KSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVl
UGFpcih0cywgImN5IiwgZWxlbWVudC0+Y3koKS52YWx1ZShlbGVtZW50KSk7CisgICAgICAgIHdy
aXRlTmFtZVZhbHVlUGFpcih0cywgInJ4IiwgZWxlbWVudC0+cngoKS52YWx1ZShlbGVtZW50KSk7
CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInJ5IiwgZWxlbWVudC0+cnkoKS52YWx1
ZShlbGVtZW50KSk7CisgICAgfSBlbHNlIGlmIChzdmdFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05h
bWVzOjpjaXJjbGVUYWcpKSB7CisgICAgICAgIFNWR0NpcmNsZUVsZW1lbnQqIGVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdDaXJjbGVFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CisgICAgICAgIHdyaXRl
TmFtZVZhbHVlUGFpcih0cywgImN4IiwgZWxlbWVudC0+Y3goKS52YWx1ZShlbGVtZW50KSk7Cisg
ICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImN5IiwgZWxlbWVudC0+Y3koKS52YWx1ZShl
bGVtZW50KSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInIiLCBlbGVtZW50LT5y
KCkudmFsdWUoZWxlbWVudCkpOworICAgIH0gZWxzZSBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6cG9seWdvblRhZykgfHwgc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1l
czo6cG9seWxpbmVUYWcpKSB7CisgICAgICAgIFNWR1BvbHlFbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHUG9seUVsZW1lbnQqPihzdmdFbGVtZW50KTsKKyAgICAgICAgd3JpdGVOYW1l
QW5kUXVvdGVkVmFsdWUodHMsICJwb2ludHMiLCBlbGVtZW50LT5wb2ludExpc3QoKS52YWx1ZUFz
U3RyaW5nKCkpOworICAgIH0gZWxzZSBpZiAoc3ZnRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1l
czo6cGF0aFRhZykpIHsKKyAgICAgICAgU1ZHUGF0aEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdQYXRoRWxlbWVudCo+KHN2Z0VsZW1lbnQpOworICAgICAgICBTdHJpbmcgcGF0aFN0
cmluZzsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzd2l0Y2ggdG8gVW5hbHRlcmVkUGFy
c2luZyBoZXJlIC0gdGhpcyB3aWxsIGFmZmVjdCB0aGUgcGF0aCBkdW1waW5nIG91dHB1dCBvZiBk
b3plbnMgb2YgdGVzdHMuCisgICAgICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpzZWxmKCktPmJ1
aWxkU3RyaW5nRnJvbUJ5dGVTdHJlYW0oZWxlbWVudC0+cGF0aEJ5dGVTdHJlYW0oKSwgcGF0aFN0
cmluZywgTm9ybWFsaXplZFBhcnNpbmcpOworICAgICAgICB3cml0ZU5hbWVBbmRRdW90ZWRWYWx1
ZSh0cywgImRhdGEiLCBwYXRoU3RyaW5nKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRzOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUm9vdCYgcm9vdCkKK3sKKyAg
ICByZXR1cm4gd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCByb290KTsKK30KKworc3RhdGljIHZv
aWQgd3JpdGVSZW5kZXJTVkdUZXh0Qm94KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJCbG9j
ayYgdGV4dCkKK3sKKyAgICBTVkdSb290SW5saW5lQm94KiBib3ggPSBzdGF0aWNfY2FzdDxTVkdS
b290SW5saW5lQm94Kj4odGV4dC5maXJzdFJvb3RCb3goKSk7CisgICAgaWYgKCFib3gpCisgICAg
ICAgIHJldHVybjsKKworICAgIHRzIDw8ICIgYXQgKCIgPDwgdGV4dC54KCkgPDwgIiwiIDw8IHRl
eHQueSgpIDw8ICIpIHNpemUgIiA8PCBib3gtPmxvZ2ljYWxXaWR0aCgpIDw8ICJ4IiA8PCBib3gt
PmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgaGFjaywg
b25jZSB0aGUgbmV3IHRleHQgbGF5b3V0IGVuZ2luZSBpcyBjb21wbGV0bHkgbGFuZGVkLiBXZSB3
YW50IHRvIHByZXNlcnZlIHRoZSBvbGQgbGF5b3V0IHRlc3QgcmVzdWx0cyBmb3Igbm93LgorICAg
IHRzIDw8ICIgY29udGFpbnMgMSBjaHVuayhzKSI7CisKKyAgICBpZiAodGV4dC5wYXJlbnQoKSAm
JiAodGV4dC5wYXJlbnQoKS0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5Q29sb3IpICE9IHRleHQuc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5Q29sb3IpKSkKKyAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiY29sb3IiLCB0ZXh0
LnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5uYW1lKCkp
OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVTVkdJbmxpbmVUZXh0Qm94KFRleHRTdHJl
YW0mIHRzLCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBpbnQgaW5kZW50KQoreworICAgIFZl
Y3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSB0ZXh0Qm94LT50ZXh0RnJhZ21lbnRz
KCk7CisgICAgaWYgKGZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFJlbmRlclNWR0lubGluZVRleHQqIHRleHRSZW5kZXJlciA9IHRvUmVuZGVyU1ZHSW5saW5lVGV4
dCh0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKSk7CisgICAgQVNTRVJUKHRleHRSZW5kZXJlcik7CisK
KyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSB0ZXh0UmVuZGVyZXItPnN0eWxl
KCktPnN2Z1N0eWxlKCk7CisgICAgU3RyaW5nIHRleHQgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIo
KS0+dGV4dCgpOworCisgICAgdW5zaWduZWQgZnJhZ21lbnRzU2l6ZSA9IGZyYWdtZW50cy5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYWdtZW50c1NpemU7ICsraSkgewor
ICAgICAgICBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOworICAg
ICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7CisKKyAgICAgICAgdW5zaWduZWQgc3Rh
cnRPZmZzZXQgPSBmcmFnbWVudC5wb3NpdGlvbkxpc3RPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVk
IGVuZE9mZnNldCA9IGZyYWdtZW50LnBvc2l0aW9uTGlzdE9mZnNldCArIGZyYWdtZW50Lmxlbmd0
aDsKKworICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgaGFjaywgb25jZSB0aGUgbmV3IHRl
eHQgbGF5b3V0IGVuZ2luZSBpcyBjb21wbGV0bHkgbGFuZGVkLiBXZSB3YW50IHRvIHByZXNlcnZl
IHRoZSBvbGQgbGF5b3V0IHRlc3QgcmVzdWx0cyBmb3Igbm93LgorICAgICAgICB0cyA8PCAiY2h1
bmsgMSAiOworICAgICAgICBFVGV4dEFuY2hvciBhbmNob3IgPSBzdmdTdHlsZS0+dGV4dEFuY2hv
cigpOworICAgICAgICBib29sIGlzVmVydGljYWxUZXh0ID0gc3ZnU3R5bGUtPmlzVmVydGljYWxX
cml0aW5nTW9kZSgpOworICAgICAgICBpZiAoYW5jaG9yID09IFRBX01JRERMRSkgeworICAgICAg
ICAgICAgdHMgPDwgIihtaWRkbGUgYW5jaG9yIjsKKyAgICAgICAgICAgIGlmIChpc1ZlcnRpY2Fs
VGV4dCkKKyAgICAgICAgICAgICAgICB0cyA8PCAiLCB2ZXJ0aWNhbCI7CisgICAgICAgICAgICB0
cyA8PCAiKSAiOworICAgICAgICB9IGVsc2UgaWYgKGFuY2hvciA9PSBUQV9FTkQpIHsKKyAgICAg
ICAgICAgIHRzIDw8ICIoZW5kIGFuY2hvciI7CisgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRl
eHQpCisgICAgICAgICAgICAgICAgdHMgPDwgIiwgdmVydGljYWwiOworICAgICAgICAgICAgdHMg
PDwgIikgIjsKKyAgICAgICAgfSBlbHNlIGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAg
IHRzIDw8ICIodmVydGljYWwpICI7CisgICAgICAgIHN0YXJ0T2Zmc2V0IC09IHRleHRCb3gtPnN0
YXJ0KCk7CisgICAgICAgIGVuZE9mZnNldCAtPSB0ZXh0Qm94LT5zdGFydCgpOworICAgICAgICAv
LyA8L2hhY2s+CisKKyAgICAgICAgdHMgPDwgInRleHQgcnVuICIgPDwgaSArIDEgPDwgIiBhdCAo
IiA8PCBmcmFnbWVudC54IDw8ICIsIiA8PCBmcmFnbWVudC55IDw8ICIpIjsKKyAgICAgICAgdHMg
PDwgIiBzdGFydE9mZnNldCAiIDw8IHN0YXJ0T2Zmc2V0IDw8ICIgZW5kT2Zmc2V0ICIgPDwgZW5k
T2Zmc2V0OworICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICB0cyA8PCAi
IGhlaWdodCAiIDw8IGZyYWdtZW50LmhlaWdodDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dHMgPDwgIiB3aWR0aCAiIDw8IGZyYWdtZW50LndpZHRoOworCisgICAgICAgIGlmICghdGV4dEJv
eC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIHx8IHRleHRCb3gtPm1fZGlyT3ZlcnJpZGUpIHsK
KyAgICAgICAgICAgIHRzIDw8ICh0ZXh0Qm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyAi
IExUUiIgOiAiIFJUTCIpOworICAgICAgICAgICAgaWYgKHRleHRCb3gtPm1fZGlyT3ZlcnJpZGUp
CisgICAgICAgICAgICAgICAgdHMgPDwgIiBvdmVycmlkZSI7CisgICAgICAgIH0KKworICAgICAg
ICB0cyA8PCAiOiAiIDw8IHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyh0ZXh0LnN1YnN0cmlu
ZyhmcmFnbWVudC5wb3NpdGlvbkxpc3RPZmZzZXQsIGZyYWdtZW50Lmxlbmd0aCkpIDw8ICJcbiI7
CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVTVkdJbmxpbmVUZXh0Qm94ZXMo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIHRleHQsIGludCBpbmRlbnQpCit7Cisg
ICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSB0ZXh0LmZpcnN0VGV4dEJveCgpOyBib3g7IGJv
eCA9IGJveC0+bmV4dFRleHRCb3goKSkKKyAgICAgICAgd3JpdGVTVkdJbmxpbmVUZXh0Qm94KHRz
LCBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oYm94KSwgaW5kZW50KTsKK30KKworc3Rh
dGljIHZvaWQgd3JpdGVTdGFuZGFyZFByZWZpeChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
T2JqZWN0JiBvYmplY3QsIGludCBpbmRlbnQpCit7CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVu
dCk7CisgICAgdHMgPDwgb2JqZWN0LnJlbmRlck5hbWUoKTsKKworICAgIGlmIChvYmplY3Qubm9k
ZSgpKQorICAgICAgICB0cyA8PCAiIHsiIDw8IG9iamVjdC5ub2RlKCktPm5vZGVOYW1lKCkgPDwg
In0iOworfQorCitzdGF0aWMgdm9pZCB3cml0ZUNoaWxkcmVuKFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSZW5kZXJPYmplY3QmIG9iamVjdCwgaW50IGluZGVudCkKK3sKKyAgICBmb3IgKFJlbmRlck9i
amVjdCogY2hpbGQgPSBvYmplY3QuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgd3JpdGUodHMsICpjaGlsZCwgaW5kZW50ICsgMSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGJvdW5kaW5nQm94TW9kZVN0cmluZyhib29sIGJvdW5k
aW5nQm94TW9kZSkKK3sKKyAgICByZXR1cm4gYm91bmRpbmdCb3hNb2RlID8gIm9iamVjdEJvdW5k
aW5nQm94IiA6ICJ1c2VyU3BhY2VPblVzZSI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0
ZUNvbW1vbkdyYWRpZW50UHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgR3JhZGllbnRTcHJlYWRN
ZXRob2Qgc3ByZWFkTWV0aG9kLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50VHJhbnNm
b3JtLCBib29sIGJvdW5kaW5nQm94TW9kZSkKK3sKKyAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMs
ICJncmFkaWVudFVuaXRzIiwgYm91bmRpbmdCb3hNb2RlU3RyaW5nKGJvdW5kaW5nQm94TW9kZSkp
OworCisgICAgaWYgKHNwcmVhZE1ldGhvZCAhPSBTcHJlYWRNZXRob2RQYWQpCisgICAgICAgIHRz
IDw8ICIgW3NwcmVhZE1ldGhvZD0iIDw8IHNwcmVhZE1ldGhvZCA8PCAiXSI7CisKKyAgICBpZiAo
IWdyYWRpZW50VHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgdHMgPDwgIiBbZ3JhZGll
bnRUcmFuc2Zvcm09IiA8PCBncmFkaWVudFRyYW5zZm9ybSA8PCAiXSI7Cit9CisKK3ZvaWQgd3Jp
dGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0
JiBvYmplY3QsIGludCBpbmRlbnQpCit7CisgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgb2Jq
ZWN0LCBpbmRlbnQpOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihvYmplY3Qubm9kZSgpKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0gZWxlbWVu
dC0+Z2V0SWRBdHRyaWJ1dGUoKTsKKyAgICB3cml0ZU5hbWVBbmRRdW90ZWRWYWx1ZSh0cywgImlk
IiwgaWQpOyAgICAKKworICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSA9
IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4ob2JqZWN0KS50b1JlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyKCk7CisgICAgQVNTRVJUKHJlc291cmNlKTsKKworICAgIGlmIChyZXNvdXJjZS0+cmVz
b3VyY2VUeXBlKCkgPT0gTWFza2VyUmVzb3VyY2VUeXBlKSB7CisgICAgICAgIFJlbmRlclNWR1Jl
c291cmNlTWFza2VyKiBtYXNrZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJjZU1hc2tl
cio+KHJlc291cmNlKTsKKyAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAibWFza1VuaXRz
IiwgbWFza2VyLT5tYXNrVW5pdHMoKSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywg
Im1hc2tDb250ZW50VW5pdHMiLCBtYXNrZXItPm1hc2tDb250ZW50VW5pdHMoKSk7CisgICAgICAg
IHRzIDw8ICJcbiI7CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgfSBlbHNlIGlmIChyZXNvdXJj
ZS0+cmVzb3VyY2VUeXBlKCkgPT0gRmlsdGVyUmVzb3VyY2VUeXBlKSB7CisgICAgICAgIFJlbmRl
clNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcio+KHJlc291cmNlKTsKKyAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiZmls
dGVyVW5pdHMiLCBmaWx0ZXItPmZpbHRlclVuaXRzKCkpOworICAgICAgICB3cml0ZU5hbWVWYWx1
ZVBhaXIodHMsICJwcmltaXRpdmVVbml0cyIsIGZpbHRlci0+cHJpbWl0aXZlVW5pdHMoKSk7Cisg
ICAgICAgIHRzIDw8ICJcbiI7CisgICAgICAgIC8vIENyZWF0aW5nIGEgcGxhY2Vob2xkZXIgZmls
dGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgYnVpbGRlci4KKyAgICAgICAgRmxvYXRSZWN0IGR1
bW15UmVjdDsKKyAgICAgICAgUmVmUHRyPFNWR0ZpbHRlcj4gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0
ZXI6OmNyZWF0ZShBZmZpbmVUcmFuc2Zvcm0oKSwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1bW15
UmVjdCwgdHJ1ZSk7CisgICAgICAgIGlmIChSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRl
ciA9IGZpbHRlci0+YnVpbGRQcmltaXRpdmVzKGR1bW15RmlsdGVyLmdldCgpKSkgeworICAgICAg
ICAgICAgaWYgKEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RFZmZlY3Qo
KSkKKyAgICAgICAgICAgICAgICBsYXN0RWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCBpbmRlbnQgKyAxKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfSBlbHNlIGlmIChyZXNvdXJj
ZS0+cmVzb3VyY2VUeXBlKCkgPT0gQ2xpcHBlclJlc291cmNlVHlwZSkgeworICAgICAgICBSZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIqPihyZXNvdXJjZSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywg
ImNsaXBQYXRoVW5pdHMiLCBjbGlwcGVyLT5jbGlwUGF0aFVuaXRzKCkpOworICAgICAgICB0cyA8
PCAiXG4iOworICAgIH0gZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IE1hcmtl
clJlc291cmNlVHlwZSkgeworICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2Vy
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqPihyZXNvdXJjZSk7CisgICAg
ICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgIm1hcmtlclVuaXRzIiwgbWFya2VyLT5tYXJrZXJV
bml0cygpKTsKKyAgICAgICAgdHMgPDwgIiBbcmVmIGF0ICIgPDwgbWFya2VyLT5yZWZlcmVuY2VQ
b2ludCgpIDw8ICJdIjsKKyAgICAgICAgdHMgPDwgIiBbYW5nbGU9IjsKKyAgICAgICAgaWYgKG1h
cmtlci0+YW5nbGUoKSA9PSAtMSkKKyAgICAgICAgICAgIHRzIDw8ICJhdXRvIiA8PCAiXVxuIjsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHMgPDwgbWFya2VyLT5hbmdsZSgpIDw8ICJdXG4i
OworICAgIH0gZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IFBhdHRlcm5SZXNv
dXJjZVR5cGUpIHsKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuKiBwYXR0ZXJuID0g
c3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuKj4ocmVzb3VyY2UpOworCisgICAg
ICAgIC8vIER1bXAgZmluYWwgcmVzdWx0cyB0aGF0IGFyZSB1c2VkIGZvciByZW5kZXJpbmcuIE5v
IHVzZSBpbiBhc2tpbmcgU1ZHUGF0dGVybkVsZW1lbnQgZm9yIGl0cyBwYXR0ZXJuVW5pdHMoKSwg
YXMgaXQgbWF5CisgICAgICAgIC8vIGxpbmsgdG8gb3RoZXIgcGF0dGVybnMgdXNpbmcgeGxpbms6
aHJlZiwgd2UgbmVlZCB0byBidWlsZCB0aGUgZnVsbCBpbmhlcml0YW5jZSBjaGFpbiwgYWthLiBj
b2xsZWN0UGF0dGVyblByb3BlcnRpZXMoKQorICAgICAgICBQYXR0ZXJuQXR0cmlidXRlcyBhdHRy
aWJ1dGVzOworICAgICAgICBzdGF0aWNfY2FzdDxTVkdQYXR0ZXJuRWxlbWVudCo+KHBhdHRlcm4t
Pm5vZGUoKSktPmNvbGxlY3RQYXR0ZXJuQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKKworICAgICAg
ICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJwYXR0ZXJuVW5pdHMiLCBib3VuZGluZ0JveE1vZGVT
dHJpbmcoYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSkpOworICAgICAgICB3cml0ZU5hbWVW
YWx1ZVBhaXIodHMsICJwYXR0ZXJuQ29udGVudFVuaXRzIiwgYm91bmRpbmdCb3hNb2RlU3RyaW5n
KGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlQ29udGVudCgpKSk7CisKKyAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybSA9IGF0dHJpYnV0ZXMucGF0dGVyblRyYW5zZm9ybSgpOworICAg
ICAgICBpZiAoIXRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgICAgICB0cyA8PCAiIFtw
YXR0ZXJuVHJhbnNmb3JtPSIgPDwgdHJhbnNmb3JtIDw8ICJdIjsKKyAgICAgICAgdHMgPDwgIlxu
IjsKKyAgICB9IGVsc2UgaWYgKHJlc291cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBMaW5lYXJHcmFk
aWVudFJlc291cmNlVHlwZSkgeworICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRp
ZW50KiBncmFkaWVudCA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGll
bnQqPihyZXNvdXJjZSk7CisKKyAgICAgICAgLy8gRHVtcCBmaW5hbCByZXN1bHRzIHRoYXQgYXJl
IHVzZWQgZm9yIHJlbmRlcmluZy4gTm8gdXNlIGluIGFza2luZyBTVkdHcmFkaWVudEVsZW1lbnQg
Zm9yIGl0cyBncmFkaWVudFVuaXRzKCksIGFzIGl0IG1heQorICAgICAgICAvLyBsaW5rIHRvIG90
aGVyIGdyYWRpZW50cyB1c2luZyB4bGluazpocmVmLCB3ZSBuZWVkIHRvIGJ1aWxkIHRoZSBmdWxs
IGluaGVyaXRhbmNlIGNoYWluLCBha2EuIGNvbGxlY3RHcmFkaWVudFByb3BlcnRpZXMoKQorICAg
ICAgICBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQqIGxpbmVhckdyYWRpZW50RWxlbWVudCA9IHN0
YXRpY19jYXN0PFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCo+KGdyYWRpZW50LT5ub2RlKCkpOwor
CisgICAgICAgIExpbmVhckdyYWRpZW50QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgICAgICBs
aW5lYXJHcmFkaWVudEVsZW1lbnQtPmNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMoYXR0cmlidXRl
cyk7CisgICAgICAgIHdyaXRlQ29tbW9uR3JhZGllbnRQcm9wZXJ0aWVzKHRzLCBhdHRyaWJ1dGVz
LnNwcmVhZE1ldGhvZCgpLCBhdHRyaWJ1dGVzLmdyYWRpZW50VHJhbnNmb3JtKCksIGF0dHJpYnV0
ZXMuYm91bmRpbmdCb3hNb2RlKCkpOworCisgICAgICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludDsK
KyAgICAgICAgRmxvYXRQb2ludCBlbmRQb2ludDsKKyAgICAgICAgbGluZWFyR3JhZGllbnRFbGVt
ZW50LT5jYWxjdWxhdGVTdGFydEVuZFBvaW50cyhhdHRyaWJ1dGVzLCBzdGFydFBvaW50LCBlbmRQ
b2ludCk7CisKKyAgICAgICAgdHMgPDwgIiBbc3RhcnQ9IiA8PCBzdGFydFBvaW50IDw8ICJdIFtl
bmQ9IiA8PCBlbmRQb2ludCA8PCAiXVxuIjsKKyAgICB9ICBlbHNlIGlmIChyZXNvdXJjZS0+cmVz
b3VyY2VUeXBlKCkgPT0gUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGUpIHsKKyAgICAgICAgUmVu
ZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudCogZ3JhZGllbnQgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Kj4ocmVzb3VyY2UpOworCisgICAgICAgIC8vIER1
bXAgZmluYWwgcmVzdWx0cyB0aGF0IGFyZSB1c2VkIGZvciByZW5kZXJpbmcuIE5vIHVzZSBpbiBh
c2tpbmcgU1ZHR3JhZGllbnRFbGVtZW50IGZvciBpdHMgZ3JhZGllbnRVbml0cygpLCBhcyBpdCBt
YXkKKyAgICAgICAgLy8gbGluayB0byBvdGhlciBncmFkaWVudHMgdXNpbmcgeGxpbms6aHJlZiwg
d2UgbmVlZCB0byBidWlsZCB0aGUgZnVsbCBpbmhlcml0YW5jZSBjaGFpbiwgYWthLiBjb2xsZWN0
R3JhZGllbnRQcm9wZXJ0aWVzKCkKKyAgICAgICAgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50KiBy
YWRpYWxHcmFkaWVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdSYWRpYWxHcmFkaWVudEVsZW1l
bnQqPihncmFkaWVudC0+bm9kZSgpKTsKKworICAgICAgICBSYWRpYWxHcmFkaWVudEF0dHJpYnV0
ZXMgYXR0cmlidXRlczsKKyAgICAgICAgcmFkaWFsR3JhZGllbnRFbGVtZW50LT5jb2xsZWN0R3Jh
ZGllbnRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOworICAgICAgICB3cml0ZUNvbW1vbkdyYWRpZW50
UHJvcGVydGllcyh0cywgYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSwgYXR0cmlidXRlcy5ncmFk
aWVudFRyYW5zZm9ybSgpLCBhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsKKworICAgICAg
ICBGbG9hdFBvaW50IGZvY2FsUG9pbnQ7CisgICAgICAgIEZsb2F0UG9pbnQgY2VudGVyUG9pbnQ7
CisgICAgICAgIGZsb2F0IHJhZGl1czsKKyAgICAgICAgcmFkaWFsR3JhZGllbnRFbGVtZW50LT5j
YWxjdWxhdGVGb2NhbENlbnRlclBvaW50c0FuZFJhZGl1cyhhdHRyaWJ1dGVzLCBmb2NhbFBvaW50
LCBjZW50ZXJQb2ludCwgcmFkaXVzKTsKKworICAgICAgICB0cyA8PCAiIFtjZW50ZXI9IiA8PCBj
ZW50ZXJQb2ludCA8PCAiXSBbZm9jYWw9IiA8PCBmb2NhbFBvaW50IDw8ICJdIFtyYWRpdXM9IiA8
PCByYWRpdXMgPDwgIl1cbiI7CisgICAgfSBlbHNlCisgICAgICAgIHRzIDw8ICJcbiI7CisgICAg
d3JpdGVDaGlsZHJlbih0cywgb2JqZWN0LCBpbmRlbnQpOworfQorCit2b2lkIHdyaXRlU1ZHQ29u
dGFpbmVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIGNvbnRhaW5lciwgaW50
IGluZGVudCkKK3sKKyAgICAvLyBDdXJyZW50bHkgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmlt
aXRpdmUgaGFzIG5vIG1lYW5pbmdmdWwgb3V0cHV0LgorICAgIGlmIChjb250YWluZXIuaXNTVkdS
ZXNvdXJjZUZpbHRlclByaW1pdGl2ZSgpKQorICAgICAgICByZXR1cm47CisgICAgd3JpdGVTdGFu
ZGFyZFByZWZpeCh0cywgY29udGFpbmVyLCBpbmRlbnQpOworICAgIHdyaXRlUG9zaXRpb25BbmRT
dHlsZSh0cywgY29udGFpbmVyKTsKKyAgICB0cyA8PCAiXG4iOworICAgIHdyaXRlUmVzb3VyY2Vz
KHRzLCBjb250YWluZXIsIGluZGVudCk7CisgICAgd3JpdGVDaGlsZHJlbih0cywgY29udGFpbmVy
LCBpbmRlbnQpOworfQorCit2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJT
VkdSb290JiByb290LCBpbnQgaW5kZW50KQoreworICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMs
IHJvb3QsIGluZGVudCk7CisgICAgdHMgPDwgcm9vdCA8PCAiXG4iOworICAgIHdyaXRlQ2hpbGRy
ZW4odHMsIHJvb3QsIGluZGVudCk7Cit9CisKK3ZvaWQgd3JpdGVTVkdUZXh0KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBSZW5kZXJCbG9jayYgdGV4dCwgaW50IGluZGVudCkKK3sKKyAgICB3cml0ZVN0
YW5kYXJkUHJlZml4KHRzLCB0ZXh0LCBpbmRlbnQpOworICAgIHdyaXRlUmVuZGVyU1ZHVGV4dEJv
eCh0cywgdGV4dCk7CisgICAgdHMgPDwgIlxuIjsKKyAgICB3cml0ZVJlc291cmNlcyh0cywgdGV4
dCwgaW5kZW50KTsKKyAgICB3cml0ZUNoaWxkcmVuKHRzLCB0ZXh0LCBpbmRlbnQpOworfQorCit2
b2lkIHdyaXRlU1ZHSW5saW5lVGV4dChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyVGV4dCYg
dGV4dCwgaW50IGluZGVudCkKK3sKKyAgICB3cml0ZVN0YW5kYXJkUHJlZml4KHRzLCB0ZXh0LCBp
bmRlbnQpOworCisgICAgLy8gV2h5IG5vdCBqdXN0IGxpbmVzQm91bmRpbmdCb3goKT8KKyAgICB0
cyA8PCAiICIgPDwgRmxvYXRSZWN0KHRleHQuZmlyc3RSdW5PcmlnaW4oKSwgdGV4dC5saW5lc0Jv
dW5kaW5nQm94KCkuc2l6ZSgpKSA8PCAiXG4iOworICAgIHdyaXRlUmVzb3VyY2VzKHRzLCB0ZXh0
LCBpbmRlbnQpOworICAgIHdyaXRlU1ZHSW5saW5lVGV4dEJveGVzKHRzLCB0ZXh0LCBpbmRlbnQp
OworfQorCit2b2lkIHdyaXRlU1ZHSW1hZ2UoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNW
R0ltYWdlJiBpbWFnZSwgaW50IGluZGVudCkKK3sKKyAgICB3cml0ZVN0YW5kYXJkUHJlZml4KHRz
LCBpbWFnZSwgaW5kZW50KTsKKyAgICB3cml0ZVBvc2l0aW9uQW5kU3R5bGUodHMsIGltYWdlKTsK
KyAgICB0cyA8PCAiXG4iOworICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBpbWFnZSwgaW5kZW50KTsK
K30KKwordm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUGF0aCYgcGF0
aCwgaW50IGluZGVudCkKK3sKKyAgICB3cml0ZVN0YW5kYXJkUHJlZml4KHRzLCBwYXRoLCBpbmRl
bnQpOworICAgIHRzIDw8IHBhdGggPDwgIlxuIjsKKyAgICB3cml0ZVJlc291cmNlcyh0cywgcGF0
aCwgaW5kZW50KTsKK30KKwordm9pZCB3cml0ZVNWR0dyYWRpZW50U3RvcChUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyU1ZHR3JhZGllbnRTdG9wJiBzdG9wLCBpbnQgaW5kZW50KQoreworICAg
IHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHN0b3AsIGluZGVudCk7CisKKyAgICBTVkdTdG9wRWxl
bWVudCogc3RvcEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdG9wRWxlbWVudCo+KHN0b3Aubm9k
ZSgpKTsKKyAgICBBU1NFUlQoc3RvcEVsZW1lbnQpOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gc3RvcC5zdHlsZSgpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAg
IHRzIDw8ICIgW29mZnNldD0iIDw8IHN0b3BFbGVtZW50LT5vZmZzZXQoKSA8PCAiXSBbY29sb3I9
IiA8PCBzdG9wRWxlbWVudC0+c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSgpIDw8ICJdXG4iOwor
fQorCit2b2lkIHdyaXRlUmVzb3VyY2VzKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmpl
Y3QmIG9iamVjdCwgaW50IGluZGVudCkKK3sKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUg
PSBvYmplY3Quc3R5bGUoKTsKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBz
dHlsZS0+c3ZnU3R5bGUoKTsKKworICAgIC8vIEZJWE1FOiBXZSB3YW50IHRvIHVzZSBTVkdSZXNv
dXJjZXNDYWNoZSB0byBkZXRlcm1pbmUgd2hpY2ggcmVzb3VyY2VzIGFyZSBwcmVzZW50LCBpbnN0
ZWFkIG9mIHF1ZXJpbmcgdGhlIHJlc291cmNlIDwtPiBpZCBjYWNoZS4KKyAgICAvLyBGb3Igbm93
IGxlYXZlIHRoZSBEUlQgb3V0cHV0IGFzIGlzLCBidXQgbGF0ZXIgb24gd2Ugc2hvdWxkIGNoYW5n
ZSB0aGlzIHNvIGN5Y2xlcyBhcmUgcHJvcGVybHkgaWdub3JlZCBpbiB0aGUgRFJUIG91dHB1dC4K
KyAgICBSZW5kZXJPYmplY3QmIHJlbmRlcmVyID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QmPihv
YmplY3QpOworICAgIGlmICghc3ZnU3R5bGUtPm1hc2tlclJlc291cmNlKCkuaXNFbXB0eSgpKSB7
CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciogbWFza2VyID0gZ2V0UmVuZGVy
U1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlTWFza2VyPihvYmplY3QuZG9jdW1lbnQo
KSwgc3ZnU3R5bGUtPm1hc2tlclJlc291cmNlKCkpKSB7CisgICAgICAgICAgICB3cml0ZUluZGVu
dCh0cywgaW5kZW50KTsKKyAgICAgICAgICAgIHRzIDw8ICIgIjsKKyAgICAgICAgICAgIHdyaXRl
TmFtZUFuZFF1b3RlZFZhbHVlKHRzLCAibWFza2VyIiwgc3ZnU3R5bGUtPm1hc2tlclJlc291cmNl
KCkpOworICAgICAgICAgICAgdHMgPDwgIiAiOworICAgICAgICAgICAgd3JpdGVTdGFuZGFyZFBy
ZWZpeCh0cywgKm1hc2tlciwgMCk7CisgICAgICAgICAgICB0cyA8PCAiICIgPDwgbWFza2VyLT5y
ZXNvdXJjZUJvdW5kaW5nQm94KCZyZW5kZXJlcikgPDwgIlxuIjsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAoIXN2Z1N0eWxlLT5jbGlwcGVyUmVzb3VyY2UoKS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgaWYgKFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBlciA9IGdldFJlbmRlclNWR1Jl
c291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI+KG9iamVjdC5kb2N1bWVudCgpLCBz
dmdTdHlsZS0+Y2xpcHBlclJlc291cmNlKCkpKSB7CisgICAgICAgICAgICB3cml0ZUluZGVudCh0
cywgaW5kZW50KTsKKyAgICAgICAgICAgIHRzIDw8ICIgIjsKKyAgICAgICAgICAgIHdyaXRlTmFt
ZUFuZFF1b3RlZFZhbHVlKHRzLCAiY2xpcFBhdGgiLCBzdmdTdHlsZS0+Y2xpcHBlclJlc291cmNl
KCkpOworICAgICAgICAgICAgdHMgPDwgIiAiOworICAgICAgICAgICAgd3JpdGVTdGFuZGFyZFBy
ZWZpeCh0cywgKmNsaXBwZXIsIDApOworICAgICAgICAgICAgdHMgPDwgIiAiIDw8IGNsaXBwZXIt
PnJlc291cmNlQm91bmRpbmdCb3goJnJlbmRlcmVyKSA8PCAiXG4iOworICAgICAgICB9CisgICAg
fQorI2lmIEVOQUJMRShGSUxURVJTKQorICAgIGlmICghc3ZnU3R5bGUtPmZpbHRlclJlc291cmNl
KCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciogZmls
dGVyID0gZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jlc291cmNlRmlsdGVyPihv
YmplY3QuZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRlclJlc291cmNlKCkpKSB7CisgICAgICAg
ICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICAgICAgICAgIHRzIDw8ICIgIjsKKyAg
ICAgICAgICAgIHdyaXRlTmFtZUFuZFF1b3RlZFZhbHVlKHRzLCAiZmlsdGVyIiwgc3ZnU3R5bGUt
PmZpbHRlclJlc291cmNlKCkpOworICAgICAgICAgICAgdHMgPDwgIiAiOworICAgICAgICAgICAg
d3JpdGVTdGFuZGFyZFByZWZpeCh0cywgKmZpbHRlciwgMCk7CisgICAgICAgICAgICB0cyA8PCAi
ICIgPDwgZmlsdGVyLT5yZXNvdXJjZUJvdW5kaW5nQm94KCZyZW5kZXJlcikgPDwgIlxuIjsKKyAg
ICAgICAgfQorICAgIH0KKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDc1MzQ3KQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oOjc1MzQ3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTVkdS
ZW5kZXJUcmVlQXNUZXh0X2gKKyNkZWZpbmUgU1ZHUmVuZGVyVHJlZUFzVGV4dF9oCisKKyNpZiBF
TkFCTEUoU1ZHKQorCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENvbG9yOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgRmxvYXRTaXplOwor
Y2xhc3MgTm9kZTsKK2NsYXNzIFJlbmRlckJsb2NrOworY2xhc3MgUmVuZGVySW1hZ2U7CitjbGFz
cyBSZW5kZXJPYmplY3Q7CitjbGFzcyBSZW5kZXJTVkdHcmFkaWVudFN0b3A7CitjbGFzcyBSZW5k
ZXJTVkdJbWFnZTsKK2NsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBSZW5kZXJTVkdSb290Owor
Y2xhc3MgUmVuZGVyVGV4dDsKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIFNWR1VuaXRU
eXBlczsKKworLy8gZnVuY3Rpb25zIHVzZWQgYnkgdGhlIG1haW4gUmVuZGVyVHJlZUFzVGV4dCBj
b2RlCit2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdQYXRoJiwgaW50IGlu
ZGVudCk7Cit2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdSb290JiwgaW50
IGluZGVudCk7Cit2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFRleHRTdHJlYW0mLCBjb25zdCBS
ZW5kZXJTVkdHcmFkaWVudFN0b3AmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGVTVkdSZXNvdXJj
ZUNvbnRhaW5lcihUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyT2JqZWN0JiwgaW50IGluZGVudCk7
Cit2b2lkIHdyaXRlU1ZHQ29udGFpbmVyKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJPYmplY3Qm
LCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGVTVkdJbWFnZShUZXh0U3RyZWFtJiwgY29uc3QgUmVu
ZGVyU1ZHSW1hZ2UmLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3JpdGVTVkdJbmxpbmVUZXh0KFRleHRT
dHJlYW0mLCBjb25zdCBSZW5kZXJUZXh0JiwgaW50IGluZGVudCk7Cit2b2lkIHdyaXRlU1ZHVGV4
dChUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyQmxvY2smLCBpbnQgaW5kZW50KTsKK3ZvaWQgd3Jp
dGVSZXNvdXJjZXMoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlck9iamVjdCYsIGludCBpbmRlbnQp
OworCisvLyBoZWxwZXIgb3BlcmF0b3JzIGRlZmluZWQgdXNlZCBpbiB2YXJpb3VzIGNsYXNzZXMg
dG8gZHVtcCB0aGUgcmVuZGVyIHRyZWUuCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYsIGNvbnN0IENvbG9yJik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBjb25zdCBGbG9hdFJlY3QmKTsKKworLy8gaGVscGVyIG9wZXJhdG9ycyBzcGVjaWZpYyB0
byBkdW1waW5nIHRoZSByZW5kZXIgdHJlZS4gdGhlc2UgYXJlIHVzZWQgaW4gdmFyaW91cyBjbGFz
c2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0cmVlCisvLyB0aGVzZSBjb3VsZCBiZSBkZWZpbmVkIGlu
IHNlcGFyYXRlIG5hbWVzcGFjZSB0byBhdm9pZCBtYXRjaGluZyB0aGVzZSBnZW5lcmljIHNpZ25h
dHVyZXMgdW5pbnRlbnRpb25hbGx5LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVtPgorVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVmVjdG9yPEl0ZW0qPiYgdikK
K3sKKyAgICB0cyA8PCAiWyI7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdi5zaXpl
KCk7IGkrKykgeworICAgICAgICB0cyA8PCAqdltpXTsKKyAgICAgICAgaWYgKGkgPCB2LnNpemUo
KSAtIDEpCisgICAgICAgICAgICB0cyA8PCAiLCAiOworICAgIH0KKworICAgIHRzIDw8ICJdIjsK
KyAgICByZXR1cm4gdHM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBvaW50ZXI+CitUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBQb2ludGVyKiB0KQoreworICAgIHRzIDw8
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHQpOworICAgIHJldHVybiB0czsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKworI2VuZGlmIC8v
IFNWR1JlbmRlclRyZWVBc1RleHRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZXNvdXJjZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAkocmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXMuY3BwOjc1MzQ3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
Njg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U1ZHUmVzb3VyY2VzLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUg
IlNWR1BhaW50LmgiCisjaW5jbHVkZSAiU1ZHUGF0dGVybkVsZW1lbnQuaCIKKyNpbmNsdWRlICJT
VkdSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1NWR1Jlc291cmNlczo6U1ZHUmVzb3VyY2VzKCkKKyAgICA6IG1fY2xp
cHBlckZpbHRlck1hc2tlckRhdGEoMCkKKyAgICAsIG1fbWFya2VyRGF0YSgwKQorICAgICwgbV9m
aWxsU3Ryb2tlRGF0YSgwKQorICAgICwgbV9saW5rZWRSZXNvdXJjZSgwKQoreworfQorCitzdGF0
aWMgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+LCBz
X3RhZ0xpc3QsICgpKTsKKyAgICBpZiAoc190YWdMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAv
LyAiY29udGFpbmVyIGVsZW1lbnRzIjogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8u
aHRtbCNUZXJtQ29udGFpbmVyRWxlbWVudAorICAgICAgICAvLyAiZ3JhcGhpY3MgZWxlbWVudHMi
IDogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8uaHRtbCNUZXJtR3JhcGhpY3NFbGVt
ZW50CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmFUYWcubG9jYWxOYW1lKCkuaW1w
bCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6Y2lyY2xlVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmVsbGlwc2VUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6Z2x5
cGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1l
czo6Z1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05h
bWVzOjppbWFnZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRk
KFNWR05hbWVzOjpsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlz
dC5hZGQoU1ZHTmFtZXM6Om1hcmtlclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBz
X3RhZ0xpc3QuYWRkKFNWR05hbWVzOjptYXNrVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAg
ICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6Om1pc3NpbmdfZ2x5cGhUYWcubG9jYWxOYW1lKCku
aW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6cGF0aFRhZy5sb2NhbE5h
bWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpwb2x5Z29uVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnBv
bHlsaW5lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZH
TmFtZXM6OnJlY3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFk
ZChTVkdOYW1lczo6c3ZnVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlz
dC5hZGQoU1ZHTmFtZXM6OnRleHRUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190
YWdMaXN0LmFkZChTVkdOYW1lczo6dXNlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisKKyAgICAg
ICAgLy8gTm90IGxpc3RlZCBpbiB0aGUgZGVmaW5pdGlvbnMgaXMgdGhlIGNsaXBQYXRoIGVsZW1l
bnQsIHRoZSBTVkcgc3BlYyBzYXlzIHRob3VnaDoKKyAgICAgICAgLy8gVGhlICJjbGlwUGF0aCIg
ZWxlbWVudCBvciBhbnkgb2YgaXRzIGNoaWxkcmVuIGNhbiBzcGVjaWZ5IHByb3BlcnR5ICJjbGlw
LXBhdGgiLgorICAgICAgICAvLyBTbyB3ZSBoYXZlIHRvIGFkZCBjbGlwUGF0aFRhZyBoZXJlLCBv
dGhlcndoaXNlIGNsaXAtcGF0aCBvbiBjbGlwUGF0aCB3aWxsIGZhaWwuCisgICAgICAgIC8vIChB
bHJlYWR5IG1haWxlZCBTVkcgV0csIHdhaXRpbmcgZm9yIGEgc29sdXRpb24pCisgICAgICAgIHNf
dGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmNsaXBQYXRoVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisK
KyAgICAgICAgLy8gTm90IGxpc3RlZCBpbiB0aGUgZGVmaW5pdGlvbnMgYXJlIHRoZSB0ZXh0IGNv
bnRlbnQgZWxlbWVudHMsIHRob3VnaCBmaWx0ZXIvY2xpcHBlci9tYXNrZXIgb24gdHNwYW4vdGV4
dC8uLiBpcyBhbGxvd2VkLgorICAgICAgICAvLyAoQWxyZWFkeSBtYWlsZWQgU1ZHIFdHLCB3YWl0
aW5nIGZvciBhIHNvbHV0aW9uKQorICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjphbHRH
bHlwaFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05h
bWVzOjp0ZXh0UGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3Qu
YWRkKFNWR05hbWVzOjp0cmVmVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFn
TGlzdC5hZGQoU1ZHTmFtZXM6OnRzcGFuVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisKKyAgICAg
ICAgLy8gRWxlbWVudHMgdGhhdCB3ZSBpZ25vcmUsIGFzIGl0IGRvZXNuJ3QgbWFrZSBhbnkgc2Vu
c2UuCisgICAgICAgIC8vIGRlZnMsIHBhdHRlcm4sIHN3aXRjaCAoRklYTUU6IE1haWwgU1ZHIFdH
IGFib3V0IHRoZXNlKQorICAgICAgICAvLyBzeW1ib2wgKGlzIGNvbnZlcnRlZCB0byBhIHN2ZyBl
bGVtZW50LCB3aGVuIHJlZmVyZW5jZWQgYnkgdXNlLCB3ZSBjYW4gc2FmZWx5IGlnbm9yZSBpdC4p
CisgICAgfQorCisgICAgcmV0dXJuIHNfdGFnTGlzdDsKK30KKworc3RhdGljIEhhc2hTZXQ8QXRv
bWljU3RyaW5nSW1wbCo+JiBtYXJrZXJUYWdzKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+LCBzX3RhZ0xpc3QsICgpKTsKKyAgICBpZiAoc190
YWdMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpsaW5l
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6
OnBhdGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChTVkdO
YW1lczo6cG9seWdvblRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3Qu
YWRkKFNWR05hbWVzOjpwb2x5bGluZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgIH0KKwor
ICAgIHJldHVybiBzX3RhZ0xpc3Q7Cit9CisKK3N0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZ0lt
cGwqPiYgZmlsbEFuZFN0cm9rZVRhZ3MoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFz
aFNldDxBdG9taWNTdHJpbmdJbXBsKj4sIHNfdGFnTGlzdCwgKCkpOworICAgIGlmIChzX3RhZ0xp
c3QuaXNFbXB0eSgpKSB7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmFsdEdseXBo
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6
OmNpcmNsZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNW
R05hbWVzOjplbGxpcHNlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlz
dC5hZGQoU1ZHTmFtZXM6OmxpbmVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190
YWdMaXN0LmFkZChTVkdOYW1lczo6cGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAg
ICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjpwb2x5Z29uVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7
CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnBvbHlsaW5lVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OnJlY3RUYWcubG9jYWxO
YW1lKCkuaW1wbCgpKTsKKyAgICAgICAgc190YWdMaXN0LmFkZChTVkdOYW1lczo6dGV4dFRhZy5s
b2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05hbWVzOjp0ZXh0
UGF0aFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRkKFNWR05h
bWVzOjp0cmVmVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQo
U1ZHTmFtZXM6OnRzcGFuVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHNfdGFnTGlzdDsKK30KKworc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBj
aGFpbmFibGVSZXNvdXJjZVRhZ3MoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNl
dDxBdG9taWNTdHJpbmdJbXBsKj4sIHNfdGFnTGlzdCwgKCkpOworICAgIGlmIChzX3RhZ0xpc3Qu
aXNFbXB0eSgpKSB7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFtZXM6OmxpbmVhckdyYWRp
ZW50VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFnTGlzdC5hZGQoU1ZHTmFt
ZXM6OmZpbHRlclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBzX3RhZ0xpc3QuYWRk
KFNWR05hbWVzOjpwYXR0ZXJuVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHNfdGFn
TGlzdC5hZGQoU1ZHTmFtZXM6OnJhZGlhbEdyYWRpZW50VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7
CisgICAgfQorCisgICAgcmV0dXJuIHNfdGFnTGlzdDsKK30KKworc3RhdGljIGlubGluZSBTdHJp
bmcgdGFyZ2V0UmVmZXJlbmNlRnJvbVJlc291cmNlKFNWR0VsZW1lbnQqIGVsZW1lbnQpCit7Cisg
ICAgU3RyaW5nIHRhcmdldDsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6
cGF0dGVyblRhZykpCisgICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PFNWR1BhdHRlcm5FbGVt
ZW50Kj4oZWxlbWVudCktPmhyZWYoKTsKKyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1l
KFNWR05hbWVzOjpsaW5lYXJHcmFkaWVudFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShTVkdO
YW1lczo6cmFkaWFsR3JhZGllbnRUYWcpKQorICAgICAgICB0YXJnZXQgPSBzdGF0aWNfY2FzdDxT
VkdHcmFkaWVudEVsZW1lbnQqPihlbGVtZW50KS0+aHJlZigpOworI2lmIEVOQUJMRShGSUxURVJT
KQorICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZpbHRlclRhZykp
CisgICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQqPihlbGVtZW50
KS0+aHJlZigpOworI2VuZGlmCisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKworICAgIHJldHVybiBTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldCh0YXJnZXQpOworfQor
CitzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBwYWludGluZ1Jlc291
cmNlRnJvbVNWR1BhaW50KERvY3VtZW50KiBkb2N1bWVudCwgU1ZHUGFpbnQqIHBhaW50LCBBdG9t
aWNTdHJpbmcmIGlkLCBib29sJiBoYXNQZW5kaW5nUmVzb3VyY2UpCit7CisgICAgQVNTRVJUKHBh
aW50KTsKKworICAgIFNWR1BhaW50OjpTVkdQYWludFR5cGUgcGFpbnRUeXBlID0gcGFpbnQtPnBh
aW50VHlwZSgpOworICAgIGlmIChwYWludFR5cGUgIT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVf
VVJJICYmIHBhaW50VHlwZSAhPSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfUkdCQ09MT1Ip
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWQgPSBTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdl
dChwYWludC0+dXJpKCkpOworICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBjb250YWlu
ZXIgPSBnZXRSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lckJ5SWQoZG9jdW1lbnQsIGlkKTsKKyAg
ICBpZiAoIWNvbnRhaW5lcikgeworICAgICAgICBoYXNQZW5kaW5nUmVzb3VyY2UgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVz
b3VyY2VUeXBlID0gY29udGFpbmVyLT5yZXNvdXJjZVR5cGUoKTsKKyAgICBpZiAocmVzb3VyY2VU
eXBlICE9IFBhdHRlcm5SZXNvdXJjZVR5cGUgJiYgcmVzb3VyY2VUeXBlICE9IExpbmVhckdyYWRp
ZW50UmVzb3VyY2VUeXBlICYmIHJlc291cmNlVHlwZSAhPSBSYWRpYWxHcmFkaWVudFJlc291cmNl
VHlwZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UoU1ZHRG9jdW1lbnRFeHRl
bnNpb25zKiBleHRlbnNpb25zLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBTVkdFbGVtZW50KiBl
bGVtZW50KQoreworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBpZiAoIWVsZW1lbnQtPmlzU3R5
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGV4dGVuc2lvbnMtPmFkZFBlbmRpbmdSZXNv
dXJjZShpZCwgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpKTsKK30KKwor
Ym9vbCBTVkdSZXNvdXJjZXM6OmJ1aWxkQ2FjaGVkUmVzb3VyY2VzKGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUpCit7CisgICAgQVNTRVJUKG9i
amVjdCk7CisgICAgQVNTRVJUKHN0eWxlKTsKKworICAgIE5vZGUqIG5vZGUgPSBvYmplY3QtPm5v
ZGUoKTsKKyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKG5vZGUtPmlzU1ZHRWxlbWVudCgp
KTsKKworICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4o
bm9kZSk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBvYmplY3QtPmRvY3VtZW50KCk7CisgICAgQVNTRVJUKGRvY3Vt
ZW50KTsKKworICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGRvY3VtZW50
LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7CisgICAgQVNTRVJUKGV4dGVuc2lvbnMpOworCisgICAg
QXRvbWljU3RyaW5nSW1wbCogdGFnTmFtZUltcGwgPSBlbGVtZW50LT50YWdRTmFtZSgpLmxvY2Fs
TmFtZSgpLmltcGwoKTsKKyAgICBpZiAoIXRhZ05hbWVJbXBsKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBib29sIGZvdW5kUmVzb3VyY2VzID0gZmFsc2U7CisgICAgaWYgKGNsaXBwZXJG
aWx0ZXJNYXNrZXJUYWdzKCkuY29udGFpbnModGFnTmFtZUltcGwpKSB7CisgICAgICAgIGlmIChz
dHlsZS0+aGFzQ2xpcHBlcigpKSB7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgaWQoc3R5bGUt
PmNsaXBwZXJSZXNvdXJjZSgpKTsKKyAgICAgICAgICAgIGlmIChzZXRDbGlwcGVyKGdldFJlbmRl
clNWR1Jlc291cmNlQnlJZDxSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI+KGRvY3VtZW50LCBpZCkp
KQorICAgICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShleHRlbnNpb25zLCBp
ZCwgZWxlbWVudCk7CisgICAgICAgIH0KKworI2lmIEVOQUJMRShGSUxURVJTKQorICAgICAgICBp
ZiAoc3R5bGUtPmhhc0ZpbHRlcigpKSB7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgaWQoc3R5
bGUtPmZpbHRlclJlc291cmNlKCkpOworICAgICAgICAgICAgaWYgKHNldEZpbHRlcihnZXRSZW5k
ZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KGRvY3VtZW50LCBpZCkp
KQorICAgICAgICAgICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShleHRlbnNpb25zLCBp
ZCwgZWxlbWVudCk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGlmIChzdHlsZS0+aGFz
TWFza2VyKCkpIHsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBpZChzdHlsZS0+bWFza2VyUmVz
b3VyY2UoKSk7CisgICAgICAgICAgICBpZiAoc2V0TWFza2VyKGdldFJlbmRlclNWR1Jlc291cmNl
QnlJZDxSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcj4oZG9jdW1lbnQsIGlkKSkpCisgICAgICAgICAg
ICAgICAgZm91bmRSZXNvdXJjZXMgPSB0cnVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKGV4dGVuc2lvbnMsIGlkLCBlbGVtZW50KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtYXJrZXJUYWdzKCkuY29udGFpbnModGFnTmFt
ZUltcGwpICYmIHN0eWxlLT5oYXNNYXJrZXJzKCkpIHsKKyAgICAgICAgQXRvbWljU3RyaW5nIG1h
cmtlclN0YXJ0SWQoc3R5bGUtPm1hcmtlclN0YXJ0UmVzb3VyY2UoKSk7CisgICAgICAgIGlmIChz
ZXRNYXJrZXJTdGFydChnZXRSZW5kZXJTVkdSZXNvdXJjZUJ5SWQ8UmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXI+KGRvY3VtZW50LCBtYXJrZXJTdGFydElkKSkpCisgICAgICAgICAgICBmb3VuZFJlc291
cmNlcyA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlZ2lzdGVyUGVuZGluZ1Jl
c291cmNlKGV4dGVuc2lvbnMsIG1hcmtlclN0YXJ0SWQsIGVsZW1lbnQpOworCisgICAgICAgIEF0
b21pY1N0cmluZyBtYXJrZXJNaWRJZChzdHlsZS0+bWFya2VyTWlkUmVzb3VyY2UoKSk7CisgICAg
ICAgIGlmIChzZXRNYXJrZXJNaWQoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNWR1Jl
c291cmNlTWFya2VyPihkb2N1bWVudCwgbWFya2VyTWlkSWQpKSkKKyAgICAgICAgICAgIGZvdW5k
UmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVnaXN0ZXJQZW5k
aW5nUmVzb3VyY2UoZXh0ZW5zaW9ucywgbWFya2VyTWlkSWQsIGVsZW1lbnQpOworCisgICAgICAg
IEF0b21pY1N0cmluZyBtYXJrZXJFbmRJZChzdHlsZS0+bWFya2VyRW5kUmVzb3VyY2UoKSk7Cisg
ICAgICAgIGlmIChzZXRNYXJrZXJFbmQoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VCeUlkPFJlbmRlclNW
R1Jlc291cmNlTWFya2VyPihkb2N1bWVudCwgbWFya2VyRW5kSWQpKSkKKyAgICAgICAgICAgIGZv
dW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVnaXN0ZXJQ
ZW5kaW5nUmVzb3VyY2UoZXh0ZW5zaW9ucywgbWFya2VyRW5kSWQsIGVsZW1lbnQpOworICAgIH0K
KworICAgIGlmIChmaWxsQW5kU3Ryb2tlVGFncygpLmNvbnRhaW5zKHRhZ05hbWVJbXBsKSkgewor
ICAgICAgICBpZiAoc3R5bGUtPmhhc0ZpbGwoKSkgeworICAgICAgICAgICAgYm9vbCBoYXNQZW5k
aW5nUmVzb3VyY2UgPSBmYWxzZTsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBpZDsKKyAgICAg
ICAgICAgIGlmIChzZXRGaWxsKHBhaW50aW5nUmVzb3VyY2VGcm9tU1ZHUGFpbnQoZG9jdW1lbnQs
IHN0eWxlLT5maWxsUGFpbnQoKSwgaWQsIGhhc1BlbmRpbmdSZXNvdXJjZSkpKQorICAgICAgICAg
ICAgICAgIGZvdW5kUmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGhhc1Bl
bmRpbmdSZXNvdXJjZSkKKyAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShl
eHRlbnNpb25zLCBpZCwgZWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3R5bGUt
Pmhhc1N0cm9rZSgpKSB7CisgICAgICAgICAgICBib29sIGhhc1BlbmRpbmdSZXNvdXJjZSA9IGZh
bHNlOworICAgICAgICAgICAgQXRvbWljU3RyaW5nIGlkOworICAgICAgICAgICAgaWYgKHNldFN0
cm9rZShwYWludGluZ1Jlc291cmNlRnJvbVNWR1BhaW50KGRvY3VtZW50LCBzdHlsZS0+c3Ryb2tl
UGFpbnQoKSwgaWQsIGhhc1BlbmRpbmdSZXNvdXJjZSkpKQorICAgICAgICAgICAgICAgIGZvdW5k
UmVzb3VyY2VzID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGhhc1BlbmRpbmdSZXNvdXJj
ZSkKKyAgICAgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShleHRlbnNpb25zLCBp
ZCwgZWxlbWVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2hhaW5hYmxlUmVzb3Vy
Y2VUYWdzKCkuY29udGFpbnModGFnTmFtZUltcGwpKSB7CisgICAgICAgIEF0b21pY1N0cmluZyBp
ZCh0YXJnZXRSZWZlcmVuY2VGcm9tUmVzb3VyY2UoZWxlbWVudCkpOworICAgICAgICBpZiAoc2V0
TGlua2VkUmVzb3VyY2UoZ2V0UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXJCeUlkKGRvY3VtZW50
LCBpZCkpKQorICAgICAgICAgICAgZm91bmRSZXNvdXJjZXMgPSB0cnVlOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShleHRlbnNpb25zLCBpZCwgZWxl
bWVudCk7CisgICAgfQorCisgICAgcmV0dXJuIGZvdW5kUmVzb3VyY2VzOworfQorCit2b2lkIFNW
R1Jlc291cmNlczo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCogb2JqZWN0LCBi
b29sIG1hcmtGb3JJbnZhbGlkYXRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFtX2NsaXBwZXJGaWx0
ZXJNYXNrZXJEYXRhICYmICFtX21hcmtlckRhdGEgJiYgIW1fZmlsbFN0cm9rZURhdGEgJiYgIW1f
bGlua2VkUmVzb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2xpbmtlZFJlc291
cmNlKSB7CisgICAgICAgIEFTU0VSVCghbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSk7CisgICAg
ICAgIEFTU0VSVCghbV9tYXJrZXJEYXRhKTsKKyAgICAgICAgQVNTRVJUKCFtX2ZpbGxTdHJva2VE
YXRhKTsKKyAgICAgICAgbV9saW5rZWRSZXNvdXJjZS0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKG9i
amVjdCwgbWFya0ZvckludmFsaWRhdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSkgeworICAgICAgICBpZiAobV9jbGlwcGVy
RmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlcikKKyAgICAgICAgICAgIG1fY2xpcHBlckZpbHRlck1h
c2tlckRhdGEtPmNsaXBwZXItPnJlbW92ZUNsaWVudEZyb21DYWNoZShvYmplY3QsIG1hcmtGb3JJ
bnZhbGlkYXRpb24pOworI2lmIEVOQUJMRShGSUxURVJTKQorICAgICAgICBpZiAobV9jbGlwcGVy
RmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyKQorICAgICAgICAgICAgbV9jbGlwcGVyRmlsdGVyTWFz
a2VyRGF0YS0+ZmlsdGVyLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0LCBtYXJrRm9ySW52
YWxpZGF0aW9uKTsKKyNlbmRpZgorICAgICAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0
YS0+bWFza2VyKQorICAgICAgICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+bWFza2Vy
LT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0LCBtYXJrRm9ySW52YWxpZGF0aW9uKTsKKyAg
ICB9CisKKyAgICBpZiAobV9tYXJrZXJEYXRhKSB7CisgICAgICAgIGlmIChtX21hcmtlckRhdGEt
Pm1hcmtlclN0YXJ0KQorICAgICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydC0+cmVt
b3ZlQ2xpZW50RnJvbUNhY2hlKG9iamVjdCwgbWFya0ZvckludmFsaWRhdGlvbik7CisgICAgICAg
IGlmIChtX21hcmtlckRhdGEtPm1hcmtlck1pZCkKKyAgICAgICAgICAgIG1fbWFya2VyRGF0YS0+
bWFya2VyTWlkLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUob2JqZWN0LCBtYXJrRm9ySW52YWxpZGF0
aW9uKTsKKyAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2VyRW5kKQorICAgICAgICAgICAg
bV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQtPnJlbW92ZUNsaWVudEZyb21DYWNoZShvYmplY3QsIG1h
cmtGb3JJbnZhbGlkYXRpb24pOworICAgIH0KKworICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhKSB7
CisgICAgICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhLT5maWxsKQorICAgICAgICAgICAgbV9maWxs
U3Ryb2tlRGF0YS0+ZmlsbC0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKG9iamVjdCwgbWFya0Zvcklu
dmFsaWRhdGlvbik7CisgICAgICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UpCisgICAg
ICAgICAgICBtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UtPnJlbW92ZUNsaWVudEZyb21DYWNoZShv
YmplY3QsIG1hcmtGb3JJbnZhbGlkYXRpb24pOworICAgIH0KK30KKwordm9pZCBTVkdSZXNvdXJj
ZXM6OnJlc291cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJj
ZSkKK3sKKyAgICBBU1NFUlQocmVzb3VyY2UpOworICAgIGlmICghbV9jbGlwcGVyRmlsdGVyTWFz
a2VyRGF0YSAmJiAhbV9tYXJrZXJEYXRhICYmICFtX2ZpbGxTdHJva2VEYXRhICYmICFtX2xpbmtl
ZFJlc291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9saW5rZWRSZXNvdXJjZSA9
PSByZXNvdXJjZSkgeworICAgICAgICBBU1NFUlQoIW1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEp
OworICAgICAgICBBU1NFUlQoIW1fbWFya2VyRGF0YSk7CisgICAgICAgIEFTU0VSVCghbV9maWxs
U3Ryb2tlRGF0YSk7CisgICAgICAgIG1fbGlua2VkUmVzb3VyY2UtPnJlbW92ZUFsbENsaWVudHNG
cm9tQ2FjaGUoKTsKKyAgICAgICAgbV9saW5rZWRSZXNvdXJjZSA9IDA7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHJlc291cmNlLT5yZXNvdXJjZVR5cGUoKSkgeworICAg
IGNhc2UgTWFza2VyUmVzb3VyY2VUeXBlOgorICAgICAgICBpZiAoIW1fY2xpcHBlckZpbHRlck1h
c2tlckRhdGEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG1fY2xpcHBlckZpbHRl
ck1hc2tlckRhdGEtPm1hc2tlciA9PSByZXNvdXJjZSkgeworICAgICAgICAgICAgbV9jbGlwcGVy
RmlsdGVyTWFza2VyRGF0YS0+bWFza2VyLT5yZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7Cisg
ICAgICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXIgPSAwOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWFya2VyUmVzb3VyY2VUeXBlOgorICAgICAg
ICBpZiAoIW1fbWFya2VyRGF0YSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobV9t
YXJrZXJEYXRhLT5tYXJrZXJTdGFydCA9PSByZXNvdXJjZSkgeworICAgICAgICAgICAgbV9tYXJr
ZXJEYXRhLT5tYXJrZXJTdGFydC0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOworICAgICAg
ICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydCA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG1fbWFya2VyRGF0YS0+bWFya2VyTWlkID09IHJlc291cmNlKSB7CisgICAgICAgICAgICBt
X21hcmtlckRhdGEtPm1hcmtlck1pZC0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOworICAg
ICAgICAgICAgbV9tYXJrZXJEYXRhLT5tYXJrZXJNaWQgPSAwOworICAgICAgICB9CisgICAgICAg
IGlmIChtX21hcmtlckRhdGEtPm1hcmtlckVuZCA9PSByZXNvdXJjZSkgeworICAgICAgICAgICAg
bV9tYXJrZXJEYXRhLT5tYXJrZXJFbmQtPnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoKTsKKyAg
ICAgICAgICAgIG1fbWFya2VyRGF0YS0+bWFya2VyRW5kID0gMDsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBhdHRlcm5SZXNvdXJjZVR5cGU6CisgICAgY2FzZSBMaW5lYXJH
cmFkaWVudFJlc291cmNlVHlwZToKKyAgICBjYXNlIFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBl
OgorICAgICAgICBpZiAoIW1fZmlsbFN0cm9rZURhdGEpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgaWYgKG1fZmlsbFN0cm9rZURhdGEtPmZpbGwgPT0gcmVzb3VyY2UpIHsKKyAgICAgICAg
ICAgIG1fZmlsbFN0cm9rZURhdGEtPmZpbGwtPnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoKTsK
KyAgICAgICAgICAgIG1fZmlsbFN0cm9rZURhdGEtPmZpbGwgPSAwOworICAgICAgICB9CisgICAg
ICAgIGlmIChtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UgPT0gcmVzb3VyY2UpIHsKKyAgICAgICAg
ICAgIG1fZmlsbFN0cm9rZURhdGEtPnN0cm9rZS0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgp
OworICAgICAgICAgICAgbV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlID0gMDsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbHRlclJlc291cmNlVHlwZToKKyNpZiBFTkFCTEUo
RklMVEVSUykKKyAgICAgICAgaWYgKCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGlmIChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5maWx0
ZXIgPT0gcmVzb3VyY2UpIHsKKyAgICAgICAgICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEt
PmZpbHRlci0+cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZSgpOworICAgICAgICAgICAgbV9jbGlw
cGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyID0gMDsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDbGlwcGVyUmVzb3VyY2VUeXBlOgorICAgICAgICBpZiAoIW1fY2xpcHBlckZpbHRlck1hc2tl
ckRhdGEpCisgICAgICAgICAgICBicmVhazsgCisgICAgICAgIGlmIChtX2NsaXBwZXJGaWx0ZXJN
YXNrZXJEYXRhLT5jbGlwcGVyID09IHJlc291cmNlKSB7CisgICAgICAgICAgICBtX2NsaXBwZXJG
aWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyLT5yZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKCk7Cisg
ICAgICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5jbGlwcGVyID0gMDsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNvbGlkQ29sb3JSZXNvdXJjZVR5cGU6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBTVkdSZXNvdXJj
ZXM6OmJ1aWxkU2V0T2ZSZXNvdXJjZXMoSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
cio+JiBzZXQpCit7CisgICAgaWYgKCFtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhICYmICFtX21h
cmtlckRhdGEgJiYgIW1fZmlsbFN0cm9rZURhdGEgJiYgIW1fbGlua2VkUmVzb3VyY2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX2xpbmtlZFJlc291cmNlKSB7CisgICAgICAgIEFTU0VS
VCghbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSk7CisgICAgICAgIEFTU0VSVCghbV9tYXJrZXJE
YXRhKTsKKyAgICAgICAgQVNTRVJUKCFtX2ZpbGxTdHJva2VEYXRhKTsKKyAgICAgICAgc2V0LmFk
ZChtX2xpbmtlZFJlc291cmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKSB7CisgICAgICAgIGlmIChtX2NsaXBwZXJGaWx0ZXJN
YXNrZXJEYXRhLT5jbGlwcGVyKQorICAgICAgICAgICAgc2V0LmFkZChtX2NsaXBwZXJGaWx0ZXJN
YXNrZXJEYXRhLT5jbGlwcGVyKTsKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICAgICAgaWYgKG1f
Y2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlcikKKyAgICAgICAgICAgIHNldC5hZGQobV9j
bGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyKTsKKyNlbmRpZgorICAgICAgICBpZiAobV9j
bGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+bWFza2VyKQorICAgICAgICAgICAgc2V0LmFkZChtX2Ns
aXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXIpOworICAgIH0KKworICAgIGlmIChtX21hcmtl
ckRhdGEpIHsKKyAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2VyU3RhcnQpCisgICAgICAg
ICAgICBzZXQuYWRkKG1fbWFya2VyRGF0YS0+bWFya2VyU3RhcnQpOworICAgICAgICBpZiAobV9t
YXJrZXJEYXRhLT5tYXJrZXJNaWQpCisgICAgICAgICAgICBzZXQuYWRkKG1fbWFya2VyRGF0YS0+
bWFya2VyTWlkKTsKKyAgICAgICAgaWYgKG1fbWFya2VyRGF0YS0+bWFya2VyRW5kKQorICAgICAg
ICAgICAgc2V0LmFkZChtX21hcmtlckRhdGEtPm1hcmtlckVuZCk7CisgICAgfQorCisgICAgaWYg
KG1fZmlsbFN0cm9rZURhdGEpIHsKKyAgICAgICAgaWYgKG1fZmlsbFN0cm9rZURhdGEtPmZpbGwp
CisgICAgICAgICAgICBzZXQuYWRkKG1fZmlsbFN0cm9rZURhdGEtPmZpbGwpOworICAgICAgICBp
ZiAobV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlKQorICAgICAgICAgICAgc2V0LmFkZChtX2ZpbGxT
dHJva2VEYXRhLT5zdHJva2UpOworICAgIH0KK30KKworYm9vbCBTVkdSZXNvdXJjZXM6OnNldENs
aXBwZXIoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyKQoreworICAgIGlmICghY2xp
cHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGNsaXBwZXItPnJlc291
cmNlVHlwZSgpID09IENsaXBwZXJSZXNvdXJjZVR5cGUpOworCisgICAgaWYgKCFtX2NsaXBwZXJG
aWx0ZXJNYXNrZXJEYXRhKQorICAgICAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhID0gQ2xp
cHBlckZpbHRlck1hc2tlckRhdGE6OmNyZWF0ZSgpOworCisgICAgbV9jbGlwcGVyRmlsdGVyTWFz
a2VyRGF0YS0+Y2xpcHBlciA9IGNsaXBwZXI7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
U1ZHUmVzb3VyY2VzOjpyZXNldENsaXBwZXIoKQoreworICAgIEFTU0VSVChtX2NsaXBwZXJGaWx0
ZXJNYXNrZXJEYXRhKTsKKyAgICBBU1NFUlQobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xp
cHBlcik7CisgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+Y2xpcHBlciA9IDA7Cit9CisK
KyNpZiBFTkFCTEUoRklMVEVSUykKK2Jvb2wgU1ZHUmVzb3VyY2VzOjpzZXRGaWx0ZXIoUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBpZiAoIWZpbHRlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGZpbHRlci0+cmVzb3VyY2VUeXBlKCkgPT0gRmls
dGVyUmVzb3VyY2VUeXBlKTsKKworICAgIGlmICghbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSkK
KyAgICAgICAgbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSA9IENsaXBwZXJGaWx0ZXJNYXNrZXJE
YXRhOjpjcmVhdGUoKTsKKworICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlciA9
IGZpbHRlcjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTVkdSZXNvdXJjZXM6OnJlc2V0
RmlsdGVyKCkKK3sKKyAgICBBU1NFUlQobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSk7CisgICAg
QVNTRVJUKG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlcik7CisgICAgbV9jbGlwcGVy
RmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyID0gMDsKK30KKyNlbmRpZgorCitib29sIFNWR1Jlc291
cmNlczo6c2V0TWFya2VyU3RhcnQoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0
KQoreworICAgIGlmICghbWFya2VyU3RhcnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEFTU0VSVChtYXJrZXJTdGFydC0+cmVzb3VyY2VUeXBlKCkgPT0gTWFya2VyUmVzb3VyY2VUeXBl
KTsKKworICAgIGlmICghbV9tYXJrZXJEYXRhKQorICAgICAgICBtX21hcmtlckRhdGEgPSBNYXJr
ZXJEYXRhOjpjcmVhdGUoKTsKKworICAgIG1fbWFya2VyRGF0YS0+bWFya2VyU3RhcnQgPSBtYXJr
ZXJTdGFydDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTVkdSZXNvdXJjZXM6OnJlc2V0
TWFya2VyU3RhcnQoKQoreworICAgIEFTU0VSVChtX21hcmtlckRhdGEpOworICAgIEFTU0VSVCht
X21hcmtlckRhdGEtPm1hcmtlclN0YXJ0KTsKKyAgICBtX21hcmtlckRhdGEtPm1hcmtlclN0YXJ0
ID0gMDsKK30KKworYm9vbCBTVkdSZXNvdXJjZXM6OnNldE1hcmtlck1pZChSZW5kZXJTVkdSZXNv
dXJjZU1hcmtlciogbWFya2VyTWlkKQoreworICAgIGlmICghbWFya2VyTWlkKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobWFya2VyTWlkLT5yZXNvdXJjZVR5cGUoKSA9PSBN
YXJrZXJSZXNvdXJjZVR5cGUpOworCisgICAgaWYgKCFtX21hcmtlckRhdGEpCisgICAgICAgIG1f
bWFya2VyRGF0YSA9IE1hcmtlckRhdGE6OmNyZWF0ZSgpOworCisgICAgbV9tYXJrZXJEYXRhLT5t
YXJrZXJNaWQgPSBtYXJrZXJNaWQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1ZHUmVz
b3VyY2VzOjpyZXNldE1hcmtlck1pZCgpCit7CisgICAgQVNTRVJUKG1fbWFya2VyRGF0YSk7Cisg
ICAgQVNTRVJUKG1fbWFya2VyRGF0YS0+bWFya2VyTWlkKTsKKyAgICBtX21hcmtlckRhdGEtPm1h
cmtlck1pZCA9IDA7Cit9CisKK2Jvb2wgU1ZHUmVzb3VyY2VzOjpzZXRNYXJrZXJFbmQoUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCkKK3sKKyAgICBpZiAoIW1hcmtlckVuZCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG1hcmtlckVuZC0+cmVzb3VyY2VUeXBl
KCkgPT0gTWFya2VyUmVzb3VyY2VUeXBlKTsKKworICAgIGlmICghbV9tYXJrZXJEYXRhKQorICAg
ICAgICBtX21hcmtlckRhdGEgPSBNYXJrZXJEYXRhOjpjcmVhdGUoKTsKKworICAgIG1fbWFya2Vy
RGF0YS0+bWFya2VyRW5kID0gbWFya2VyRW5kOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IFNWR1Jlc291cmNlczo6cmVzZXRNYXJrZXJFbmQoKQoreworICAgIEFTU0VSVChtX21hcmtlckRh
dGEpOworICAgIEFTU0VSVChtX21hcmtlckRhdGEtPm1hcmtlckVuZCk7CisgICAgbV9tYXJrZXJE
YXRhLT5tYXJrZXJFbmQgPSAwOworfQorCitib29sIFNWR1Jlc291cmNlczo6c2V0TWFza2VyKFJl
bmRlclNWR1Jlc291cmNlTWFza2VyKiBtYXNrZXIpCit7CisgICAgaWYgKCFtYXNrZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChtYXNrZXItPnJlc291cmNlVHlwZSgpID09
IE1hc2tlclJlc291cmNlVHlwZSk7CisKKyAgICBpZiAoIW1fY2xpcHBlckZpbHRlck1hc2tlckRh
dGEpCisgICAgICAgIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEgPSBDbGlwcGVyRmlsdGVyTWFz
a2VyRGF0YTo6Y3JlYXRlKCk7CisKKyAgICBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNr
ZXIgPSBtYXNrZXI7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1ZHUmVzb3VyY2VzOjpy
ZXNldE1hc2tlcigpCit7CisgICAgQVNTRVJUKG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEpOwor
ICAgIEFTU0VSVChtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhLT5tYXNrZXIpOworICAgIG1fY2xp
cHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tlciA9IDA7Cit9CisKK2Jvb2wgU1ZHUmVzb3VyY2Vz
OjpzZXRGaWxsKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBmaWxsKQoreworICAgIGlmICgh
ZmlsbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGZpbGwtPnJlc291cmNl
VHlwZSgpID09IFBhdHRlcm5SZXNvdXJjZVR5cGUKKyAgICAgICAgICAgfHwgZmlsbC0+cmVzb3Vy
Y2VUeXBlKCkgPT0gTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGUKKyAgICAgICAgICAgfHwgZmls
bC0+cmVzb3VyY2VUeXBlKCkgPT0gUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGUpOworCisgICAg
aWYgKCFtX2ZpbGxTdHJva2VEYXRhKQorICAgICAgICBtX2ZpbGxTdHJva2VEYXRhID0gRmlsbFN0
cm9rZURhdGE6OmNyZWF0ZSgpOworCisgICAgbV9maWxsU3Ryb2tlRGF0YS0+ZmlsbCA9IGZpbGw7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1ZHUmVzb3VyY2VzOjpyZXNldEZpbGwoKQor
eworICAgIEFTU0VSVChtX2ZpbGxTdHJva2VEYXRhKTsKKyAgICBBU1NFUlQobV9maWxsU3Ryb2tl
RGF0YS0+ZmlsbCk7CisgICAgbV9maWxsU3Ryb2tlRGF0YS0+ZmlsbCA9IDA7Cit9CisKK2Jvb2wg
U1ZHUmVzb3VyY2VzOjpzZXRTdHJva2UoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHN0cm9r
ZSkKK3sKKyAgICBpZiAoIXN0cm9rZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNT
RVJUKHN0cm9rZS0+cmVzb3VyY2VUeXBlKCkgPT0gUGF0dGVyblJlc291cmNlVHlwZQorICAgICAg
ICAgICB8fCBzdHJva2UtPnJlc291cmNlVHlwZSgpID09IExpbmVhckdyYWRpZW50UmVzb3VyY2VU
eXBlCisgICAgICAgICAgIHx8IHN0cm9rZS0+cmVzb3VyY2VUeXBlKCkgPT0gUmFkaWFsR3JhZGll
bnRSZXNvdXJjZVR5cGUpOworCisgICAgaWYgKCFtX2ZpbGxTdHJva2VEYXRhKQorICAgICAgICBt
X2ZpbGxTdHJva2VEYXRhID0gRmlsbFN0cm9rZURhdGE6OmNyZWF0ZSgpOworCisgICAgbV9maWxs
U3Ryb2tlRGF0YS0+c3Ryb2tlID0gc3Ryb2tlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IFNWR1Jlc291cmNlczo6cmVzZXRTdHJva2UoKQoreworICAgIEFTU0VSVChtX2ZpbGxTdHJva2VE
YXRhKTsKKyAgICBBU1NFUlQobV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tlKTsKKyAgICBtX2ZpbGxT
dHJva2VEYXRhLT5zdHJva2UgPSAwOworfQorCitib29sIFNWR1Jlc291cmNlczo6c2V0TGlua2Vk
UmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGxpbmtlZFJlc291cmNlKQorewor
ICAgIGlmICghbGlua2VkUmVzb3VyY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1f
bGlua2VkUmVzb3VyY2UgPSBsaW5rZWRSZXNvdXJjZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBTVkdSZXNvdXJjZXM6OnJlc2V0TGlua2VkUmVzb3VyY2UoKQoreworICAgIEFTU0VSVCht
X2xpbmtlZFJlc291cmNlKTsKKyAgICBtX2xpbmtlZFJlc291cmNlID0gMDsKK30KKworI2lmbmRl
ZiBOREVCVUcKK3ZvaWQgU1ZHUmVzb3VyY2VzOjpkdW1wKGNvbnN0IFJlbmRlck9iamVjdCogb2Jq
ZWN0KQoreworICAgIEFTU0VSVChvYmplY3QpOworICAgIEFTU0VSVChvYmplY3QtPm5vZGUoKSk7
CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIi0+IHRoaXM9JXAsIFNWR1Jlc291cmNlcyhyZW5kZXJl
cj0lcCwgbm9kZT0lcClcbiIsIHRoaXMsIG9iamVjdCwgb2JqZWN0LT5ub2RlKCkpOworICAgIGZw
cmludGYoc3RkZXJyLCAiIHwgRE9NIFRyZWU6XG4iKTsKKyAgICBvYmplY3QtPm5vZGUoKS0+c2hv
d1RyZWVGb3JUaGlzKCk7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIHwgTGlzdCBvZiByZXNv
dXJjZXM6XG4iKTsKKyAgICBpZiAobV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YSkgeworICAgICAg
ICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gbV9jbGlwcGVyRmlsdGVy
TWFza2VyRGF0YS0+Y2xpcHBlcikKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHwtPiBD
bGlwcGVyICAgIDogJXAgKG5vZGU9JXApXG4iLCBjbGlwcGVyLCBjbGlwcGVyLT5ub2RlKCkpOwor
I2lmIEVOQUJMRShGSUxURVJTKQorICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIq
IGZpbHRlciA9IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPmZpbHRlcikKKyAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiIHwtPiBGaWx0ZXIgICAgIDogJXAgKG5vZGU9JXApXG4iLCBmaWx0
ZXIsIGZpbHRlci0+bm9kZSgpKTsKKyNlbmRpZgorICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIqIG1hc2tlciA9IG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEtPm1hc2tlcikKKyAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHwtPiBNYXNrZXIgICAgIDogJXAgKG5vZGU9JXAp
XG4iLCBtYXNrZXIsIG1hc2tlci0+bm9kZSgpKTsKKyAgICB9CisKKyAgICBpZiAobV9tYXJrZXJE
YXRhKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyU3RhcnQg
PSBtX21hcmtlckRhdGEtPm1hcmtlclN0YXJ0KQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgfC0+IE1hcmtlclN0YXJ0OiAlcCAobm9kZT0lcClcbiIsIG1hcmtlclN0YXJ0LCBtYXJrZXJT
dGFydC0+bm9kZSgpKTsKKyAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJr
ZXJNaWQgPSBtX21hcmtlckRhdGEtPm1hcmtlck1pZCkKKyAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiIHwtPiBNYXJrZXJNaWQgIDogJXAgKG5vZGU9JXApXG4iLCBtYXJrZXJNaWQsIG1hcmtl
ck1pZC0+bm9kZSgpKTsKKyAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJr
ZXJFbmQgPSBtX21hcmtlckRhdGEtPm1hcmtlckVuZCkKKyAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiIHwtPiBNYXJrZXJFbmQgIDogJXAgKG5vZGU9JXApXG4iLCBtYXJrZXJFbmQsIG1hcmtl
ckVuZC0+bm9kZSgpKTsKKyAgICB9CisKKyAgICBpZiAobV9maWxsU3Ryb2tlRGF0YSkgeworICAg
ICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGZpbGwgPSBtX2ZpbGxTdHJva2VE
YXRhLT5maWxsKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfC0+IEZpbGwgICAgICAg
OiAlcCAobm9kZT0lcClcbiIsIGZpbGwsIGZpbGwtPm5vZGUoKSk7CisgICAgICAgIGlmIChSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogc3Ryb2tlID0gbV9maWxsU3Ryb2tlRGF0YS0+c3Ryb2tl
KQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfC0+IFN0cm9rZSAgICAgOiAlcCAobm9k
ZT0lcClcbiIsIHN0cm9rZSwgc3Ryb2tlLT5ub2RlKCkpOworICAgIH0KKworICAgIGlmIChtX2xp
bmtlZFJlc291cmNlKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiB8LT4geGxpbms6aHJlZiA6
ICVwIChub2RlPSVwKVxuIiwgbV9saW5rZWRSZXNvdXJjZSwgbV9saW5rZWRSZXNvdXJjZS0+bm9k
ZSgpKTsKK30KKyNlbmRpZgorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5oCShyZXZpc2lvbiA3NTM0NykJKGZyb20gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jlc291cmNlcy5oOjc1MzQ3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdSZXNvdXJjZXNfaAorI2RlZmlu
ZSBTVkdSZXNvdXJjZXNfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIERvY3VtZW50OworY2xhc3MgUmVuZGVyT2JqZWN0OworY2xhc3MgUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyOworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI7CitjbGFzcyBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjsKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlTWFya2VyOwor
Y2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI7CitjbGFzcyBTVkdSZW5kZXJTdHlsZTsKKwor
Ly8gSG9sZHMgYSBzZXQgb2YgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIFJlbmRlck9iamVj
dAorY2xhc3MgU1ZHUmVzb3VyY2VzIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAg
ICBTVkdSZXNvdXJjZXMoKTsKKworICAgIGJvb2wgYnVpbGRDYWNoZWRSZXNvdXJjZXMoY29uc3Qg
UmVuZGVyT2JqZWN0KiwgY29uc3QgU1ZHUmVuZGVyU3R5bGUqKTsKKworICAgIC8vIE9yZGluYXJ5
IHJlc291cmNlcworICAgIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBlcigpIGNvbnN0
IHsgcmV0dXJuIG1fY2xpcHBlckZpbHRlck1hc2tlckRhdGEgPyBtX2NsaXBwZXJGaWx0ZXJNYXNr
ZXJEYXRhLT5jbGlwcGVyIDogMDsgfQorI2lmIEVOQUJMRShGSUxURVJTKQorICAgIFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2NsaXBwZXJGaWx0ZXJN
YXNrZXJEYXRhID8gbV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+ZmlsdGVyIDogMDsgfQorI2Vu
ZGlmCisgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXJrZXJEYXRhID8gbV9tYXJrZXJEYXRhLT5tYXJrZXJTdGFydCA6IDA7IH0KKyAg
ICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkKCkgY29uc3QgeyByZXR1cm4gbV9t
YXJrZXJEYXRhID8gbV9tYXJrZXJEYXRhLT5tYXJrZXJNaWQgOiAwOyB9CisgICAgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2VyRGF0YSA/
IG1fbWFya2VyRGF0YS0+bWFya2VyRW5kIDogMDsgfQorICAgIFJlbmRlclNWR1Jlc291cmNlTWFz
a2VyKiBtYXNrZXIoKSBjb25zdCB7IHJldHVybiBtX2NsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhID8g
bV9jbGlwcGVyRmlsdGVyTWFza2VyRGF0YS0+bWFza2VyIDogMDsgfQorCisgICAgLy8gUGFpbnQg
c2VydmVycworICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBmaWxsKCkgY29uc3QgeyBy
ZXR1cm4gbV9maWxsU3Ryb2tlRGF0YSA/IG1fZmlsbFN0cm9rZURhdGEtPmZpbGwgOiAwOyB9Cisg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHN0cm9rZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsbFN0cm9rZURhdGEgPyBtX2ZpbGxTdHJva2VEYXRhLT5zdHJva2UgOiAwOyB9CisKKyAgICAv
LyBDaGFpbmFibGUgcmVzb3VyY2VzIC0gbGlua2VkIHRocm91Z2ggeGxpbms6aHJlZgorICAgIFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBsaW5rZWRSZXNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbGlua2VkUmVzb3VyY2U7IH0KKworICAgIHZvaWQgYnVpbGRTZXRPZlJlc291cmNlcyhIYXNo
U2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj4mKTsKKworICAgIC8vIE1ldGhvZHMgb3Bl
cmF0aW5nIG9uIGFsbCBjYWNoZWQgcmVzb3VyY2VzCisgICAgdm9pZCByZW1vdmVDbGllbnRGcm9t
Q2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSkgY29u
c3Q7CisgICAgdm9pZCByZXNvdXJjZURlc3Ryb3llZChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
ciopOworCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcChjb25zdCBSZW5kZXJPYmplY3Qq
KTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTVkdSZXNvdXJjZXNDeWNs
ZVNvbHZlcjsKKworICAgIC8vIE9ubHkgdXNlZCBieSBTVkdSZXNvdXJjZXNDYWNoZSBjeWNsZSBk
ZXRlY3Rpb24gbG9naWMKKyAgICB2b2lkIHJlc2V0Q2xpcHBlcigpOworI2lmIEVOQUJMRShGSUxU
RVJTKQorICAgIHZvaWQgcmVzZXRGaWx0ZXIoKTsKKyNlbmRpZgorICAgIHZvaWQgcmVzZXRNYXJr
ZXJTdGFydCgpOworICAgIHZvaWQgcmVzZXRNYXJrZXJNaWQoKTsKKyAgICB2b2lkIHJlc2V0TWFy
a2VyRW5kKCk7CisgICAgdm9pZCByZXNldE1hc2tlcigpOworICAgIHZvaWQgcmVzZXRGaWxsKCk7
CisgICAgdm9pZCByZXNldFN0cm9rZSgpOworICAgIHZvaWQgcmVzZXRMaW5rZWRSZXNvdXJjZSgp
OworCitwcml2YXRlOgorICAgIGJvb2wgc2V0Q2xpcHBlcihSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIqKTsKKyNpZiBFTkFCTEUoRklMVEVSUykKKyAgICBib29sIHNldEZpbHRlcihSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlciopOworI2VuZGlmCisgICAgYm9vbCBzZXRNYXJrZXJTdGFydChSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlciopOworICAgIGJvb2wgc2V0TWFya2VyTWlkKFJlbmRlclNWR1Jlc291
cmNlTWFya2VyKik7CisgICAgYm9vbCBzZXRNYXJrZXJFbmQoUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXIqKTsKKyAgICBib29sIHNldE1hc2tlcihSZW5kZXJTVkdSZXNvdXJjZU1hc2tlciopOworICAg
IGJvb2wgc2V0RmlsbChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciopOworICAgIGJvb2wgc2V0
U3Ryb2tlKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKik7CisgICAgYm9vbCBzZXRMaW5rZWRS
ZXNvdXJjZShSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciopOworCisgICAgLy8gRnJvbSBTVkcg
MS4xIDJuZCBFZGl0aW9uCisgICAgLy8gY2xpcHBlcjogJ2NvbnRhaW5lciBlbGVtZW50cycgYW5k
ICdncmFwaGljcyBlbGVtZW50cycKKyAgICAvLyBmaWx0ZXI6ICAnY29udGFpbmVyIGVsZW1lbnRz
JyBhbmQgJ2dyYXBoaWNzIGVsZW1lbnRzJworICAgIC8vIG1hc2tlcjogICdjb250YWluZXIgZWxl
bWVudHMnIGFuZCAnZ3JhcGhpY3MgZWxlbWVudHMnCisgICAgLy8gLT4gYSwgY2lyY2xlLCBkZWZz
LCBlbGxpcHNlLCBnbHlwaCwgZywgaW1hZ2UsIGxpbmUsIG1hcmtlciwgbWFzaywgbWlzc2luZy1n
bHlwaCwgcGF0aCwgcGF0dGVybiwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHN2Zywgc3dpdGNo
LCBzeW1ib2wsIHRleHQsIHVzZQorICAgIHN0cnVjdCBDbGlwcGVyRmlsdGVyTWFza2VyRGF0YSB7
CisgICAgICAgIENsaXBwZXJGaWx0ZXJNYXNrZXJEYXRhKCkKKyAgICAgICAgICAgIDogY2xpcHBl
cigwKQorI2lmIEVOQUJMRShGSUxURVJTKQorICAgICAgICAgICAgLCBmaWx0ZXIoMCkKKyNlbmRp
ZgorICAgICAgICAgICAgLCBtYXNrZXIoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgc3RhdGljIFBhc3NPd25QdHI8Q2xpcHBlckZpbHRlck1hc2tlckRhdGE+IGNyZWF0ZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2xpcHBlckZpbHRlck1hc2tlckRhdGE7
CisgICAgICAgIH0KKworICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIqIGNsaXBwZXI7
CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgICAgIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiBm
aWx0ZXI7CisjZW5kaWYKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIqIG1hc2tlcjsK
KyAgICB9OworCisgICAgLy8gRnJvbSBTVkcgMS4xIDJuZCBFZGl0aW9uCisgICAgLy8gbWFya2Vy
OiBsaW5lLCBwYXRoLCBwb2x5Z29uLCBwb2x5bGluZQorICAgIHN0cnVjdCBNYXJrZXJEYXRhIHsK
KyAgICAgICAgTWFya2VyRGF0YSgpCisgICAgICAgICAgICA6IG1hcmtlclN0YXJ0KDApCisgICAg
ICAgICAgICAsIG1hcmtlck1pZCgwKQorICAgICAgICAgICAgLCBtYXJrZXJFbmQoMCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TWFya2VyRGF0YT4g
Y3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXJrZXJEYXRhOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0
OworICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkOworICAgICAgICBS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRW5kOworICAgIH07CisKKyAgICAvLyBGcm9t
IFNWRyAxLjEgMm5kIEVkaXRpb24KKyAgICAvLyBmaWxsOiAgICAgICAnc2hhcGVzJyBhbmQgJ3Rl
eHQgY29udGVudCBlbGVtZW50cycKKyAgICAvLyBzdHJva2U6ICAgICAnc2hhcGVzJyBhbmQgJ3Rl
eHQgY29udGVudCBlbGVtZW50cycKKyAgICAvLyAtPiBhbHRHbHlwaCwgY2lyY2xlLCBlbGxpcHNl
LCBsaW5lLCBwYXRoLCBwb2x5Z29uLCBwb2x5bGluZSwgcmVjdCwgdGV4dCwgdGV4dFBhdGgsIHRy
ZWYsIHRzcGFuCisgICAgc3RydWN0IEZpbGxTdHJva2VEYXRhIHsKKyAgICAgICAgRmlsbFN0cm9r
ZURhdGEoKQorICAgICAgICAgICAgOiBmaWxsKDApCisgICAgICAgICAgICAsIHN0cm9rZSgwKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgUGFzc093blB0cjxGaWxsU3Ry
b2tlRGF0YT4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxs
U3Ryb2tlRGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyKiBmaWxsOworICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogc3Ryb2tlOwor
ICAgIH07CisKKyAgICBPd25QdHI8Q2xpcHBlckZpbHRlck1hc2tlckRhdGE+IG1fY2xpcHBlckZp
bHRlck1hc2tlckRhdGE7CisgICAgT3duUHRyPE1hcmtlckRhdGE+IG1fbWFya2VyRGF0YTsKKyAg
ICBPd25QdHI8RmlsbFN0cm9rZURhdGE+IG1fZmlsbFN0cm9rZURhdGE7CisgICAgUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIqIG1fbGlua2VkUmVzb3VyY2U7Cit9OworCit9CisKKyNlbmRpZgor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0Nh
Y2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
c291cmNlc0NhY2hlLmNwcAkocmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5jcHA6NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNp
b25zLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2Vz
Q3ljbGVTb2x2ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVkdSZXNvdXJjZXNDYWNo
ZTo6U1ZHUmVzb3VyY2VzQ2FjaGUoKQoreworfQorCitTVkdSZXNvdXJjZXNDYWNoZTo6flNWR1Jl
c291cmNlc0NhY2hlKCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9jYWNoZSk7Cit9CisKK3Zv
aWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OmFkZFJlc291cmNlc0Zyb21SZW5kZXJPYmplY3QoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICBBU1NFUlQo
b2JqZWN0KTsKKyAgICBBU1NFUlQoc3R5bGUpOworICAgIEFTU0VSVCghbV9jYWNoZS5jb250YWlu
cyhvYmplY3QpKTsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxl
LT5zdmdTdHlsZSgpOworICAgIEFTU0VSVChzdmdTdHlsZSk7CisKKyAgICAvLyBCdWlsZCBhIGxp
c3Qgb2YgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhc3NlZCBSZW5kZXJPYmpl
Y3QKKyAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IG5ldyBTVkdSZXNvdXJjZXM7CisgICAg
aWYgKCFyZXNvdXJjZXMtPmJ1aWxkQ2FjaGVkUmVzb3VyY2VzKG9iamVjdCwgc3ZnU3R5bGUpKSB7
CisgICAgICAgIGRlbGV0ZSByZXNvdXJjZXM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBQdXQgb2JqZWN0IGluIGNhY2hlLgorICAgIG1fY2FjaGUuc2V0KG9iamVjdCwgcmVzb3Vy
Y2VzKTsKKworICAgIC8vIFJ1biBjeWNsZS1kZXRlY3Rpb24gX2FmdGVyd2FyZHNfLCBzbyBzZWxm
LXJlZmVyZW5jZXMgY2FuIGJlIGNhdWdodCBhcyB3ZWxsLgorICAgIFNWR1Jlc291cmNlc0N5Y2xl
U29sdmVyIHNvbHZlcihvYmplY3QsIHJlc291cmNlcyk7CisgICAgc29sdmVyLnJlc29sdmVDeWNs
ZXMoKTsKKworICAgIC8vIFdhbGsgcmVzb3VyY2VzIGFuZCByZWdpc3RlciB0aGUgcmVuZGVyIG9i
amVjdCBhdCBlYWNoIHJlc291cmNlcy4KKyAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyKj4gcmVzb3VyY2VTZXQ7CisgICAgcmVzb3VyY2VzLT5idWlsZFNldE9mUmVzb3VyY2Vz
KHJlc291cmNlU2V0KTsKKworICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIq
Pjo6aXRlcmF0b3IgZW5kID0gcmVzb3VyY2VTZXQuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGl0ID0gcmVzb3VyY2VTZXQuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+YWRkQ2xpZW50KG9iamVjdCk7
Cit9CisKK3ZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlbW92ZVJlc291cmNlc0Zyb21SZW5kZXJP
YmplY3QoUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKCFtX2NhY2hlLmNvbnRhaW5z
KG9iamVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2Vz
ID0gbV9jYWNoZS5nZXQob2JqZWN0KTsKKworICAgIC8vIFdhbGsgcmVzb3VyY2VzIGFuZCByZWdp
c3RlciB0aGUgcmVuZGVyIG9iamVjdCBhdCBlYWNoIHJlc291cmNlcy4KKyAgICBIYXNoU2V0PFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj4gcmVzb3VyY2VTZXQ7CisgICAgcmVzb3VyY2VzLT5i
dWlsZFNldE9mUmVzb3VyY2VzKHJlc291cmNlU2V0KTsKKworICAgIEhhc2hTZXQ8UmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIqPjo6aXRlcmF0b3IgZW5kID0gcmVzb3VyY2VTZXQuZW5kKCk7Cisg
ICAgZm9yIChIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGl0
ID0gcmVzb3VyY2VTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+
cmVtb3ZlQ2xpZW50KG9iamVjdCk7CisKKyAgICBkZWxldGUgbV9jYWNoZS50YWtlKG9iamVjdCk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgU1ZHUmVzb3VyY2VzQ2FjaGUqIHJlc291cmNlc0NhY2hlRnJv
bVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IHJlbmRlcmVyLT5kb2N1bWVudCgpOworICAgIEFTU0VSVChkb2N1bWVudCk7CisK
KyAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lvbnMgPSBkb2N1bWVudC0+YWNjZXNz
U1ZHRXh0ZW5zaW9ucygpOworICAgIEFTU0VSVChleHRlbnNpb25zKTsKKworICAgIFNWR1Jlc291
cmNlc0NhY2hlKiBjYWNoZSA9IGV4dGVuc2lvbnMtPnJlc291cmNlc0NhY2hlKCk7CisgICAgQVNT
RVJUKGNhY2hlKTsKKworICAgIHJldHVybiBjYWNoZTsKK30KKworU1ZHUmVzb3VyY2VzKiBTVkdS
ZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCit7CisgICAgQVNTRVJUKHJlbmRlcmVyKTsKKyAgICBTVkdSZXNvdXJjZXND
YWNoZSogY2FjaGUgPSByZXNvdXJjZXNDYWNoZUZyb21SZW5kZXJPYmplY3QocmVuZGVyZXIpOwor
ICAgIGlmICghY2FjaGUtPm1fY2FjaGUuY29udGFpbnMocmVuZGVyZXIpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBjYWNoZS0+bV9jYWNoZS5nZXQocmVuZGVyZXIpOworfQorCit2
b2lkIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKFJlbmRlck9iamVjdCog
b2JqZWN0KQoreworICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2Fj
aGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChvYmplY3QpOworICAgIGlmICghcmVz
b3VyY2VzKQorICAgICAgICByZXR1cm47CisKKyAgICByZXNvdXJjZXMtPnJlbW92ZUNsaWVudEZy
b21DYWNoZShvYmplY3QpOworfQorCit2b2lkIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRTdHls
ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKK3sKKyAgICBBU1NFUlQocmVuZGVyZXIpOworICAg
IGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZUVxdWFsKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjbGllbnRVcGRhdGVkRnJvbUVsZW1lbnQocmVuZGVyZXIsIG5ld1N0eWxlKTsKKyAgICBSZW5k
ZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9u
KHJlbmRlcmVyLCBmYWxzZSk7Cit9CisgCit2b2lkIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRV
cGRhdGVkRnJvbUVsZW1lbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5
bGUqIG5ld1N0eWxlKQoreworICAgIEFTU0VSVChyZW5kZXJlcik7CisgICAgQVNTRVJUKHJlbmRl
cmVyLT5wYXJlbnQoKSk7CisKKyAgICBTVkdSZXNvdXJjZXNDYWNoZSogY2FjaGUgPSByZXNvdXJj
ZXNDYWNoZUZyb21SZW5kZXJPYmplY3QocmVuZGVyZXIpOworICAgIGNhY2hlLT5yZW1vdmVSZXNv
dXJjZXNGcm9tUmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKKyAgICBjYWNoZS0+YWRkUmVzb3VyY2Vz
RnJvbVJlbmRlck9iamVjdChyZW5kZXJlciwgbmV3U3R5bGUpOworfQorCit2b2lkIFNWR1Jlc291
cmNlc0NhY2hlOjpjbGllbnREZXN0cm95ZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAg
ICBBU1NFUlQocmVuZGVyZXIpOworICAgIFNWR1Jlc291cmNlc0NhY2hlKiBjYWNoZSA9IHJlc291
cmNlc0NhY2hlRnJvbVJlbmRlck9iamVjdChyZW5kZXJlcik7CisgICAgY2FjaGUtPnJlbW92ZVJl
c291cmNlc0Zyb21SZW5kZXJPYmplY3QocmVuZGVyZXIpOworfQorCit2b2lkIFNWR1Jlc291cmNl
c0NhY2hlOjpyZXNvdXJjZURlc3Ryb3llZChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVz
b3VyY2UpCit7CisgICAgQVNTRVJUKHJlc291cmNlKTsKKyAgICBTVkdSZXNvdXJjZXNDYWNoZSog
Y2FjaGUgPSByZXNvdXJjZXNDYWNoZUZyb21SZW5kZXJPYmplY3QocmVzb3VyY2UpOworCisgICAg
Ly8gVGhlIHJlc291cmNlIGl0c2VsZiBtYXkgaGF2ZSBjbGllbnRzLCB0aGF0IG5lZWQgdG8gYmUg
bm90aWZpZWQuCisgICAgY2FjaGUtPnJlbW92ZVJlc291cmNlc0Zyb21SZW5kZXJPYmplY3QocmVz
b3VyY2UpOworCisgICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBTVkdSZXNvdXJjZXMqPjo6aXRl
cmF0b3IgZW5kID0gY2FjaGUtPm1fY2FjaGUuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPFJlbmRl
ck9iamVjdCosIFNWR1Jlc291cmNlcyo+OjppdGVyYXRvciBpdCA9IGNhY2hlLT5tX2NhY2hlLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+cmVzb3VyY2VEZXN0
cm95ZWQocmVzb3VyY2UpOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuaAkocmV2aXNpb24gNzUzNDcp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXNDYWNoZS5oOjc1MzQ3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
U1ZHUmVzb3VyY2VzQ2FjaGVfaAorI2RlZmluZSBTVkdSZXNvdXJjZXNDYWNoZV9oCisKKyNpZiBF
TkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJPYmpl
Y3Q7CitjbGFzcyBSZW5kZXJTdHlsZTsKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
OworY2xhc3MgU1ZHUmVzb3VyY2VzOworCitjbGFzcyBTVkdSZXNvdXJjZXNDYWNoZSA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGUoKTsKKyAgICB+
U1ZHUmVzb3VyY2VzQ2FjaGUoKTsKKworICAgIHZvaWQgYWRkUmVzb3VyY2VzRnJvbVJlbmRlck9i
amVjdChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSopOworICAgIHZvaWQgcmVtb3Zl
UmVzb3VyY2VzRnJvbVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqKTsKKyAgICBzdGF0aWMgU1ZH
UmVzb3VyY2VzKiBjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0Kik7
CisKKyAgICAvLyBDYWxsZWQgZnJvbSBhbGwgU1ZHIHJlbmRlcmVycyBkZXN0cm95KCkgbWV0aG9k
cyAtIGV4Y2VwdCBmb3IgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuCisgICAgc3RhdGljIHZv
aWQgY2xpZW50RGVzdHJveWVkKFJlbmRlck9iamVjdCopOworCisgICAgLy8gQ2FsbGVkIGZyb20g
YWxsIFNWRyByZW5kZXJlcnMgbGF5b3V0KCkgbWV0aG9kcy4KKyAgICBzdGF0aWMgdm9pZCBjbGll
bnRMYXlvdXRDaGFuZ2VkKFJlbmRlck9iamVjdCopOworCisgICAgLy8gQ2FsbGVkIGZyb20gYWxs
IFNWRyByZW5kZXJlcnMgc3R5bGVEaWRDaGFuZ2UoKSBtZXRob2RzLgorICAgIHN0YXRpYyB2b2lk
IGNsaWVudFN0eWxlQ2hhbmdlZChSZW5kZXJPYmplY3QqLCBTdHlsZURpZmZlcmVuY2UsIGNvbnN0
IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CisKKyAgICAvLyBDYWxsZWQgZnJvbSBhbGwgU1ZHIHJl
bmRlcmVycyB1cGRhdGVGcm9tRWxlbWVudCgpIG1ldGhvZHMuCisgICAgc3RhdGljIHZvaWQgY2xp
ZW50VXBkYXRlZEZyb21FbGVtZW50KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiBu
ZXdTdHlsZSk7CisKKyAgICAvLyBDYWxsZWQgZnJvbSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
cjo6ZGVzdHJveSgpLgorICAgIHN0YXRpYyB2b2lkIHJlc291cmNlRGVzdHJveWVkKFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyKik7CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxSZW5kZXJPYmpl
Y3QqLCBTVkdSZXNvdXJjZXMqPiBtX2NhY2hlOworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNv
dXJjZXNDeWNsZVNvbHZlci5jcHAJKHJldmlzaW9uIDc1MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuY3BwOjc1MzQ3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oIgorCisvLyBTZXQg
dG8gYSB2YWx1ZSA+IDAsIHRvIGRlYnVnIHRoZSByZXNvdXJjZSBjYWNoZS4KKyNkZWZpbmUgREVC
VUdfQ1lDTEVfREVURUNUSU9OIDAKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgorI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlTWFza2VyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1BhdHRlcm5FbGVtZW50
LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzQ2Fj
aGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVkdSZXNvdXJjZXNDeWNsZVNvbHZlcjo6
U1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgU1ZHUmVzb3Vy
Y2VzKiByZXNvdXJjZXMpCisgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQorICAgICwgbV9yZXNv
dXJjZXMocmVzb3VyY2VzKQoreworICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKKyAgICBBU1NFUlQo
bV9yZXNvdXJjZXMpOworfQorCitTVkdSZXNvdXJjZXNDeWNsZVNvbHZlcjo6flNWR1Jlc291cmNl
c0N5Y2xlU29sdmVyKCkKK3sKK30KKworYm9vbCBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlcjo6cmVz
b3VyY2VDb250YWluc0N5Y2xlcyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25zdAoreworICAg
IEFTU0VSVChyZW5kZXJlcik7CisKKyAgICAvLyBGaXJzdCBvcGVyYXRlIG9uIHRoZSByZXNvdXJj
ZXMgb2YgdGhlIGdpdmVuIHJlbmRlcmVyLgorICAgIC8vIDxtYXJrZXIgaWQ9ImEiPiA8cGF0aCBt
YXJrZXItc3RhcnQ9InVybCgjYikiLz4gLi4uCisgICAgLy8gPG1hcmtlciBpZD0iYiIgbWFya2Vy
LXN0YXJ0PSJ1cmwoI2EpIi8+CisgICAgaWYgKFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZH
UmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChyZW5kZXJlcikp
IHsKKyAgICAgICAgSGFzaFNldDxSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcio+IHJlc291cmNl
U2V0OworICAgICAgICByZXNvdXJjZXMtPmJ1aWxkU2V0T2ZSZXNvdXJjZXMocmVzb3VyY2VTZXQp
OworCisgICAgICAgIC8vIFdhbGsgYWxsIHJlc291cmNlcyBhbmQgY2hlY2sgd2hldGVyIHRoZXkg
cmVmZXJlbmNlIGFueSByZXNvdXJjZSBjb250YWluZWQgaW4gdGhlIHJlc291cmNlcyBzZXQuCisg
ICAgICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPjo6aXRlcmF0b3IgZW5k
ID0gcmVzb3VyY2VTZXQuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IHJlc291cmNlU2V0LmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaWYgKG1fYWxsUmVzb3VyY2VzLmNvbnRhaW5zKCpp
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBUaGVuIG9wZXJhdGUgb24gdGhlIGNoaWxkIHJlc291cmNlcyBvZiB0aGUgZ2l2ZW4gcmVu
ZGVyZXIuCisgICAgLy8gPG1hcmtlciBpZD0iYSI+IDxwYXRoIG1hcmtlci1zdGFydD0idXJsKCNi
KSIvPiAuLi4KKyAgICAvLyA8bWFya2VyIGlkPSJiIj4gPHBhdGggbWFya2VyLXN0YXJ0PSJ1cmwo
I2EpIi8+IC4uLgorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJlbmRlcmVyLT5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAg
IFNWR1Jlc291cmNlcyogY2hpbGRSZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVk
UmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KGNoaWxkKTsKKyAgICAgICAgaWYgKCFjaGlsZFJlc291
cmNlcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgLy8gQSBjaGls
ZCBvZiB0aGUgZ2l2ZW4gJ3Jlc291cmNlJyBjb250YWlucyByZXNvdXJjZXMuIAorICAgICAgICBI
YXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj4gY2hpbGRTZXQ7CisgICAgICAgIGNo
aWxkUmVzb3VyY2VzLT5idWlsZFNldE9mUmVzb3VyY2VzKGNoaWxkU2V0KTsKKworICAgICAgICAv
LyBXYWxrIGFsbCBjaGlsZCByZXNvdXJjZXMgYW5kIGNoZWNrIHdoZXRlciB0aGV5IHJlZmVyZW5j
ZSBhbnkgcmVzb3VyY2UgY29udGFpbmVkIGluIHRoZSByZXNvdXJjZXMgc2V0LgorICAgICAgICBI
YXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGVuZCA9IGNoaWxk
U2V0LmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIqPjo6aXRlcmF0b3IgaXQgPSBjaGlsZFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgICAgIGlmIChtX2FsbFJlc291cmNlcy5jb250YWlucygqaXQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2FsayBjaGlsZHJl
biByZWN1cnNpdmVseSwgc3RvcCBpbW1lZGlhdGVseSBpZiB3ZSBmb3VuZCBhIGN5Y2xlCisgICAg
ICAgIGlmIChyZXNvdXJjZUNvbnRhaW5zQ3ljbGVzKGNoaWxkKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTVkdSZXNvdXJj
ZXNDeWNsZVNvbHZlcjo6cmVzb2x2ZUN5Y2xlcygpCit7CisgICAgQVNTRVJUKG1fYWxsUmVzb3Vy
Y2VzLmlzRW1wdHkoKSk7CisKKyNpZiBERUJVR19DWUNMRV9ERVRFQ1RJT04gPiAwCisgICAgZnBy
aW50ZihzdGRlcnIsICJcbkJlZm9yZSBjeWNsZSBkZXRlY3Rpb246XG4iKTsKKyAgICBtX3Jlc291
cmNlcy0+ZHVtcChtX3JlbmRlcmVyKTsKKyNlbmRpZgorCisgICAgLy8gU3Rhc2ggYWxsIHJlc291
cmNlcyBpbnRvIGEgSGFzaFNldCBmb3IgdGhlIGVhc2Ugb2YgdHJhdmVyc2luZy4KKyAgICBIYXNo
U2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj4gbG9jYWxSZXNvdXJjZXM7CisgICAgbV9y
ZXNvdXJjZXMtPmJ1aWxkU2V0T2ZSZXNvdXJjZXMobG9jYWxSZXNvdXJjZXMpOworICAgIEFTU0VS
VCghbG9jYWxSZXNvdXJjZXMuaXNFbXB0eSgpKTsKKworICAgIC8vIEFkZCBhbGwgcGFyZW50IHJl
c291cmNlIGNvbnRhaW5lcnMgdG8gdGhlIEhhc2hTZXQuCisgICAgSGFzaFNldDxSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lcio+IHBhcmVudFJlc291cmNlczsKKyAgICBSZW5kZXJPYmplY3QqIHBh
cmVudCA9IG1fcmVuZGVyZXItPnBhcmVudCgpOworICAgIHdoaWxlIChwYXJlbnQpIHsKKyAgICAg
ICAgaWYgKHBhcmVudC0+aXNTVkdSZXNvdXJjZUNvbnRhaW5lcigpKQorICAgICAgICAgICAgcGFy
ZW50UmVzb3VyY2VzLmFkZChwYXJlbnQtPnRvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIoKSk7
CisgICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50KCk7CisgICAgfQorCisjaWYgREVCVUdf
Q1lDTEVfREVURUNUSU9OID4gMAorICAgIGZwcmludGYoc3RkZXJyLCAiXG5EZXRlY3Rpbmcgd2hl
dGVyIGFueSByZXNvdXJjZXMgcmVmZXJlbmNlcyBhbnkgb2YgZm9sbG93aW5nIG9iamVjdHM6XG4i
KTsKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTG9jYWwgcmVzb3VyY2VzOlxuIik7
CisgICAgICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPjo6aXRlcmF0b3Ig
ZW5kID0gbG9jYWxSZXNvdXJjZXMuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcio+OjppdGVyYXRvciBpdCA9IGxvY2FsUmVzb3VyY2VzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAifD4gJXM6
IG9iamVjdD0lcCAobm9kZT0lcClcbiIsICgqaXQpLT5yZW5kZXJOYW1lKCksICppdCwgKCppdCkt
Pm5vZGUoKSk7CisKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJQYXJlbnQgcmVzb3VyY2VzOlxu
Iik7CisgICAgICAgIGVuZCA9IHBhcmVudFJlc291cmNlcy5lbmQoKTsKKyAgICAgICAgZm9yIChI
YXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGl0ID0gcGFyZW50
UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIGZwcmludGYo
c3RkZXJyLCAifD4gJXM6IG9iamVjdD0lcCAobm9kZT0lcClcbiIsICgqaXQpLT5yZW5kZXJOYW1l
KCksICppdCwgKCppdCktPm5vZGUoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBCdWlsZCBj
b21iaW5lZCBzZXQgb2YgbG9jYWwgYW5kIHBhcmVudCByZXNvdXJjZXMuCisgICAgbV9hbGxSZXNv
dXJjZXMgPSBsb2NhbFJlc291cmNlczsKKyAgICBIYXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyKj46Oml0ZXJhdG9yIGVuZCA9IHBhcmVudFJlc291cmNlcy5lbmQoKTsKKyAgICBmb3Ig
KEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPjo6aXRlcmF0b3IgaXQgPSBwYXJl
bnRSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBtX2FsbFJlc291
cmNlcy5hZGQoKml0KTsKKworICAgIC8vIElmIHdlJ3JlIGEgcmVzb3VyY2UsIGFkZCBvdXJzZWx2
ZXMgdG8gdGhlIEhhc2hTZXQuCisgICAgaWYgKG1fcmVuZGVyZXItPmlzU1ZHUmVzb3VyY2VDb250
YWluZXIoKSkKKyAgICAgICAgbV9hbGxSZXNvdXJjZXMuYWRkKG1fcmVuZGVyZXItPnRvUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIoKSk7CisKKyAgICBBU1NFUlQoIW1fYWxsUmVzb3VyY2VzLmlz
RW1wdHkoKSk7CisKKyAgICAvLyBUaGUgam9iIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gZGV0ZXJt
aW5lIHdoZXRlciBhbnkgb2YgdGhlICdyZXNvdXJjZXMnIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2
ZW4gJ3JlbmRlcmVyJworICAgIC8vIHJlZmVyZW5jZXMgdXMgKG9yIHdoZXRlciBhbnkgb2YgaXRz
IGtpZHMgcmVmZXJlbmNlcyB1cykgLT4gdGhhdCdzIGEgY3ljbGUsIHdlIG5lZWQgdG8gZmluZCBh
bmQgYnJlYWsgaXQuCisgICAgZW5kID0gbG9jYWxSZXNvdXJjZXMuZW5kKCk7CisgICAgZm9yIChI
YXNoU2V0PFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKj46Oml0ZXJhdG9yIGl0ID0gbG9jYWxS
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyKiByZXNvdXJjZSA9ICppdDsKKyAgICAgICAgaWYgKHBhcmVudFJlc291
cmNlcy5jb250YWlucyhyZXNvdXJjZSkgfHwgcmVzb3VyY2VDb250YWluc0N5Y2xlcyhyZXNvdXJj
ZSkpCisgICAgICAgICAgICBicmVha0N5Y2xlKHJlc291cmNlKTsKKyAgICB9CisKKyNpZiBERUJV
R19DWUNMRV9ERVRFQ1RJT04gPiAwCisgICAgZnByaW50ZihzdGRlcnIsICJcbkFmdGVyIGN5Y2xl
IGRldGVjdGlvbjpcbiIpOworICAgIG1fcmVzb3VyY2VzLT5kdW1wKG1fcmVuZGVyZXIpOworI2Vu
ZGlmCisKKyAgICBtX2FsbFJlc291cmNlcy5jbGVhcigpOworfQorCit2b2lkIFNWR1Jlc291cmNl
c0N5Y2xlU29sdmVyOjpicmVha0N5Y2xlKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNv
dXJjZUxlYWRpbmdUb0N5Y2xlKQoreworICAgIEFTU0VSVChyZXNvdXJjZUxlYWRpbmdUb0N5Y2xl
KTsKKyAgICBpZiAocmVzb3VyY2VMZWFkaW5nVG9DeWNsZSA9PSBtX3Jlc291cmNlcy0+bGlua2Vk
UmVzb3VyY2UoKSkgeworICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRMaW5rZWRSZXNvdXJjZSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3dpdGNoIChyZXNvdXJjZUxlYWRpbmdU
b0N5Y2xlLT5yZXNvdXJjZVR5cGUoKSkgeworICAgIGNhc2UgTWFza2VyUmVzb3VyY2VUeXBlOgor
ICAgICAgICBBU1NFUlQocmVzb3VyY2VMZWFkaW5nVG9DeWNsZSA9PSBtX3Jlc291cmNlcy0+bWFz
a2VyKCkpOworICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRNYXNrZXIoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBNYXJrZXJSZXNvdXJjZVR5cGU6CisgICAgICAgIEFTU0VSVChyZXNvdXJj
ZUxlYWRpbmdUb0N5Y2xlID09IG1fcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpIHx8IHJlc291cmNl
TGVhZGluZ1RvQ3ljbGUgPT0gbV9yZXNvdXJjZXMtPm1hcmtlck1pZCgpIHx8IHJlc291cmNlTGVh
ZGluZ1RvQ3ljbGUgPT0gbV9yZXNvdXJjZXMtPm1hcmtlckVuZCgpKTsKKyAgICAgICAgaWYgKG1f
cmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpID09IHJlc291cmNlTGVhZGluZ1RvQ3ljbGUpCisgICAg
ICAgICAgICBtX3Jlc291cmNlcy0+cmVzZXRNYXJrZXJTdGFydCgpOworICAgICAgICBpZiAobV9y
ZXNvdXJjZXMtPm1hcmtlck1pZCgpID09IHJlc291cmNlTGVhZGluZ1RvQ3ljbGUpCisgICAgICAg
ICAgICBtX3Jlc291cmNlcy0+cmVzZXRNYXJrZXJNaWQoKTsKKyAgICAgICAgaWYgKG1fcmVzb3Vy
Y2VzLT5tYXJrZXJFbmQoKSA9PSByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlKQorICAgICAgICAgICAg
bV9yZXNvdXJjZXMtPnJlc2V0TWFya2VyRW5kKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UGF0dGVyblJlc291cmNlVHlwZToKKyAgICBjYXNlIExpbmVhckdyYWRpZW50UmVzb3VyY2VUeXBl
OgorICAgIGNhc2UgUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGU6CisgICAgICAgIEFTU0VSVChy
ZXNvdXJjZUxlYWRpbmdUb0N5Y2xlID09IG1fcmVzb3VyY2VzLT5maWxsKCkgfHwgcmVzb3VyY2VM
ZWFkaW5nVG9DeWNsZSA9PSBtX3Jlc291cmNlcy0+c3Ryb2tlKCkpOworICAgICAgICBpZiAobV9y
ZXNvdXJjZXMtPmZpbGwoKSA9PSByZXNvdXJjZUxlYWRpbmdUb0N5Y2xlKQorICAgICAgICAgICAg
bV9yZXNvdXJjZXMtPnJlc2V0RmlsbCgpOworICAgICAgICBpZiAobV9yZXNvdXJjZXMtPnN0cm9r
ZSgpID09IHJlc291cmNlTGVhZGluZ1RvQ3ljbGUpCisgICAgICAgICAgICBtX3Jlc291cmNlcy0+
cmVzZXRTdHJva2UoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWx0ZXJSZXNvdXJjZVR5
cGU6CisjaWYgRU5BQkxFKEZJTFRFUlMpCisgICAgICAgIEFTU0VSVChyZXNvdXJjZUxlYWRpbmdU
b0N5Y2xlID09IG1fcmVzb3VyY2VzLT5maWx0ZXIoKSk7CisgICAgICAgIG1fcmVzb3VyY2VzLT5y
ZXNldEZpbHRlcigpOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2xpcHBlclJl
c291cmNlVHlwZToKKyAgICAgICAgQVNTRVJUKHJlc291cmNlTGVhZGluZ1RvQ3ljbGUgPT0gbV9y
ZXNvdXJjZXMtPmNsaXBwZXIoKSk7CisgICAgICAgIG1fcmVzb3VyY2VzLT5yZXNldENsaXBwZXIo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTb2xpZENvbG9yUmVzb3VyY2VUeXBlOgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9
CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJj
ZXNDeWNsZVNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaAkocmV2aXNpb24gNzUzNDcpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oOjc1MzQ3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
U1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXJfaAorI2RlZmluZSBTVkdSZXNvdXJjZXNDeWNsZVNvbHZl
cl9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyT2JqZWN0OworY2xhc3MgUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXI7CitjbGFzcyBTVkdSZXNvdXJjZXM7CisKK2NsYXNzIFNWR1Jlc291cmNl
c0N5Y2xlU29sdmVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBTVkdSZXNv
dXJjZXNDeWNsZVNvbHZlcihSZW5kZXJPYmplY3QqLCBTVkdSZXNvdXJjZXMqKTsKKyAgICB+U1ZH
UmVzb3VyY2VzQ3ljbGVTb2x2ZXIoKTsKKworICAgIHZvaWQgcmVzb2x2ZUN5Y2xlcygpOworCitw
cml2YXRlOgorICAgIGJvb2wgcmVzb3VyY2VDb250YWluc0N5Y2xlcyhSZW5kZXJPYmplY3QqKSBj
b25zdDsKKyAgICB2b2lkIGJyZWFrQ3ljbGUoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqKTsK
KworICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKKyAgICBTVkdSZXNvdXJjZXMqIG1fcmVz
b3VyY2VzOworICAgIEhhc2hTZXQ8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPiBtX2FsbFJl
c291cmNlczsgCit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCShy
ZXZpc2lvbiA3NTM0NykJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1NoYWRvd1Ry
ZWVFbGVtZW50cy5jcHA6NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1NoYWRvd1RyZWVFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykK
KyNpbmNsdWRlICJTVkdTaGFkb3dUcmVlRWxlbWVudHMuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQKKworU1ZH
U2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6OlNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50
KERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IFNWR0dFbGVtZW50KFNWR05hbWVzOjpnVGFnLCBk
b2N1bWVudCkKK3sKK30KKworUGFzc1JlZlB0cjxTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVu
dD4gU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1l
bnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxl
bWVudChkb2N1bWVudCkpOworfQorCitGbG9hdFNpemUgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVs
ZW1lbnQ6OmNvbnRhaW5lclRyYW5zbGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRT
aXplKG1feE9mZnNldC52YWx1ZSh0aGlzKSwgbV95T2Zmc2V0LnZhbHVlKHRoaXMpKTsKK30KKwor
Ly8gU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50CisKK2lubGluZSBTVkdTaGFkb3dUcmVlUm9vdEVs
ZW1lbnQ6OlNWR1NoYWRvd1RyZWVSb290RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIFNWR1Vz
ZUVsZW1lbnQqIHNoYWRvd1BhcmVudCkKKyAgICA6IFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVt
ZW50KGRvY3VtZW50KQoreworICAgIHNldFNoYWRvd0hvc3Qoc2hhZG93UGFyZW50KTsKKyAgICBz
ZXRJbkRvY3VtZW50KCk7Cit9CisKK1Bhc3NSZWZQdHI8U1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50
PiBTVkdTaGFkb3dUcmVlUm9vdEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIFNW
R1VzZUVsZW1lbnQqIHNoYWRvd1BhcmVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R1NoYWRvd1RyZWVSb290RWxlbWVudChkb2N1bWVudCwgc2hhZG93UGFyZW50KSk7Cit9CisKK3Zv
aWQgU1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50OjphdHRhY2hFbGVtZW50KFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IHN0eWxlLCBSZW5kZXJBcmVuYSogYXJlbmEpCit7CisgICAgQVNTRVJUKHNoYWRv
d0hvc3QoKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIHJlbmRlcmVyIHdpdGggdGhlIHNwZWNpZmll
ZCBzdHlsZQorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihhcmVu
YSwgc3R5bGUuZ2V0KCkpOworICAgIGlmIChyZW5kZXJlcikgeworICAgICAgICBzZXRSZW5kZXJl
cihyZW5kZXJlcik7CisgICAgICAgIHJlbmRlcmVyLT5zZXRTdHlsZShzdHlsZSk7CisgICAgfQor
CisgICAgLy8gU2V0IHRoZXNlIGV4cGxpY2l0bHkgc2luY2UgdGhpcyBub3JtYWxseSBoYXBwZW5z
IGR1cmluZyBhbiBhdHRhY2goKQorICAgIHNldEF0dGFjaGVkKCk7CisKKyAgICAvLyBBZGQgdGhl
IHJlbmRlcmVyIHRvIHRoZSByZW5kZXIgdHJlZQorICAgIGlmIChyZW5kZXJlcikKKyAgICAgICAg
c2hhZG93SG9zdCgpLT5yZW5kZXJlcigpLT5hZGRDaGlsZChyZW5kZXJlcik7Cit9CisKK3ZvaWQg
U1ZHU2hhZG93VHJlZVJvb3RFbGVtZW50OjpjbGVhclNoYWRvd0hvc3QoKQoreworICAgIHNldFNo
YWRvd0hvc3QoMCk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgJKHJldmlzaW9uIDc1
MzQ3KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRz
Lmg6NzUzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVF
bGVtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgU1ZHU2hhZG93VHJlZUVsZW1lbnRzX2gKKyNkZWZpbmUgU1ZHU2hhZG93VHJl
ZUVsZW1lbnRzX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHR0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJTVkdMZW5ndGguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
bG9hdFNpemU7CitjbGFzcyBTVkdVc2VFbGVtZW50OworCitjbGFzcyBTVkdTaGFkb3dUcmVlQ29u
dGFpbmVyRWxlbWVudCA6IHB1YmxpYyBTVkdHRWxlbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVu
dCopOworCisgICAgRmxvYXRTaXplIGNvbnRhaW5lclRyYW5zbGF0aW9uKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRDb250YWluZXJPZmZzZXQoY29uc3QgU1ZHTGVuZ3RoJiB4LCBjb25zdCBTVkdMZW5n
dGgmIHkpCisgICAgeworICAgICAgICBtX3hPZmZzZXQgPSB4OworICAgICAgICBtX3lPZmZzZXQg
PSB5OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVt
ZW50KERvY3VtZW50Kik7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzU2hhZG93VHJl
ZUNvbnRhaW5lckVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBTVkdMZW5n
dGggbV94T2Zmc2V0OworICAgIFNWR0xlbmd0aCBtX3lPZmZzZXQ7Cit9OworCitjbGFzcyBTVkdT
aGFkb3dUcmVlUm9vdEVsZW1lbnQgOiBwdWJsaWMgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1l
bnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1NoYWRvd1RyZWVSb290RWxl
bWVudD4gY3JlYXRlKERvY3VtZW50KiwgU1ZHVXNlRWxlbWVudCogc2hhZG93UGFyZW50KTsKKwor
ICAgIHZvaWQgYXR0YWNoRWxlbWVudChQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiwgUmVuZGVyQXJl
bmEqKTsKKyAgICB2b2lkIGNsZWFyU2hhZG93SG9zdCgpOworCitwcml2YXRlOgorICAgIFNWR1No
YWRvd1RyZWVSb290RWxlbWVudChEb2N1bWVudCosIFNWR1VzZUVsZW1lbnQqIHNoYWRvd1BhcmVu
dCk7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>